Commit Graph
1490 Commits
Author SHA1 Message Date
can1357 94a813788f chore: bump version to 16.0.4 2026-06-17 09:44:33 +02:00
can1357 8eeb707387 chore: bump version to 16.0.3 2026-06-17 01:58:36 +02:00
can1357 0e049b9a1a test(ai): dropped chdir and env mutation from request-debug recording test
- Replaced `process.chdir(tempDir)` plus `PI_REQ_DEBUG=1` auto-naming with explicit `setNextRequestDebugPath` targets, removing the `previousCwd` save/restore and the `debugFiles` directory-scan helper.
- The PI_REQ_DEBUG recording assertions now read each request/response from the path they set, so the test no longer mutates `process.cwd()` or the global debug env flag.
2026-06-17 01:22:31 +02:00
can1357 48766eb88a fix(tui): kept ProcessTerminal and window-title writes headless under the test runtime
- `ProcessTerminal` now captures a per-instance `#headless` from `isTerminalHeadless()` at construction and re-reads it in `start()`; when set, `#safeWrite`, `start`, `stop`, `drainInput`, and `setProgress` short-circuit, so frame paints, `start()` probes (OSC 11 / DA1 / kitty), the progress keepalive, stdin raw mode, SIGWINCH, and teardown escapes no longer reach a real terminal during `bun test` (previously `#safeWrite` only skipped on `!isTTY`, so an interactive terminal leaked stray boxes and probe queries).
- Gated the `emergencyTerminalRestore()` blind-restore branch and `TerminalInfo.sendNotification` on the headless flag, and guarded `setTerminalTitle`/`pushTerminalTitle`/`popTerminalTitle` in `title-generator.ts`.
- Opted the terminal-contract suites (terminal-appearance, notifications, emergency-restore-altscreen, issue-2034 write gate, process-terminal-render-harness, render-stress-harness) back into real I/O with `setTerminalHeadless(false)`, restoring on teardown.
- Added `process-terminal-headless.test.ts` asserting zero writes under a forced TTY when headless and real frame/probe output after opt-out.
2026-06-17 01:21:03 +02:00
can1357 d30bec5126 feat(tui): added stacked math rendering through latexToBlock
- Added latexToBlock module that renders stacked fraction math with baseline-aware rows.
- Updated markdown rendering to route display math through latexToBlock with sole-display handling.
- Exported latexToBlock from the package entrypoint and updated changelog docs accordingly.
- Added advisor resume and suppression repro tests in coding-agent for interrupted turn recovery.
2026-06-16 22:53:29 +02:00
can1357 bfe574443a feat(tui): added LaTeX color and display-math rendering support in TUI output
- Added own-line display-math tokenizers for `$$...$$` and `\[...]` markdown blocks.
- Added delimiter-free `\begin...\end` math parsing in text conversion with multiline row preservation.
- Added ANSI rendering for `\textcolor`, `\color`, `\colorbox`, and `\fcolorbox` with scoped color resets.
- Added tests for LaTeX color and math parsing edge cases, including inline code and nested scopes.
2026-06-16 22:09:32 +02:00
can1357 2d0b80ed51 Merge remote-tracking branch 'origin/farm/d563ece8/fix-always-ask-settings-focus' 2026-06-16 21:46:24 +02:00
can1357 0f013b455e feat: added LaTeX math rendering support for terminal and TUI outputs
- Added LaTeX math and Mermaid allowances in terminal and final-chat prompts.
- Added inline math tokenization in TUI for $, $$, \(\), and \[\].
- Added LaTeX-to-Unicode conversion helpers and exports for math rendering.
- Fixed inline math detection to skip escaped dollars and currency-like spans.
2026-06-16 21:45:10 +02:00
can1357 508a9f543e feat: removed render_mermaid tool and added width-aware Mermaid clipping
- Removed render_mermaid from tool discovery, task definitions, and registries.
- Removed renderMermaid setting and prompt/docs references tied to the deleted tool.
- Added maxWidth and theme color options to Mermaid ASCII resolution in markdown flow.
- Re-rendered Mermaid ASCII in both directions and clipped output to available width.
2026-06-16 21:32:39 +02:00
roboomp 27f0b922c7 fix(tui): preserved overlay-owned prompt focus
Overlay roots can now declare nested focus targets they own so visible overlays keep their active child focused while background prompt focus steals remain blocked.

Updated the setup wizard to register scene prompt focus targets and covered the nested prompt path in the overlay focus regression test.

Fixes #2789
2026-06-16 19:06:18 +00:00
roboomp 354bb2dadf fix(tui): kept overlay focus above hidden prompts
Background approval prompts could steal TUI focus from visible overlays such as /settings, leaving keystrokes routed to a hidden surface.

Pinned the focused component to the top visible overlay and added a regression test for the always-ask approval focus path.

Fixes #2789
2026-06-16 18:39:27 +00:00
can1357 dc14689fc1 chore: bump version to 16.0.2 2026-06-16 15:33:47 +02:00
can1357 fba72680ed chore: update changelogs 2026-06-16 15:22:43 +02:00
can1357 52713aa224 Merge PR #2741: fix(tui): stop Warp resize feedback-loop redraw storm
Break the Warp resize feedback-loop redraw storm by env-pinning resize classification. Merge resolves the issue-2088 test against #2755 by keeping the CMUX env-clearing setup and adding #2741's TERM_PROGRAM/PI_TUI_RESIZE_IN_PLACE neutralizers.
2026-06-16 14:53:38 +02:00
can1357 9b394582d7 Merge PR #2755: fix(tui): detect CMUX as multiplexer
Detect CMUX as a multiplexer via CMUX_WORKSPACE_ID/CMUX_SURFACE_ID. NOTE (owner-accepted caveat): introduces a test-isolation gap - direct-terminal TUI tests fail when the suite is run inside a cmux terminal (CI unaffected); follow-up to consolidate multiplexer-env clearing into a shared helper.
2026-06-16 14:52:42 +02:00
can1357 4fe490dd92 Merge PR #2733: fix(tui): preserve scrollback while editing
Disable xterm modes 1010/1011 so terminal output and keypresses no longer force scroll-to-bottom while editing; restore the originally-set modes on stop().
2026-06-16 14:52:39 +02:00
can1357 3e8ffa72a9 fix(tui): scope keypad CSI-u fast path to keypad codepoints
The printable-first short-circuit in matchesKey/parseKey decoded every printable CSI-u/modifyOtherKeys sequence, so canonical named keys carrying a printable codepoint (space=32, shifted letters, DEL=127) stopped normalizing through the native matcher: parseKey returned a literal space instead of "space" and DEL instead of "backspace", breaking keybindings and deletion.

Restrict the fast path to the keypad numpad/operator codepoints the native protocol misclassifies without a NumLock modifier (decodeKittyKeypadText); everything else falls through to native normalization. Also filter DEL out of the modifyOtherKeys decode so it is never inserted as text, and reuse KITTY_MOD_NUM_LOCK in the lock mask (its original gate was removed, leaving it unused and failing lint).

Addresses review feedback on #2767.
2026-06-16 14:34:45 +02:00
0xff26b9a8 d4b01d3a48 fix(tui): handle VS Code keypad digit input 2026-06-16 18:55:23 +08:00
Patrick Hardwick 3783130b82 fix(tui): detect CMUX as multiplexer 2026-06-16 02:56:29 -05:00
sorphwer 89fb1b0a49 fix(tui): stop Warp resize feedback-loop redraw storm
The non-multiplexer resize fast path borrows the alternate screen for
throwaway drag frames. Warp reports a terminal height one row different
for the alt buffer, so each alt enter/leave emits a fresh SIGWINCH that
re-enters the fast path — a self-sustaining loop that floods ED3 full
repaints with completely stable geometry (observed ~130
fullPaint(clearScrollback) frames over 15s, continuing after the drag
stopped). PI_FORCE_SYNC_OUTPUT cannot help (it is a loop, not tearing);
tmux works because the multiplexer path never toggles the alt buffer.

Route resize through the in-place repaint path (no alt-screen borrow, no
ED3 rewrap) for multiplexers and for terminals that re-report size on
alt-screen toggles, via resizeRepaintsInPlace(). Default-on for Warp,
overridable with PI_TUI_RESIZE_IN_PLACE=1|0. Tradeoff matches a
multiplexer: scrollback above the window keeps its old wrap.

Tests assert no alt-screen borrow / no ED3 across a Warp resize burst and
that the override toggles both ways; existing direct-terminal resize
tests now pin TERM_PROGRAM so they stay deterministic under Warp.
2026-06-16 12:27:53 +08:00
roboomp a7fd37e487 fix(tui): preserved scrollback while editing
Disabled xterm scroll-to-bottom-on-output and scroll-to-bottom-on-keypress private modes while the TUI owns the terminal, restoring any modes that were set before startup on exit.

Added regression coverage for DECRPM-driven mode disable and restore behavior.

Fixes #2732
2026-06-16 02:03:51 +00:00
can1357 e24f789de4 chore: bump version to 16.0.1 2026-06-15 21:30:30 +02:00
can1357 b27737df9e chore: fix changelogs 2026-06-15 19:51:53 +02:00
can1357 bd52a938d9 Merge PR #1801: fix(tui): defer VTE SSH scrollback erases 2026-06-15 19:46:13 +02:00
can1357 9622da4597 Merge PR #2400: feat(tui): Zellij and WezTerm pane fallbacks for terminal session continuity 2026-06-15 19:46:12 +02:00
can1357 49fef26fb3 Merge PR #1748: fix(tui): replace live slash autocomplete prefix on accept 2026-06-15 19:46:12 +02:00
can1357 44f9867e0e chore: bump version to 16.0.0 2026-06-15 17:27:48 +02:00
can1357 789d4f6948 chore: bump version to 15.13.3 2026-06-15 12:47:58 +02:00
can1357 b7b1b54f6a chore: bump version to 15.13.2 2026-06-15 08:49:41 +02:00
can1357 6c48b6224d chore: bump version to 15.13.1 2026-06-15 04:36:40 +02:00
can1357 ecd9f3220f feat(scripts): added changelog recovery mode for historical duplicate cleanup
- Added --recover CLI option to rebuild changelog fixes from tagged history.
- Pruned Unreleased bullets that match historical released items across all tags.
- Normalized output by sorting release sections by version and compacting bullet spacing.
2026-06-15 03:43:24 +02:00
roboomp d142652fbe style: bun run fix 2026-06-14 18:26:27 +00:00
can1357 7e8122000a chore: bump version to 15.13.0 2026-06-14 18:21:59 +02:00
can1357 99a4e2933e fix(tui): fixed native scrollback loss for streaming assistant rows
- Tracked snapshot-safe boundaries to retain commit-stable streamed rows in scrollback.
- Computed durableBoundary from commit and snapshot ends to prevent row drop regressions.
- Updated audit-row handling so drifting durable rows were excluded from resync checks.
- Added regression tests for commit-stable and commit-unstable relayout streaming cases.
2026-06-14 17:10:35 +02:00
can1357 b830f7912b feat: unified speech setup and introduced local STT/TTS capabilities
- Added unified `omp setup speech` flow with JSON/check modes and model picker.
- Added local STT pipeline with sherpa workers, recorder/download flow, and streaming inference.
- Added local TTS pipeline with `omp say`, backend selection, and streaming vocalization.
- Replaced legacy speech settings with unified `speech`/`speechgen` configuration keys.
2026-06-14 16:07:44 +02:00
can1357 ff0fc74f53 feat(coding-agent/modes): implemented space-bar hold push-to-talk STT gesture
- Added a space-hold gesture state machine in CustomEditor, tracking repeated spaces, detecting holds beyond SPACE_HOLD_THRESHOLD, and firing start/end callbacks via a release timer.
- Hooked editor space-hold callbacks in InputController so STT toggles on hold start and again on release when STT is enabled.
- Added tests for space-hold start/stop behavior and updated keybinding docs to describe the hold-to-record STT workflow.
2026-06-14 08:34:56 +02:00
can1357 6c616ca847 fix: fixed OpenAI promotion linking for namespaced gpt-5.5 variants
- Updated OpenAI context promotion linking to resolve target models by parsed version and provider/API match instead of fixed bare ids.
- Scanned available siblings to select the plainest matching gpt-5.4 fallback so namespaced, dotted, and dated 5.5 variants promote correctly.
- Adjusted the TUI render stress shadow writer to ignore alternate-screen regions and replay only normal-screen bytes after exits.
2026-06-14 07:14:11 +02:00
can1357 8345f47c86 Merge remote-tracking branch 'origin/farm/cb61fdcb/fix-multiplexer-detection-via-term' 2026-06-14 07:02:50 +02:00
can1357 233ee852cd feat(snapcompact): added spacing-tuned snapcompact variants and updated provider defaults
- Added 8on22-bw and 11on16-bw variants with spacing-tuned defaults for snapcompact.
- Changed provider defaults/mappings to use 11on16-bw for Anthropic and 8on22-bw for OpenAI/Google.
- Updated model frame rules so claude/fable/opus and gemini/gpt families map to new shapes and 2048 billing behavior.
- Fixed non-multiplexer resize dragging by using alternate screen during transient resize frames.
2026-06-14 07:02:27 +02:00
can1357 e2e37dcde6 fix(coding-agent): fixed stale loader recovery and updated catalog model constraints
- Stopped and cleared the working loader before auto-compaction and auto-retry.
- Ensured stale loadingAnimation is removed so agent_start recreates the Working loader.
- Set catalog model input/output costs to 0.09/0.18 and reduced maxTokens to 65536.
2026-06-14 06:59:26 +02:00
can1357 8e2d3b790f fix(tui): used alternate screen during resize repaints
- Used the alternate screen for transient resize viewport redraws to prevent wrapped rows from leaking into native scrollback.
- Added enter/leave helpers with resize-alt state tracking and ensured stop/full-paint paths exit that buffer cleanly.
- Adjusted resize repaint scheduling to render immediately and only reschedule when additional work is queued.
2026-06-14 06:57:37 +02:00
can1357 258f030ddf fix(tui): fixed resize fast-path repaint to avoid full-screen clearing during drag
- Updated the resize fast-path repaint to remove the terminal full-screen clear and instead overwrite the viewport in place at home, rewriting each row via `#lineRewriteSequence`.
- Passed the viewport width into `#emitResizeViewport` so each row self-clears only its tail with CSI K while resize drag remains active.
- Added coverage in `resize-viewport-defer.test.ts` confirming drag-time writes omit ED2/ED3 clears and that ED3 is emitted when the resize settles.
2026-06-14 05:27:47 +02:00
roboomp 996d748af0 fix(tui): detect tmux/screen via TERM prefix when TMUX env is stripped
isMultiplexerSession() was the only multiplexer check that tested just
TMUX/STY/ZELLIJ and omitted the TERM=tmux-*/screen-* fallback every
sibling has (shouldEnableSynchronizedOutputByDefault,
detectRectangularSgrSupport, getFallbackImageProtocol).

When TMUX is stripped but TERM=tmux-256color survives (sudo without -E,
su, env-sanitizing launchers/ssh), the engine misclassified tmux as a
direct terminal. On resize/replace/resetDisplay the geometry-rebuild
full paint emitted ED3 (CSI 3 J), which wipes tmux pane history —
scrollback only reappeared after a Ctrl+L full rerender.

Align the check with siblings: also return true when TERM starts with
"tmux" or "screen".

Fixes #2544
2026-06-14 03:26:00 +00:00
can1357 c4ef8839d5 feat(tui): added large-paste collapse flow with threshold and attachment fallback
- Added `paste.largeMenuThreshold` setting with default 100 and values 0/100/250/500/1000.
- Added `Editor.onLargePaste` and `Editor.insertPaste` to intercept oversized pastes and expand markers.
- Added threshold-based large-paste routing to show the menu and wrap oversized content for code/XML or attachment fallback.
- Added tests for large-paste interception, fallback behavior, short-paste handling, and marker expansion.
2026-06-14 05:20:55 +02:00
can1357 4b37b79dcb fix(coding-agent/test): align merged tests with current session-context export and compaction-queue context 2026-06-14 03:39:38 +02:00
can1357 660ef6fb8c Merge PR #2504: support ctrl+j as additional newline key 2026-06-14 03:32:53 +02:00
can1357 81bf6ee965 Merge PR #2506: glow magic keywords through cursor seam + focused shimmer 2026-06-14 02:57:08 +02:00
can1357 0c8cee3080 Merge PR #2521: clamp editor height and overlays on small terminals 2026-06-14 02:56:57 +02:00
can1357 686f23a925 Merge PR #2488: TUI event-loop watchdog + phase breadcrumbs 2026-06-14 02:56:31 +02:00
can1357 19766762cd chore: bump version to 15.12.6 2026-06-14 02:35:06 +02:00