mixdog 0.9.62 → 0.9.64
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/README.md +3 -0
- package/package.json +9 -2
- package/scripts/code-graph-description-contract.mjs +3 -3
- package/scripts/verify-release-assets.mjs +2 -2
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +11 -14
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +6 -6
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -2
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +1 -0
- package/src/runtime/agent/orchestrator/config.mjs +19 -124
- package/src/runtime/agent/orchestrator/context/collect.mjs +6 -6
- package/src/runtime/agent/orchestrator/dispatch-persist.mjs +2 -2
- package/src/runtime/agent/orchestrator/internal-agents.mjs +2 -2
- package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +1 -1
- package/src/runtime/agent/orchestrator/mcp/client.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-betas.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +333 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +3 -277
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/custom-tool-wire.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +6 -6
- package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +196 -0
- package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +460 -0
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +14 -593
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +5 -280
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +357 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-headers.mjs +216 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +2 -188
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/registry.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/compact/budget.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/compact/file-reattach.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/compact/summary-schema.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/compact/summary.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +4 -4
- package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +17 -0
- package/src/runtime/agent/orchestrator/session/loop/steering.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/stored-tool-args.mjs +18 -26
- package/src/runtime/agent/orchestrator/session/loop/termination.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/delivered-completions.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/live-state.mjs +49 -0
- package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +49 -0
- package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +260 -0
- package/src/runtime/agent/orchestrator/session/store/serialize.mjs +72 -0
- package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +163 -0
- package/src/runtime/agent/orchestrator/session/store/write-guards.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/store.mjs +9 -561
- package/src/runtime/agent/orchestrator/session/tool-envelope.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +2 -2
- package/src/runtime/agent/orchestrator/stall-policy.mjs +11 -11
- package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/bash-session.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +2 -154
- package/src/runtime/agent/orchestrator/tools/builtin/cache-layers.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/cwd-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/fs-reachability.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/path-locks.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-args.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +2 -3
- package/src/runtime/agent/orchestrator/tools/builtin/read-image-resize.mjs +4 -4
- package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +5 -5
- package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-paths.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-process.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-spawn.mjs +519 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +5 -449
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/task-tool.mjs +212 -0
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +1 -7
- package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +9 -36
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +15 -3
- package/src/runtime/agent/orchestrator/tools/code-graph/search-references.mjs +429 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +2 -395
- package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/code-graph/text-mask.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/trusted-roots.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph-state.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/mutation-planner.mjs +5 -5
- package/src/runtime/agent/orchestrator/tools/next-call-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +7 -7
- package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +72 -9
- package/src/runtime/agent/orchestrator/tools/patch/parsing.mjs +4 -4
- package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +4 -4
- package/src/runtime/agent/orchestrator/tools/patch.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/result-compression.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +2 -444
- package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +505 -0
- package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +1 -1
- package/src/runtime/channels/lib/backend-dispatch.mjs +20 -5
- package/src/runtime/channels/lib/scheduler.mjs +1 -1
- package/src/runtime/channels/lib/telegram-format.mjs +1 -1
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +4 -4
- package/src/runtime/channels/tool-defs.mjs +2 -3
- package/src/runtime/memory/index.mjs +1 -5
- package/src/runtime/memory/lib/core-memory-candidates.mjs +357 -0
- package/src/runtime/memory/lib/core-memory-store.mjs +7 -357
- package/src/runtime/memory/lib/cycle-signatures.mjs +1 -1
- package/src/runtime/memory/lib/embedding-model-config.mjs +1 -1
- package/src/runtime/memory/lib/embedding-provider.mjs +1 -5
- package/src/runtime/memory/lib/embedding-worker.mjs +1 -5
- package/src/runtime/memory/lib/ko-morph.mjs +2 -2
- package/src/runtime/memory/lib/memory-config-flags.mjs +2 -5
- package/src/runtime/memory/lib/memory-cycle-requests.mjs +3 -7
- package/src/runtime/memory/lib/memory-cycle1.mjs +4 -8
- package/src/runtime/memory/lib/memory-cycle2-gate.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle2-mutations.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle2-shared.mjs +2 -5
- package/src/runtime/memory/lib/memory-cycle3.mjs +1 -5
- package/src/runtime/memory/lib/memory-embed.mjs +2 -6
- package/src/runtime/memory/lib/memory-log.mjs +8 -0
- package/src/runtime/memory/lib/memory-ops-policy.mjs +4 -8
- package/src/runtime/memory/lib/memory-recall-scope-filter.mjs +1 -1
- package/src/runtime/memory/lib/memory-recall-store.mjs +2 -193
- package/src/runtime/memory/lib/memory-score.mjs +1 -1
- package/src/runtime/memory/lib/memory-text-utils.mjs +2 -2
- package/src/runtime/memory/lib/memory.mjs +2 -6
- package/src/runtime/memory/lib/pg/adapter.mjs +2 -6
- package/src/runtime/memory/lib/pg/process.mjs +1 -5
- package/src/runtime/memory/lib/pg/supervisor.mjs +1 -5
- package/src/runtime/memory/lib/recall-format.mjs +2 -2
- package/src/runtime/memory/lib/recall-scoring.mjs +195 -0
- package/src/runtime/memory/lib/runtime-fetcher.mjs +1 -5
- package/src/runtime/memory/lib/trace-store.mjs +2 -6
- package/src/runtime/search/lib/http-fetch.mjs +6 -6
- package/src/runtime/search/lib/web-tools.mjs +2 -2
- package/src/runtime/shared/buffered-appender.mjs +1 -1
- package/src/runtime/shared/child-guardian.mjs +1 -1
- package/src/runtime/shared/child-spawn-gate.mjs +1 -1
- package/src/runtime/shared/config.mjs +4 -4
- package/src/runtime/shared/launcher-control.mjs +9 -10
- package/src/runtime/shared/llm/index.mjs +5 -20
- package/src/runtime/shared/markdown-frontmatter.mjs +1 -1
- package/src/runtime/shared/memory-snapshot.mjs +4 -4
- package/src/runtime/shared/pristine-execution.mjs +1 -1
- package/src/runtime/shared/process-lifecycle.mjs +0 -1
- package/src/runtime/shared/process-shutdown.mjs +1 -1
- package/src/runtime/shared/resource-admission.mjs +2 -2
- package/src/runtime/shared/schedule-session-run.mjs +1 -1
- package/src/runtime/shared/schedules-db.mjs +1 -1
- package/src/runtime/shared/service-discovery.mjs +2 -2
- package/src/runtime/shared/staged-update.mjs +6 -6
- package/src/runtime/shared/tool-execution-contract.mjs +1 -1
- package/src/runtime/shared/tool-primitives.mjs +1 -1
- package/src/runtime/shared/tool-surface.mjs +2 -2
- package/src/runtime/shared/update-checker.mjs +1 -1
- package/src/runtime/shared/user-cwd.mjs +3 -3
- package/src/runtime/shared/user-data-guard.mjs +4 -4
- package/src/runtime/shared/workspace-router.mjs +5 -5
- package/src/session-runtime/config-helpers.mjs +2 -3
- package/src/session-runtime/config-lifecycle.mjs +1 -1
- package/src/session-runtime/hitch-profile.mjs +1 -1
- package/src/session-runtime/lifecycle-api.mjs +6 -4
- package/src/session-runtime/model-recency.mjs +5 -5
- package/src/session-runtime/plugin-mcp.mjs +1 -1
- package/src/session-runtime/provider-request-snapshot.mjs +338 -0
- package/src/session-runtime/session-text.mjs +4 -4
- package/src/session-runtime/tool-catalog-schema.mjs +197 -0
- package/src/session-runtime/tool-catalog.mjs +6 -483
- package/src/session-runtime/tool-defs.mjs +1 -1
- package/src/standalone/agent-task-status.mjs +1 -1
- package/src/standalone/agent-tool/helpers.mjs +2 -2
- package/src/standalone/channel-admin.mjs +4 -4
- package/src/standalone/explore-tool.mjs +3 -3
- package/src/standalone/hook-bus/config.mjs +1 -1
- package/src/standalone/hook-bus/constants.mjs +1 -1
- package/src/standalone/hook-bus/rules.mjs +1 -1
- package/src/standalone/projects.mjs +1 -1
- package/src/standalone/provider-admin.mjs +2 -2
- package/src/tui/app/app-format.mjs +2 -2
- package/src/tui/app/clipboard.mjs +3 -3
- package/src/tui/app/input-parsers.mjs +1 -1
- package/src/tui/app/text-layout.mjs +1 -1
- package/src/tui/app/transcript-row-estimate.mjs +360 -0
- package/src/tui/app/transcript-window.mjs +5 -347
- package/src/tui/app/use-mouse-input.mjs +1 -1
- package/src/tui/app/use-prompt-handlers.mjs +1 -1
- package/src/tui/components/tool-execution/surface-detail.mjs +9 -9
- package/src/tui/components/tool-execution/text-format.mjs +2 -2
- package/src/tui/components/tool-output-format.mjs +7 -7
- package/src/tui/display-width.mjs +4 -4
- package/src/tui/dist/index.mjs +63 -97
- package/src/tui/engine/agent-envelope.mjs +5 -5
- package/src/tui/engine/notification-plan.mjs +1 -1
- package/src/tui/engine/queue-helpers.mjs +3 -3
- package/src/tui/engine/render-timing.mjs +4 -5
- package/src/tui/engine/session-api-ext.mjs +3 -3
- package/src/tui/engine/tool-result-status.mjs +5 -5
- package/src/tui/engine/tool-result-text.mjs +1 -1
- package/src/tui/engine/transcript-spill.mjs +585 -0
- package/src/tui/engine/tui-steering-persist.mjs +1 -1
- package/src/tui/engine.mjs +2 -474
- package/src/tui/lib/voice-setup.mjs +1 -1
- package/src/tui/markdown/format-token.mjs +1 -1
- package/src/tui/markdown/render-ansi.mjs +1 -1
- package/src/tui/markdown/table-layout.mjs +4 -4
- package/src/tui/paste-attachments.mjs +1 -1
- package/src/tui/prompt-history-store.mjs +3 -3
- package/src/tui/statusline-ansi-bridge.mjs +2 -2
- package/src/tui/theme.mjs +1 -1
- package/src/tui/transcript-tool-failures.mjs +2 -2
- package/src/ui/ansi.mjs +0 -9
- package/src/ui/statusline-format.mjs +2 -4
- package/scripts/_bench-cwc.json +0 -20
- package/scripts/_jitter-fuzz.jsx +0 -42
- package/scripts/_jitter-fuzz2.jsx +0 -30
- package/scripts/_jitter-probe.jsx +0 -35
- package/scripts/_jp2.jsx +0 -16
- package/scripts/_smoke_wd.mjs +0 -7
- package/scripts/abort-recovery-test.mjs +0 -175
- package/scripts/agent-dispatch-abort-compose-test.mjs +0 -31
- package/scripts/agent-live-arg-guard-smoke.mjs +0 -20
- package/scripts/agent-live-path-suffix-smoke.mjs +0 -34
- package/scripts/agent-live-toolcall-args-smoke.mjs +0 -45
- package/scripts/agent-loop-policy-test.mjs +0 -37
- package/scripts/agent-model-liveness-test.mjs +0 -763
- package/scripts/agent-parallel-smoke.mjs +0 -435
- package/scripts/agent-route-batch-test.mjs +0 -40
- package/scripts/agent-tag-reuse-smoke.mjs +0 -441
- package/scripts/agent-terminal-reap-test.mjs +0 -252
- package/scripts/agent-trace-io-test.mjs +0 -133
- package/scripts/ansi-color-capability-test.mjs +0 -90
- package/scripts/anthropic-admission-retry-integration-test.mjs +0 -119
- package/scripts/anthropic-maxtokens-test.mjs +0 -119
- package/scripts/anthropic-oauth-refresh-race-test.mjs +0 -397
- package/scripts/anthropic-transport-policy-test.mjs +0 -726
- package/scripts/apply-patch-edit-smoke.mjs +0 -71
- package/scripts/arg-guard-test.mjs +0 -93
- package/scripts/async-notify-settlement-test.mjs +0 -99
- package/scripts/atomic-lock-tryonce-test.mjs +0 -125
- package/scripts/background-task-meta-smoke.mjs +0 -38
- package/scripts/bench-run.mjs +0 -508
- package/scripts/boot-smoke.mjs +0 -137
- package/scripts/build-runtime-windows.ps1 +0 -242
- package/scripts/channel-daemon-smoke.mjs +0 -1103
- package/scripts/code-graph-aggregate-cwd-test.mjs +0 -158
- package/scripts/code-graph-disk-hit-test.mjs +0 -290
- package/scripts/code-graph-dispatch-test.mjs +0 -96
- package/scripts/code-graph-root-federation-test.mjs +0 -273
- package/scripts/compact-active-turn-test.mjs +0 -68
- package/scripts/compact-file-reattach-test.mjs +0 -88
- package/scripts/compact-pressure-test.mjs +0 -788
- package/scripts/compact-prior-context-flatten-test.mjs +0 -252
- package/scripts/compact-recall-digest-test.mjs +0 -57
- package/scripts/compact-smoke.mjs +0 -1017
- package/scripts/compact-trigger-migration-smoke.mjs +0 -261
- package/scripts/compacted-placeholder-scrub-test.mjs +0 -63
- package/scripts/context-mcp-metering-test.mjs +0 -1406
- package/scripts/debounced-skills-async-save-test.mjs +0 -57
- package/scripts/deferred-tool-loading-test.mjs +0 -250
- package/scripts/desktop-session-bridge-test.mjs +0 -1013
- package/scripts/dispatch-persist-recovery-test.mjs +0 -141
- package/scripts/embedding-worker-exit-test.mjs +0 -76
- package/scripts/execution-completion-dedup-test.mjs +0 -205
- package/scripts/execution-pending-resume-kick-test.mjs +0 -151
- package/scripts/execution-resume-esc-integration-test.mjs +0 -176
- package/scripts/explore-bench-tmp.mjs +0 -36
- package/scripts/explore-bench.mjs +0 -248
- package/scripts/explore-prompt-policy-test.mjs +0 -256
- package/scripts/explore-timeout-cancel-test.mjs +0 -345
- package/scripts/find-fuzzy-hidden-test.mjs +0 -267
- package/scripts/forwarder-rebind-tail-test.mjs +0 -67
- package/scripts/freevar-smoke.mjs +0 -98
- package/scripts/gemini-provider-test.mjs +0 -1448
- package/scripts/generate-oc-icons.mjs +0 -11
- package/scripts/grok-oauth-refresh-race-test.mjs +0 -273
- package/scripts/headless-pristine-execution-test.mjs +0 -614
- package/scripts/hook-bus-test.mjs +0 -552
- package/scripts/ingest-pure-conversation-smoke.mjs +0 -175
- package/scripts/internal-comms-bench-test.mjs +0 -226
- package/scripts/internal-comms-bench.mjs +0 -853
- package/scripts/internal-comms-smoke.mjs +0 -277
- package/scripts/internal-tools-normalization-test.mjs +0 -62
- package/scripts/interrupted-turn-history-test.mjs +0 -399
- package/scripts/lead-workflow-smoke.mjs +0 -592
- package/scripts/lifecycle-api-test.mjs +0 -137
- package/scripts/live-share-test.mjs +0 -148
- package/scripts/live-worker-smoke.mjs +0 -333
- package/scripts/log-writer-guard-smoke.mjs +0 -131
- package/scripts/maintenance-default-routes-test.mjs +0 -164
- package/scripts/max-output-recovery-persist-test.mjs +0 -81
- package/scripts/max-output-recovery-test.mjs +0 -368
- package/scripts/mcp-client-normalization-test.mjs +0 -45
- package/scripts/mcp-grace-deferred-test.mjs +0 -225
- package/scripts/memory-core-input-test.mjs +0 -167
- package/scripts/memory-cycle-routing-test.mjs +0 -111
- package/scripts/memory-meta-concurrency-test.mjs +0 -20
- package/scripts/memory-pg-recovery-test.mjs +0 -59
- package/scripts/memory-rule-contract-test.mjs +0 -93
- package/scripts/model-list-sanitize-test.mjs +0 -37
- package/scripts/mouse-tracking-restore-smoke.mjs +0 -107
- package/scripts/native-edit-wire-test.mjs +0 -152
- package/scripts/notify-completion-mirror-test.mjs +0 -73
- package/scripts/openai-oauth-refresh-race-test.mjs +0 -120
- package/scripts/openai-oauth-ws-1006-retry-test.mjs +0 -954
- package/scripts/openai-ws-early-settle-test.mjs +0 -216
- package/scripts/output-style-bench.mjs +0 -292
- package/scripts/output-style-smoke.mjs +0 -145
- package/scripts/parent-abort-link-test.mjs +0 -90
- package/scripts/patch-binary-cache-test.mjs +0 -181
- package/scripts/path-suffix-test.mjs +0 -57
- package/scripts/pending-completion-drop-test.mjs +0 -239
- package/scripts/pending-messages-lock-nonblocking-test.mjs +0 -62
- package/scripts/pretool-ask-runtime-test.mjs +0 -54
- package/scripts/process-lifecycle-test.mjs +0 -461
- package/scripts/prompt-immediate-render-test.mjs +0 -89
- package/scripts/prompt-input-parity-test.mjs +0 -145
- package/scripts/provider-admission-scheduler-test.mjs +0 -681
- package/scripts/provider-contract-test.mjs +0 -632
- package/scripts/provider-stream-stall-test.mjs +0 -276
- package/scripts/provider-toolcall-test.mjs +0 -3063
- package/scripts/reactive-compact-persist-smoke.mjs +0 -203
- package/scripts/recall-bench.mjs +0 -359
- package/scripts/resource-admission-test.mjs +0 -792
- package/scripts/result-classification-test.mjs +0 -75
- package/scripts/rg-runner-test.mjs +0 -240
- package/scripts/routing-corpus-test.mjs +0 -349
- package/scripts/sanitize-tool-pairs-test.mjs +0 -260
- package/scripts/session-bench-cache-break-test.mjs +0 -102
- package/scripts/session-bench.mjs +0 -1708
- package/scripts/session-context-bench.mjs +0 -344
- package/scripts/session-heartbeat-lifecycle-test.mjs +0 -68
- package/scripts/session-ingest-compaction-smoke.mjs +0 -279
- package/scripts/session-ingest-smoke.mjs +0 -177
- package/scripts/session-orphan-sweep-test.mjs +0 -109
- package/scripts/set-effort-config-test.mjs +0 -41
- package/scripts/shell-failure-diagnostics-test.mjs +0 -280
- package/scripts/shell-hardening-test.mjs +0 -209
- package/scripts/shell-jobs-windows-hide-test.mjs +0 -164
- package/scripts/ship-mode-test.mjs +0 -98
- package/scripts/smoke-loop-failure-summary-test.mjs +0 -38
- package/scripts/smoke-loop-failure-summary.mjs +0 -16
- package/scripts/smoke-loop-report.mjs +0 -221
- package/scripts/smoke-loop.mjs +0 -202
- package/scripts/smoke-runtime-negative.ps1 +0 -106
- package/scripts/statusline-quota-hysteresis-test.mjs +0 -62
- package/scripts/steering-drain-buckets-test.mjs +0 -467
- package/scripts/steering-fold-provenance-test.mjs +0 -71
- package/scripts/streaming-tail-window-test.mjs +0 -175
- package/scripts/submit-commandbusy-race-test.mjs +0 -257
- package/scripts/task-bench.mjs +0 -205
- package/scripts/terminal-bench-isolation-guards-test.mjs +0 -102
- package/scripts/termio-input-smoke.mjs +0 -199
- package/scripts/tool-result-hook-test.mjs +0 -48
- package/scripts/tool-smoke.mjs +0 -2453
- package/scripts/tool-tui-presentation-test.mjs +0 -286
- package/scripts/toolcall-args-test.mjs +0 -239
- package/scripts/tui-ambiguous-width-test.mjs +0 -113
- package/scripts/tui-background-failure-smoke.mjs +0 -73
- package/scripts/tui-perf-run.ps1 +0 -26
- package/scripts/tui-render-smoke.mjs +0 -90
- package/scripts/tui-runtime-load-bench-entry.jsx +0 -608
- package/scripts/tui-runtime-load-bench.mjs +0 -50
- package/scripts/tui-store-frame-batch-test.mjs +0 -99
- package/scripts/tui-transcript-jitter-harness-entry.jsx +0 -383
- package/scripts/tui-transcript-perf-test.mjs +0 -934
- package/scripts/usage-metrics-epoch-smoke.mjs +0 -114
- package/scripts/verify-release-assets-test.mjs +0 -281
- package/scripts/web-fetch-routing-test.mjs +0 -158
- package/scripts/webhook-smoke.mjs +0 -201
- package/scripts/windows-hide-spawn-options-test.mjs +0 -19
- package/scripts/worker-notify-rejection-test.mjs +0 -51
- package/scripts/write-backpressure-test.mjs +0 -147
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
// Generic background-task tool (status/wait/cancel), extracted from bash-tool.mjs.
|
|
2
|
+
import { getAbortSignalForSession } from '../../session/abort-lookup.mjs';
|
|
3
|
+
import { execShellCommand, stripAnsi } from '../shell-command.mjs';
|
|
4
|
+
import { wrapCommandWithSnapshot } from '../shell-snapshot.mjs';
|
|
5
|
+
import { getDestructiveCommandWarning } from '../destructive-warning.mjs';
|
|
6
|
+
import { maybeRewriteWmicProcessCommand } from '../shell-policy.mjs';
|
|
7
|
+
import { buildBashPolicyScanTargets, checkExecPolicyMessage } from '../bash-policy-scan.mjs';
|
|
8
|
+
import { markCodeGraphDirtyPaths, drainCodeGraphCache } from '../code-graph-state.mjs';
|
|
9
|
+
import {
|
|
10
|
+
buildJobNotFoundMessage,
|
|
11
|
+
startBackgroundShellJob,
|
|
12
|
+
waitForShellJob,
|
|
13
|
+
peekShellJob,
|
|
14
|
+
killShellJob,
|
|
15
|
+
watchBackgroundShellJob,
|
|
16
|
+
cancelBackgroundShellJobWatch,
|
|
17
|
+
beginShellJobWait,
|
|
18
|
+
endShellJobWait,
|
|
19
|
+
clearShellJobNotifyCtx,
|
|
20
|
+
shellJobPublicTaskResult,
|
|
21
|
+
attachShellJobResourceLease,
|
|
22
|
+
} from './shell-jobs.mjs';
|
|
23
|
+
import {
|
|
24
|
+
analyzeShellCommandEffects,
|
|
25
|
+
foregroundLongCommandHint,
|
|
26
|
+
isAutobackgroundingAllowed,
|
|
27
|
+
preflightPowerShellHygiene,
|
|
28
|
+
shellSplitSegments,
|
|
29
|
+
shellSplitPipelineSegments,
|
|
30
|
+
shellTokenize,
|
|
31
|
+
stripShellProbeWrappers,
|
|
32
|
+
} from './shell-analysis.mjs';
|
|
33
|
+
import {
|
|
34
|
+
cancelBackgroundTask,
|
|
35
|
+
completeBackgroundTask,
|
|
36
|
+
getBackgroundTask,
|
|
37
|
+
registerBackgroundTask,
|
|
38
|
+
renderBackgroundTask,
|
|
39
|
+
renderBackgroundTaskList,
|
|
40
|
+
resolveExecutionMode,
|
|
41
|
+
} from '../../../../shared/background-tasks.mjs';
|
|
42
|
+
import { resolveShellFor } from './shell-runtime.mjs';
|
|
43
|
+
import { smartMiddleTruncate } from './shell-output.mjs';
|
|
44
|
+
import { normalizeOutputPath } from './path-utils.mjs';
|
|
45
|
+
import { normalizeErrorMessage } from './path-diagnostics.mjs';
|
|
46
|
+
import { invalidateBuiltinResultCache } from './cache-layers.mjs';
|
|
47
|
+
import { resolveOptionalCwd } from './cwd-utils.mjs';
|
|
48
|
+
import { scrubLoaderVars, scrubProviderSecrets } from '../env-scrub.mjs';
|
|
49
|
+
import { resolveSessionCwd, stateFilePath, wrapPowerShellWithCwdProbe, wrapBashWithCwdProbe } from '../shell-state.mjs';
|
|
50
|
+
import { resourceAdmission } from '../../../../shared/resource-admission.mjs';
|
|
51
|
+
|
|
52
|
+
// Post-exec drift detection. After a foreground shell command, compare the
|
|
53
|
+
// live mtime+size of files mixdog has already read this session against their
|
|
54
|
+
// pre-command state (captured just before exec). Files this command changed
|
|
55
|
+
// surface as ONE compact reminder so the model re-reads before editing —
|
|
56
|
+
// closing the "external write -> stale old_string -> code 8" gap when shell is
|
|
57
|
+
// routed through this tool. Bounded to the tracked-read set (capped) so cost
|
|
58
|
+
// stays off the whole-cwd path; emits nothing when no read file changed.
|
|
59
|
+
|
|
60
|
+
const TERMINAL_TASK_STATUSES = new Set(['completed', 'failed', 'cancelled']);
|
|
61
|
+
|
|
62
|
+
export function sleep(ms) {
|
|
63
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function shellJobToTaskStatus(status) {
|
|
67
|
+
if (status === 'completed') return 'completed';
|
|
68
|
+
if (status === 'cancelled') return 'cancelled';
|
|
69
|
+
if (status === 'running') return 'running';
|
|
70
|
+
return 'failed';
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function refreshShellTask(taskId, { includeRunning = false } = {}) {
|
|
74
|
+
const job = peekShellJob(taskId);
|
|
75
|
+
if (!job) return null;
|
|
76
|
+
const publicResult = shellJobPublicTaskResult(job);
|
|
77
|
+
if (job.status !== 'running') {
|
|
78
|
+
completeBackgroundTask(taskId, {
|
|
79
|
+
status: shellJobToTaskStatus(job.status),
|
|
80
|
+
result: publicResult,
|
|
81
|
+
resultText: JSON.stringify(publicResult, null, 2),
|
|
82
|
+
notify: false,
|
|
83
|
+
});
|
|
84
|
+
} else if (includeRunning) {
|
|
85
|
+
const task = getBackgroundTask(taskId);
|
|
86
|
+
if (task) {
|
|
87
|
+
task.result = publicResult;
|
|
88
|
+
task.resultText = JSON.stringify(publicResult, null, 2);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return job;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async function waitForGenericTask(taskId, { timeoutMs = 30_000, pollMs = 250, context = {} } = {}) {
|
|
95
|
+
const started = Date.now();
|
|
96
|
+
const deadline = started + Math.max(0, Number(timeoutMs) || 0);
|
|
97
|
+
let task = getBackgroundTask(taskId, { context });
|
|
98
|
+
if (!task) return null;
|
|
99
|
+
while (task && task.status === 'running' && Date.now() < deadline) {
|
|
100
|
+
await sleep(Math.max(25, Number(pollMs) || 250));
|
|
101
|
+
task = getBackgroundTask(taskId, { context });
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
task,
|
|
105
|
+
waitedMs: Date.now() - started,
|
|
106
|
+
waitTimedOut: Boolean(task && task.status === 'running'),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function renderTaskCancelSuccess(taskId, task) {
|
|
111
|
+
const surface = task?.surface || 'task';
|
|
112
|
+
const operation = task?.operation || 'run';
|
|
113
|
+
return [
|
|
114
|
+
'status: completed',
|
|
115
|
+
`task_id: ${taskId}`,
|
|
116
|
+
`cancelled: ${surface}/${operation}`,
|
|
117
|
+
].join('\n');
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export async function executeTaskTool(args, options = {}) {
|
|
121
|
+
const action = typeof args.action === 'string' ? args.action.toLowerCase() : (args.task_id ? 'wait' : 'list');
|
|
122
|
+
if (action === 'list') return renderBackgroundTaskList({ context: options });
|
|
123
|
+
|
|
124
|
+
const taskId = typeof args.task_id === 'string' ? args.task_id.trim() : '';
|
|
125
|
+
if (!taskId) return 'Error: task_id is required';
|
|
126
|
+
// sess_* values are agent/orchestrator session ids, not background shell
|
|
127
|
+
// tasks. task only resolves `shell mode=async` tasks, so surface a
|
|
128
|
+
// self-correcting hint instead of the bare "task not found" that otherwise
|
|
129
|
+
// invites a wrong-tool retry loop.
|
|
130
|
+
if (/^sess_/.test(taskId)) {
|
|
131
|
+
return `Error: "${taskId}" is an agent/session id, not a background task_id. Agent tasks deliver completion notifications; use agent list/read only for manual recovery.`;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const task = getBackgroundTask(taskId, { context: options });
|
|
135
|
+
if (!task) return `Error: task not found: ${taskId}`;
|
|
136
|
+
const isShellTask = task.surface === 'shell';
|
|
137
|
+
|
|
138
|
+
if (action === 'status' || action === 'read') {
|
|
139
|
+
if (isShellTask) refreshShellTask(taskId, { includeRunning: action === 'read' });
|
|
140
|
+
const latest = getBackgroundTask(taskId, { context: options }) || task;
|
|
141
|
+
return renderBackgroundTask(latest, { includeResult: action === 'read' });
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (action === 'cancel') {
|
|
145
|
+
if (isShellTask) {
|
|
146
|
+
const job = killShellJob(taskId);
|
|
147
|
+
cancelBackgroundShellJobWatch(taskId);
|
|
148
|
+
clearShellJobNotifyCtx(taskId);
|
|
149
|
+
cancelBackgroundTask(taskId, 'cancelled by task control');
|
|
150
|
+
return job ? renderTaskCancelSuccess(taskId, getBackgroundTask(taskId, { context: options }) || task) : buildJobNotFoundMessage(taskId);
|
|
151
|
+
}
|
|
152
|
+
cancelBackgroundTask(taskId, 'cancelled by task control');
|
|
153
|
+
return renderTaskCancelSuccess(taskId, getBackgroundTask(taskId, { context: options }) || task);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (action !== 'wait') {
|
|
157
|
+
return `Error: task action must be one of list|status|read|wait|cancel (got ${JSON.stringify(args.action)})`;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (!isShellTask) {
|
|
161
|
+
const waited = await waitForGenericTask(taskId, {
|
|
162
|
+
timeoutMs: typeof args.timeout_ms === 'number' ? args.timeout_ms : 30_000,
|
|
163
|
+
pollMs: typeof args.poll_ms === 'number' ? args.poll_ms : 250,
|
|
164
|
+
context: options,
|
|
165
|
+
});
|
|
166
|
+
if (!waited?.task) return `Error: task not found: ${taskId}`;
|
|
167
|
+
const rendered = renderBackgroundTask(waited.task, { includeResult: TERMINAL_TASK_STATUSES.has(waited.task.status) });
|
|
168
|
+
return waited.waitTimedOut ? `${rendered}\nwait_timed_out: true\nwaited_ms: ${waited.waitedMs}` : rendered;
|
|
169
|
+
}
|
|
170
|
+
// Register as a synchronous waiter and cancel the armed watcher BEFORE
|
|
171
|
+
// awaiting: the caller consumes the outcome via task wait, so no async
|
|
172
|
+
// push is wanted, and cancelling up front closes the race where the armed
|
|
173
|
+
// watcher (watch callback or 2s poll) fires during the await window. The
|
|
174
|
+
// persistent notify ctx survives the cancel for a possible re-arm.
|
|
175
|
+
beginShellJobWait(taskId);
|
|
176
|
+
cancelBackgroundShellJobWatch(taskId);
|
|
177
|
+
try {
|
|
178
|
+
const job = await waitForShellJob(taskId, {
|
|
179
|
+
timeoutMs: typeof args.timeout_ms === 'number' ? args.timeout_ms : 30_000,
|
|
180
|
+
pollMs: typeof args.poll_ms === 'number' ? args.poll_ms : 250,
|
|
181
|
+
});
|
|
182
|
+
if (!job) return buildJobNotFoundMessage(taskId);
|
|
183
|
+
if (job.status !== 'running') {
|
|
184
|
+
const publicResult = shellJobPublicTaskResult(job);
|
|
185
|
+
completeBackgroundTask(taskId, {
|
|
186
|
+
status: shellJobToTaskStatus(job.status),
|
|
187
|
+
result: publicResult,
|
|
188
|
+
resultText: JSON.stringify(publicResult, null, 2),
|
|
189
|
+
notify: false,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
const latest = getBackgroundTask(taskId, { context: options }) || task;
|
|
193
|
+
const rendered = renderBackgroundTask(latest, { includeResult: job.status !== 'running' });
|
|
194
|
+
return job.status === 'running' ? `${rendered}\nwait_timed_out: true\nwaited_ms: ${job.waitedMs}` : rendered;
|
|
195
|
+
} finally {
|
|
196
|
+
// Only the LAST concurrent waiter (post-decrement count 0) may re-arm,
|
|
197
|
+
// and only for a still-running job (timed-out wait). Re-arm with no ctx
|
|
198
|
+
// arg — watchBackgroundShellJob falls back to the persistent ctx. This
|
|
199
|
+
// prevents the concurrent-waiter double-deliver: while any other waiter
|
|
200
|
+
// is still synchronously consuming the outcome, the watcher stays off.
|
|
201
|
+
const remaining = endShellJobWait(taskId);
|
|
202
|
+
if (remaining === 0) {
|
|
203
|
+
const latest = peekShellJob(taskId);
|
|
204
|
+
if (latest && latest.status === 'running') watchBackgroundShellJob(taskId);
|
|
205
|
+
// LAST waiter out and the job already finished — the outcome was
|
|
206
|
+
// consumed synchronously, so no re-arm. Drop the persisted ctx here
|
|
207
|
+
// or it leaks (cleanup only runs on a real watcher settle, which
|
|
208
|
+
// never happens for a never-re-armed entry).
|
|
209
|
+
else clearShellJobNotifyCtx(taskId);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
@@ -334,7 +334,7 @@ function editDistance(a, b) {
|
|
|
334
334
|
return prev[bb.length];
|
|
335
335
|
}
|
|
336
336
|
|
|
337
|
-
|
|
337
|
+
function suggestBuiltinToolName(name) {
|
|
338
338
|
if (typeof name !== 'string' || !name) return null;
|
|
339
339
|
const canonical = canonicalizeBuiltinToolName(name);
|
|
340
340
|
if (canonical !== name) return canonical;
|
|
@@ -42,7 +42,6 @@ import {
|
|
|
42
42
|
ensureDiskCodeGraphLoaded,
|
|
43
43
|
drainCodeGraphCacheStrict,
|
|
44
44
|
getDiskCodeGraphEntry,
|
|
45
|
-
hasLegacyDiskCodeGraphCache,
|
|
46
45
|
probeDiskCodeGraphEntry,
|
|
47
46
|
_setDiskCodeGraphEntry,
|
|
48
47
|
} from './disk-cache.mjs';
|
|
@@ -177,23 +176,18 @@ export async function _runDiskCodeGraphFastPath({
|
|
|
177
176
|
}
|
|
178
177
|
}
|
|
179
178
|
|
|
180
|
-
// A legacy single-file cache can be very large. Its migration is deliberately
|
|
181
|
-
// performed by _buildCodeGraph in the Worker; probing it here would poison the
|
|
182
|
-
// parent disk-cache loaded state after a synchronous JSON.parse.
|
|
183
179
|
export function _prepareDiskCodeGraphFastPath({
|
|
184
180
|
graphCwd,
|
|
185
|
-
hasLegacyCache = hasLegacyDiskCodeGraphCache,
|
|
186
181
|
ensureDiskLoaded = ensureDiskCodeGraphLoaded,
|
|
187
182
|
probeDiskEntry = probeDiskCodeGraphEntry,
|
|
188
183
|
runFastPath,
|
|
189
184
|
}) {
|
|
190
|
-
if (hasLegacyCache()) return runFastPath(null);
|
|
191
185
|
ensureDiskLoaded();
|
|
192
186
|
return runFastPath(probeDiskEntry(graphCwd, CODE_GRAPH_FAST_PATH_MAX_BYTES));
|
|
193
187
|
}
|
|
194
188
|
|
|
195
189
|
// Worker disk writes are debounced with an unref'd timer. Drain before sending
|
|
196
|
-
// success so
|
|
190
|
+
// success so every loaded cwd persists before this Worker can
|
|
197
191
|
// exit; a drain failure is intentionally thrown to the worker's failure path.
|
|
198
192
|
export function _postCodeGraphWorkerSuccess(
|
|
199
193
|
graph,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// Per-cwd on-disk code-graph cache: manifest + <hash>.json layout,
|
|
2
|
-
// single-file
|
|
1
|
+
// Per-cwd on-disk code-graph cache: manifest + <hash>.json layout, stray
|
|
2
|
+
// single-file cleanup, budget pruning, orphan sweep, and a debounced
|
|
3
3
|
// atomic flush. Owns its own module-level state (the in-memory disk map,
|
|
4
4
|
// manifest, flush timer). Extracted verbatim from code-graph.mjs.
|
|
5
5
|
import { createHash } from 'node:crypto';
|
|
@@ -58,37 +58,12 @@ function _hashCwd(cwd) {
|
|
|
58
58
|
return hash;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
for (const [cwd, entry] of Object.entries(parsed)) {
|
|
68
|
-
if (!entry || typeof entry !== 'object') continue;
|
|
69
|
-
_diskCodeGraphCache.set(_canonicalGraphCwd(cwd), entry);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
// Rename rather than delete so a rollback can recover the blob if the
|
|
73
|
-
// per-cwd layout misbehaves. Next persist round writes the new layout
|
|
74
|
-
// and the legacy path no longer exists, so this branch is a one-shot.
|
|
75
|
-
renameSync(legacy, `${legacy}.bak-${Date.now()}`);
|
|
76
|
-
// Schedule an immediate flush so the in-memory entries we just loaded
|
|
77
|
-
// get written out as per-cwd files now, instead of waiting for the
|
|
78
|
-
// next graph rebuild to trigger _setDiskCodeGraphEntry. Without this,
|
|
79
|
-
// the layout transition is half-complete (legacy renamed, new layout
|
|
80
|
-
// empty) until an unrelated build happens to land.
|
|
81
|
-
_scheduleDiskCodeGraphCacheFlush();
|
|
82
|
-
} catch (err) {
|
|
83
|
-
process.stderr.write(`[code-graph] legacy cache migration failed: ${err?.message || err}\n`);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// This intentionally does not call _loadDiskCodeGraphCache: the parent-side
|
|
88
|
-
// fast path uses it to leave a legacy blob's synchronous read/JSON.parse to
|
|
89
|
-
// the Worker, where normal one-shot migration still happens.
|
|
90
|
-
export function hasLegacyDiskCodeGraphCache() {
|
|
91
|
-
return existsSync(join(getPluginData(), CODE_GRAPH_DISK_FILE));
|
|
61
|
+
// The pre-layout single-file cache blob is dead weight: caches are fully
|
|
62
|
+
// regenerable, so remove the stray file instead of migrating its contents.
|
|
63
|
+
function _cleanupLegacyDiskCache() {
|
|
64
|
+
const stale = join(getPluginData(), CODE_GRAPH_DISK_FILE);
|
|
65
|
+
if (!existsSync(stale)) return;
|
|
66
|
+
try { unlinkSync(stale); } catch { /* best-effort */ }
|
|
92
67
|
}
|
|
93
68
|
|
|
94
69
|
function _pruneDiskCodeGraphEntries(_now = Date.now()) {
|
|
@@ -234,9 +209,7 @@ function _loadDiskCodeGraphCache(now = Date.now()) {
|
|
|
234
209
|
if (_diskCodeGraphCacheLoaded) return;
|
|
235
210
|
_diskCodeGraphCacheLoaded = true;
|
|
236
211
|
|
|
237
|
-
|
|
238
|
-
// skip this branch because the source file was renamed to .bak.
|
|
239
|
-
_migrateLegacyDiskCache();
|
|
212
|
+
_cleanupLegacyDiskCache();
|
|
240
213
|
|
|
241
214
|
// Manifest-only load: per-cwd entries are picked up by _ensureCwdLoaded()
|
|
242
215
|
// at lookup time. Cold start now pays a single small JSON.parse instead
|
|
@@ -609,10 +609,18 @@ export async function executeCodeGraphTool(name, args, cwd, signal = null, optio
|
|
|
609
609
|
let effectiveCwd = baseCwd;
|
|
610
610
|
const baseProjectRoot = _findDirProjectRoot(baseCwd);
|
|
611
611
|
const filesystemRootCwd = !baseProjectRoot && _isFilesystemRootPath(baseCwd);
|
|
612
|
-
|
|
612
|
+
const aggregateFilesAtBase = _collectGraphFileList(args, { cap: false });
|
|
613
|
+
const rawModeAtBase = String(args?.mode || '').trim();
|
|
614
|
+
const exactDotFederation = aggregateFilesAtBase.length === 1
|
|
615
|
+
&& aggregateFilesAtBase[0] === '.'
|
|
616
|
+
&& ROOT_FEDERATED_MODES.has(rawModeAtBase);
|
|
617
|
+
const parentDotFederation = !baseProjectRoot
|
|
618
|
+
&& !filesystemRootCwd
|
|
619
|
+
&& exactDotFederation;
|
|
620
|
+
if (filesystemRootCwd || parentDotFederation) {
|
|
613
621
|
const trustedRoots = collectTrustedCodeGraphRoots(baseCwd);
|
|
614
|
-
const files =
|
|
615
|
-
const rawMode =
|
|
622
|
+
const files = exactDotFederation ? [] : aggregateFilesAtBase;
|
|
623
|
+
const rawMode = rawModeAtBase;
|
|
616
624
|
const canFederate = files.length > 0 || ROOT_FEDERATED_MODES.has(rawMode);
|
|
617
625
|
if (files.length) {
|
|
618
626
|
if (files.some((file) => _AGGREGATE_FILE_WILDCARD_RE.test(file))) {
|
|
@@ -664,6 +672,10 @@ export async function executeCodeGraphTool(name, args, cwd, signal = null, optio
|
|
|
664
672
|
if (trustedRoots.length && canFederate) {
|
|
665
673
|
const projectArgs = { ...args };
|
|
666
674
|
delete projectArgs.cwd;
|
|
675
|
+
if (exactDotFederation) {
|
|
676
|
+
delete projectArgs.file;
|
|
677
|
+
delete projectArgs.files;
|
|
678
|
+
}
|
|
667
679
|
const runOne = async (root, nextArgs) => executeCodeGraphTool(
|
|
668
680
|
name,
|
|
669
681
|
nextArgs,
|