fix(terminal): keep a DA1 answerer for parked panes with raw-byte sidecars

fish re-emits DA1 at every prompt paint and blocks up to 10s on the reply.
Main's query authority yielded whenever the hidden-delivery gate delivered the
chunk, on the assumption that delivery implies a renderer xterm will answer.
A raw-byte sidecar (background agent launch, automation observer, draft-ready
probe) claims delivery interest, and parking unmounts the pane's xterm — so a
parked pane with a live sidecar had NOBODY answering, and every prompt took
10.0s indefinitely (fish's give-up latch only arms on the startup probe).

Hidden now means the view is suppressed regardless of delivery interest: bytes
a sidecar still needs are sent flagged `sidecarOnly`, the dispatcher routes them
past the primary handler, and main owns their replies. The flag is captured at
ingestion and rides the chunk through batching, so a reveal landing before the
flush cannot hand an already-answered chunk to a freshly mounted xterm.

Also: a paired stream that pauses output receives nothing, so it now swaps its
view presence for raw presence — the host model answers while paused instead of
yielding to a client that cannot.
This commit is contained in:
Neil
2026-08-12 23:37:10 -07:00
parent c61f29639c
commit b912990bec
18 changed files with 678 additions and 124 deletions
+2
View File
@@ -247,6 +247,7 @@ jobs:
src/main/providers/__tests__/shell-ready-framework-example.test.ts \
src/main/pty/omp-shell-wrapper.node-pty.test.ts \
src/renderer/src/components/terminal-pane/fish-color-scheme-child-stdin.node-pty.test.ts \
src/main/runtime/fish-parked-pane-prompt-latency.node-pty.test.ts \
src/shared/posix-command-path-lookup.test.ts
test:
@@ -283,6 +284,7 @@ jobs:
--exclude=src/main/providers/__tests__/shell-ready-framework-example.test.ts \
--exclude=src/main/pty/omp-shell-wrapper.node-pty.test.ts \
--exclude=src/renderer/src/components/terminal-pane/fish-color-scheme-child-stdin.node-pty.test.ts \
--exclude=src/main/runtime/fish-parked-pane-prompt-latency.node-pty.test.ts \
--exclude=src/shared/posix-command-path-lookup.test.ts \
--exclude=tests/e2e/cross-version-wire/** \
--shard=${{ matrix.shard }}/${{ matrix.shard_total }}