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
|
@@ -3,14 +3,20 @@
|
|
|
3
3
|
// executePatchTool entry point + replay capture. Moved verbatim from
|
|
4
4
|
// patch.mjs; control flow and output are unchanged.
|
|
5
5
|
|
|
6
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
7
|
-
import { resolve as pathResolve, isAbsolute, join as pathJoin } from 'node:path';
|
|
6
|
+
import { chmodSync, existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, statSync } from 'node:fs';
|
|
7
|
+
import { dirname as pathDirname, resolve as pathResolve, isAbsolute, join as pathJoin } from 'node:path';
|
|
8
8
|
import { parsePatch } from 'diff';
|
|
9
9
|
import { getAbortSignalForSession } from '../../session/abort-lookup.mjs';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
clearReadSnapshotForPath,
|
|
12
|
+
invalidateBuiltinResultCache,
|
|
13
|
+
normalizeOutputPath,
|
|
14
|
+
withBuiltinPathLocks,
|
|
15
|
+
} from '../builtin.mjs';
|
|
11
16
|
import { withAdvisoryLocks } from '../builtin/advisory-lock.mjs';
|
|
12
17
|
import { wrapMutationRouteOutput } from '../mutation-planner.mjs';
|
|
13
18
|
import { getPluginData } from '../../config.mjs';
|
|
19
|
+
import { markCodeGraphDirtyPaths } from '../code-graph-state.mjs';
|
|
14
20
|
import { prepareInput, isV4APatchInput, hasUnifiedBareV4AHunk, canFallbackCountedUnified, parseV4APatch, parseUnifiedBareV4APatch, parseUnifiedCountedAsV4APatch, isCompactedPlaceholderPatch, salvageV4AOpening } from './parsing.mjs';
|
|
15
21
|
import {
|
|
16
22
|
resolveBasePath,
|
|
@@ -27,7 +33,6 @@ import {
|
|
|
27
33
|
import { ensureNativePatchBinaryAvailable } from './native-server.mjs';
|
|
28
34
|
import { assertPathReachable } from '../builtin/fs-reachability.mjs';
|
|
29
35
|
import { dispatchNativePatch, dispatchJsPatchEntries } from './dispatch.mjs';
|
|
30
|
-
import { normalizeOutputPath } from '../builtin.mjs';
|
|
31
36
|
import {
|
|
32
37
|
planV4ARenameSections,
|
|
33
38
|
applyV4ARenameSections,
|
|
@@ -42,6 +47,42 @@ function isPatchErrorText(text) {
|
|
|
42
47
|
return /^Error:/i.test(String(text ?? '').trimStart());
|
|
43
48
|
}
|
|
44
49
|
|
|
50
|
+
function capturePatchRollbackState(paths) {
|
|
51
|
+
return paths.map((fullPath) => {
|
|
52
|
+
if (!existsSync(fullPath)) return { fullPath, existed: false, content: null, mode: null };
|
|
53
|
+
const stat = statSync(fullPath);
|
|
54
|
+
if (!stat.isFile()) throw new Error(`apply_patch: rollback snapshot target is not a regular file: ${normalizeOutputPath(fullPath)}`);
|
|
55
|
+
return {
|
|
56
|
+
fullPath,
|
|
57
|
+
existed: true,
|
|
58
|
+
content: readFileSync(fullPath),
|
|
59
|
+
mode: stat.mode,
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function restorePatchRollbackState(snapshots, readStateScope) {
|
|
65
|
+
const errors = [];
|
|
66
|
+
const paths = snapshots.map((snapshot) => snapshot.fullPath);
|
|
67
|
+
for (const snapshot of snapshots) {
|
|
68
|
+
try {
|
|
69
|
+
if (snapshot.existed) {
|
|
70
|
+
mkdirSync(pathDirname(snapshot.fullPath), { recursive: true });
|
|
71
|
+
writeFileSync(snapshot.fullPath, snapshot.content);
|
|
72
|
+
if (snapshot.mode != null) chmodSync(snapshot.fullPath, snapshot.mode);
|
|
73
|
+
} else if (existsSync(snapshot.fullPath)) {
|
|
74
|
+
rmSync(snapshot.fullPath, { force: true });
|
|
75
|
+
}
|
|
76
|
+
} catch (err) {
|
|
77
|
+
errors.push(`${normalizeOutputPath(snapshot.fullPath)} — ${err?.message || String(err)}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
invalidateBuiltinResultCache(paths);
|
|
81
|
+
markCodeGraphDirtyPaths(paths);
|
|
82
|
+
for (const fullPath of paths) clearReadSnapshotForPath(fullPath, readStateScope);
|
|
83
|
+
return errors;
|
|
84
|
+
}
|
|
85
|
+
|
|
45
86
|
// Apply one "wave" (a set of unique-target parsed entries) via the native
|
|
46
87
|
// (+ JS out-of-base) split. Returns { backend, text } on success or
|
|
47
88
|
// { backend, error } so the caller decides whether earlier waves already
|
|
@@ -99,7 +140,7 @@ async function applyParsedWave({ parsed: wparsed, entries: wentries, headerRewri
|
|
|
99
140
|
async function applyPatchSequence(patchStr, requestedFormat, basePath, ctx) {
|
|
100
141
|
const {
|
|
101
142
|
v4aConvertOpts, dryRun, fuzz, fuzzy, rejectPartial,
|
|
102
|
-
readStateScope, abortSignal, mutationPlan,
|
|
143
|
+
readStateScope, abortSignal, mutationPlan, rollbackOnFailure,
|
|
103
144
|
} = ctx;
|
|
104
145
|
|
|
105
146
|
// Build the ordered section "units". Each unit resolves its own parsed
|
|
@@ -206,6 +247,14 @@ async function applyPatchSequence(patchStr, requestedFormat, basePath, ctx) {
|
|
|
206
247
|
|
|
207
248
|
return withBuiltinPathLocks(lockPaths, () =>
|
|
208
249
|
withAdvisoryLocks(lockPaths, async () => {
|
|
250
|
+
let rollbackSnapshots = [];
|
|
251
|
+
if (!dryRun && rollbackOnFailure) {
|
|
252
|
+
try {
|
|
253
|
+
rollbackSnapshots = capturePatchRollbackState(lockPaths);
|
|
254
|
+
} catch (err) {
|
|
255
|
+
return `Error: ${err?.message || String(err)}`;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
209
258
|
const applied = [];
|
|
210
259
|
const skipped = [];
|
|
211
260
|
let failed = null;
|
|
@@ -275,17 +324,27 @@ async function applyPatchSequence(patchStr, requestedFormat, basePath, ctx) {
|
|
|
275
324
|
return wrapPatchMutationOutput(body, mutationPlan, { backend });
|
|
276
325
|
}
|
|
277
326
|
const failMsg = failed.error.replace(/^Error:\s*/, '');
|
|
327
|
+
const rollbackErrors = (!dryRun && rollbackOnFailure)
|
|
328
|
+
? restorePatchRollbackState(rollbackSnapshots, readStateScope)
|
|
329
|
+
: [];
|
|
278
330
|
const committedPhrase = dryRun
|
|
279
331
|
? `${applied.length} earlier section(s) were validated`
|
|
280
|
-
:
|
|
332
|
+
: (rollbackOnFailure
|
|
333
|
+
? (rollbackErrors.length === 0
|
|
334
|
+
? `${applied.length} earlier section(s) were applied, then all touched paths were rolled back to their pre-patch state`
|
|
335
|
+
: `${applied.length} earlier section(s) were applied, but rollback was incomplete`)
|
|
336
|
+
: `${applied.length} earlier section(s) were applied to disk (committed) and left in place`);
|
|
281
337
|
const lines = [
|
|
282
338
|
`Error: apply_patch sequence stopped at section ${failedIndex + 1}/${units.length} (${failed.displayPath}); `
|
|
283
339
|
+ `${committedPhrase}; ${skipped.length} later section(s) were skipped (not attempted).`,
|
|
284
340
|
];
|
|
285
341
|
if (appliedTexts) {
|
|
286
|
-
lines.push(`--- ${dryRun ? 'validated' : 'applied (committed to disk)'} ---`, appliedTexts);
|
|
342
|
+
lines.push(`--- ${dryRun ? 'validated' : (rollbackOnFailure ? 'applied before rollback' : 'applied (committed to disk)')} ---`, appliedTexts);
|
|
287
343
|
}
|
|
288
344
|
lines.push(`--- failed section: ${failed.displayPath} ---`, failMsg);
|
|
345
|
+
if (rollbackErrors.length > 0) {
|
|
346
|
+
lines.push('--- rollback incomplete ---', ...rollbackErrors);
|
|
347
|
+
}
|
|
289
348
|
if (skipped.length > 0) {
|
|
290
349
|
lines.push(`--- skipped (not attempted): ${skipped.join(', ')} ---`);
|
|
291
350
|
}
|
|
@@ -397,14 +456,18 @@ async function apply_patch(args, cwd, options = {}) {
|
|
|
397
456
|
const rejectedV4AHunks = [];
|
|
398
457
|
const v4aConvertOpts = { rejectPartial, rejectedHunks: rejectedV4AHunks, fuzzy, dryRun, readStateScope };
|
|
399
458
|
// Default internal ordered mode: apply sections in listed order, stop at the
|
|
400
|
-
// first failure, and
|
|
459
|
+
// first failure, and roll every touched path back to its pre-patch state.
|
|
460
|
+
// mode:"partial" retains the old committed-prefix behavior for internal
|
|
461
|
+
// callers that explicitly need it.
|
|
401
462
|
// The legacy bulk/atomic path remains available as an explicit escape hatch.
|
|
463
|
+
const patchMode = String(args?.mode || '').toLowerCase();
|
|
402
464
|
const legacyBulkMode = args?.sequence === false
|
|
403
|
-
|| ['atomic', 'bulk'].includes(
|
|
465
|
+
|| ['atomic', 'bulk'].includes(patchMode);
|
|
404
466
|
if (!legacyBulkMode) {
|
|
405
467
|
return applyPatchSequence(patchStr, requestedFormat, basePath, {
|
|
406
468
|
v4aConvertOpts, dryRun, fuzz, fuzzy, rejectPartial,
|
|
407
469
|
readStateScope, abortSignal, mutationPlan,
|
|
470
|
+
rollbackOnFailure: patchMode !== 'partial',
|
|
408
471
|
});
|
|
409
472
|
}
|
|
410
473
|
let v4aRenamePlan = null;
|
|
@@ -16,7 +16,7 @@ export function prepareInput(patchStr) {
|
|
|
16
16
|
return String(patchStr).replace(/^\uFEFF/, '').replace(/\r\n/g, '\n');
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
function isApplyPatchEnvelope(patchStr) {
|
|
20
20
|
const text = prepareInput(patchStr).trimStart();
|
|
21
21
|
return text.startsWith('*** Begin Patch')
|
|
22
22
|
|| text.startsWith('*** Add File:')
|
|
@@ -96,7 +96,7 @@ export function hasUnifiedBareV4AHunk(patchStr) {
|
|
|
96
96
|
return text.split('\n').some((line) => line.startsWith('@@') && !UNIFIED_HUNK_HEADER_RE.test(line));
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
function isUnifiedHunkCountError(err) {
|
|
100
100
|
const message = String(err?.message || err || '');
|
|
101
101
|
return /Hunk at line .*more lines than expected|Hunk at line .*less lines than expected|expected \d+ old lines|line count did not match/i.test(message);
|
|
102
102
|
}
|
|
@@ -128,7 +128,7 @@ function stripV4APathHeader(line, prefix) {
|
|
|
128
128
|
return stripPatchPathMetadata(String(line || '').slice(prefix.length));
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
function normaliseV4APath(rawPath) {
|
|
132
132
|
const p = stripPatchPathMetadata(rawPath);
|
|
133
133
|
if (!p) return '';
|
|
134
134
|
return p.replace(/^["']|["']$/g, '').replace(/\\/g, '/');
|
|
@@ -187,7 +187,7 @@ function splitPatchLines(patchStr) {
|
|
|
187
187
|
// Matches EVERY placeholder variant, not just "<key>: <N> chars, sha256:…":
|
|
188
188
|
// the marker key segment varies ("patch", "old_string", "patch v4a, sha256:…",
|
|
189
189
|
// etc.), so anchor on the "[mixdog compacted …]" bracket span alone.
|
|
190
|
-
|
|
190
|
+
const COMPACTED_PLACEHOLDER_RE = /^\s*\[mixdog compacted\b[^\]\n]*\]/;
|
|
191
191
|
|
|
192
192
|
// Mid-body scan reuses the same broad bracket shape. It only runs on lines that
|
|
193
193
|
// are NOT unified diff content (+/-/space-prefixed), so a legit edit whose real
|
|
@@ -197,7 +197,7 @@ function nativeHeaderSupported(entry) {
|
|
|
197
197
|
// ancestor when the leaf does not yet exist (e.g. a create-mode target).
|
|
198
198
|
// Returns the resolved real path, or the lexically-resolved path if no
|
|
199
199
|
// ancestor can be realpath'd.
|
|
200
|
-
|
|
200
|
+
function realpathNearestExistingAncestor(absPath) {
|
|
201
201
|
let cur = pathResolve(absPath);
|
|
202
202
|
while (true) {
|
|
203
203
|
try {
|
|
@@ -530,7 +530,7 @@ function readRawBufForV4AConversion(fullPath) {
|
|
|
530
530
|
// file: the V4A source-line cache MUST key on this normalized form at every
|
|
531
531
|
// get/set, otherwise a mixed-case duplicate section refreshed under one
|
|
532
532
|
// casing is missed under another and converts against stale/original lines.
|
|
533
|
-
|
|
533
|
+
function v4aLinesCacheKey(fullPath) {
|
|
534
534
|
return process.platform === 'win32' ? String(fullPath).toLowerCase() : String(fullPath);
|
|
535
535
|
}
|
|
536
536
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
const APPLY_PATCH_LARK_GRAMMAR = `start: begin_patch hunk+ end_patch
|
|
2
2
|
begin_patch: "*** Begin Patch" LF
|
|
3
3
|
end_patch: "*** End Patch" LF?
|
|
4
4
|
|
|
@@ -19,14 +19,14 @@ eof_line: "*** End of File" LF
|
|
|
19
19
|
%import common.LF
|
|
20
20
|
`;
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
const APPLY_PATCH_FREEFORM_DESCRIPTION = 'Use the `apply_patch` tool to edit files. This is a FREEFORM tool, so do not wrap the patch in JSON.';
|
|
23
23
|
|
|
24
24
|
export const PATCH_TOOL_DEFS = [
|
|
25
25
|
{
|
|
26
26
|
name: 'apply_patch',
|
|
27
27
|
title: 'Mixdog Apply Patch',
|
|
28
28
|
annotations: { title: 'Mixdog Apply Patch', readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false, compressible: false, compressibleLossless: true },
|
|
29
|
-
description: 'Apply known file edits in one patch; sections run in listed order. Do not split a dependent edit across turns.',
|
|
29
|
+
description: 'Apply known file edits in one atomic patch; sections run in listed order and all touched paths roll back if any section fails. Do not split a dependent edit across turns.',
|
|
30
30
|
freeformDescription: APPLY_PATCH_FREEFORM_DESCRIPTION,
|
|
31
31
|
freeform: {
|
|
32
32
|
type: 'grammar',
|
|
@@ -36,7 +36,7 @@ export const PATCH_TOOL_DEFS = [
|
|
|
36
36
|
inputSchema: {
|
|
37
37
|
type: 'object',
|
|
38
38
|
properties: {
|
|
39
|
-
patch: { type: 'string', description: 'Patch text. V4A preferred; use one file block per target file with exact current context; include all known edits in listed order.' },
|
|
39
|
+
patch: { type: 'string', description: 'Patch text. V4A preferred; use one file block per target file with exact current context; include all known edits in listed order. On failure, the tool rolls all earlier writes back.' },
|
|
40
40
|
format: { type: 'string', enum: ['unified', 'v4a'], description: 'Auto-detected.' },
|
|
41
41
|
base_path: { type: 'string', description: 'Repo root.' },
|
|
42
42
|
dry_run: { type: 'boolean', description: 'Default false. true = validate only, no write.' },
|
|
@@ -42,6 +42,6 @@ import {
|
|
|
42
42
|
splitBufferLinesForPatch,
|
|
43
43
|
} from './patch/matcher.mjs';
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
const __patchTestHooks = { findFirstFailingUnifiedHunk, computeUnifiedChangeBand, collectUnifiedOps, unifiedOldLinesMatchAt, splitBufferLinesForPatch };
|
|
46
46
|
|
|
47
47
|
scheduleNativePatchPrewarm();
|
|
@@ -141,7 +141,7 @@ function normalizeTrailingNewlines(text) {
|
|
|
141
141
|
// aggregated worker bodies in ai-wrapped-dispatch). These functions are
|
|
142
142
|
// NO LONGER part of the tool-result compression chain — that chain is
|
|
143
143
|
// lossless-only.
|
|
144
|
-
|
|
144
|
+
function normalizeWhitespace(text) {
|
|
145
145
|
if (typeof text !== 'string') return text;
|
|
146
146
|
return text
|
|
147
147
|
.split('\n')
|
|
@@ -150,7 +150,7 @@ export function normalizeWhitespace(text) {
|
|
|
150
150
|
.replace(/\n{3,}/g, '\n\n');
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
function dedupRepeatedLines(text) {
|
|
154
154
|
if (typeof text !== 'string') return text;
|
|
155
155
|
const lines = text.split('\n');
|
|
156
156
|
const out = [];
|
|
@@ -240,7 +240,7 @@ function _trimLongLines(content) {
|
|
|
240
240
|
* @param {string} content
|
|
241
241
|
* @param {{ trimLongLines?: boolean, fullOutputPath?: string, sequential?: boolean }} [opts]
|
|
242
242
|
*/
|
|
243
|
-
|
|
243
|
+
function tailTrimLargeOutput(content, opts = {}) {
|
|
244
244
|
if (typeof content !== 'string') return content;
|
|
245
245
|
let text = content;
|
|
246
246
|
if (opts.trimLongLines) {
|