Commit Graph

250 Commits

Author SHA1 Message Date
can1357 d5fd412115 fix(tui): labeled single multi-select Enter as submit 2026-08-16 02:13:40 +02:00
can1357 f83111c8d4 Merge PR #8265: fix(tui): multi-select ask dialog submits on Enter instead of dead-ending (@zhang17-24) 2026-08-16 02:13:40 +02:00
can1357 a59fc754b6 test(tui): covered welcome model synchronization 2026-08-16 02:03:17 +02:00
can1357 7e4fd9a686 Merge PR #8428: fix(tui): welcome banner shows stale model name after model changes (@jacobleft) 2026-08-16 02:03:17 +02:00
can1357 8de929c393 Merge PR #8285: fix(tui): preserve scrollback after hidden tool snapshots (@dannyboy-ai) 2026-08-16 02:03:16 +02:00
can1357 5cc9aa74bc fix(ask): used full dialog width for wrapped labels 2026-08-16 02:03:15 +02:00
Slava Zavadsky 00043ef3ba fix(ask): wrap long option labels in the rich ask dialog instead of truncating
The rich AskDialogComponent (merged in PR #4375) hard-truncated every
option row via truncateToWidth(firstLine, width, Ellipsis.Unicode),
clipping the disambiguating tail of long labels with no way to read it.
The legacy HookSelector dialog has wrapped labels since June 1
(3c7d50d292), so the rich dialog was the remaining truncation path.

renderRowLabel now wraps the label with wrapTextWithAnsi, indenting
continuation lines under the radio/checkbox marker so the cursor stays
visually anchored; the body ScrollView carries vertical overflow. The
note marker is reserved on the first line. Fixes #1243, #8594.
2026-08-15 09:11:32 -04:00
usr-bin-roygbiv bdbea3f7f3 fix(tui): recover reports after orphan fences 2026-08-14 02:15:22 +00:00
Daniel Anderson-Little 44834fdd23 fix(tui): preserve scrollback after hidden tool snapshots 2026-08-13 15:07:39 -04:00
jacobleft 272a0e8461 fix(tui): resync welcome banner after init-time model changes
Address review feedback: init-time model switches (#reconcileModeFromSession,
#enterPlanMode for plan.defaultOnStartup) fire model_changed before the
subscription exists, leaving the banner stale for those cases too.

Adds a catch-up #updateWelcomeModel() call right after the subscription is
installed, mirroring how the sessionName listener is registered before
those same init steps (line 1094-1095 comment).

Also adds a regression test for the catch-up path and comments tying the
component test to the wiring gap it covers.
2026-08-13 19:22:05 +08:00
jacobleft 9bb18d3e0e fix(tui): update welcome banner model name on model_changed event
The welcome banner (WelcomeComponent) captures the session's active
model name at init time but never receives updates when the model
changes. Its setModel() method already existed but was never called
after construction.

This wires the model_changed agent session event to a new
#updateWelcomeModel() method in InteractiveMode, mirroring the
existing #updateWelcomeLspServers() pattern. The banner now reflects
the live model after:
- delayed config/modelRoles load (the startup race where an
  alphabetically-first provider is picked before config resolves)
- explicit /model switches
- retry-fallback model swaps
2026-08-13 19:05:36 +08:00
can1357 e8eed95130 feat(coding-agent): introduced fine grained per agent advisor configuration
- Replaced blanket subagent advisor global settings with fine-grained per-agent configuration and frontmatter support.
- Added dashboard keybindings and inline override editors for managing agent advisor patterns.
- Implemented settings migration logic to convert legacy global options into per-agent settings.
- Updated session persistence and execution layers to restore and enforce per-agent advisor behaviors.
2026-08-13 04:59:50 +02:00
can1357 338abf4881 Merge PR #8266: fix(omp): prevent false reset fireworks (@oleksoleksoleks) 2026-08-13 01:14:51 +02:00
left-to-right b245be11c5 fix(ask): address review comments on multi-select Enter submit
- Multi-question dialogs now advance on Enter in multi-select mode
  instead of submitting every question at once (roboomp blocking)
- Ask tool accepts an empty multi-select submission as a "select none"
  answer instead of aborting as a cancellation (codex P2)
- Footer hint reflects advance vs submit for multi-question dialogs
- Move the #8252 changelog entry to Unreleased (codex P2)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-08-12 22:58:02 +08:00
Shawn Koh 16c2832404 fix(tui): validate leading width epoch blocks
Amp-Thread-ID: https://ampcode.com/threads/T-019ff125-f53d-739b-8462-6027fe70f914
Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 16:16:20 +08:00
Shawn Koh d131b61227 fix(tui): preserve non-prefix width appends
Amp-Thread-ID: https://ampcode.com/threads/T-019ff125-f53d-739b-8462-6027fe70f914
Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 10:14:42 +08:00
Shawn Koh 8751a9571f fix(tui): preserve live output across width epochs
Amp-Thread-ID: https://ampcode.com/threads/T-019ff125-f53d-739b-8462-6027fe70f914
Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 10:14:42 +08:00
Shawn Koh fb0bcdbba0 fix(tui): preserve mutable Markdown row on resize
Amp-Thread-ID: https://ampcode.com/threads/T-019ff125-f53d-739b-8462-6027fe70f914
Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 10:14:41 +08:00
Shawn Koh d164a6407a fix(tui): avoid unwatermarked width-epoch appends
Amp-Thread-ID: https://ampcode.com/threads/T-019ff125-f53d-739b-8462-6027fe70f914
Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 10:14:41 +08:00
Shawn Koh ef803e3880 fix(tui): rebuild direct HerdR scrollback from source 2026-08-12 10:14:41 +08:00
can1357 a4d8860a6c feat: added google reasoning controls mcp stream resumption and tar support
- Added Google provider thinking configuration parameters and force-reasoning-off controls.
- Implemented MCP SSE stream resumption using Last-Event-ID and `SSEResumeError`.
- Added support for TAR old-GNU sparse extension blocks, path length checks, and archive entry overrides.
- Restricted external thinking support to specific models and added semver fallback parsing.
2026-08-12 02:32:45 +02:00
Daniel Anderson-Little cbd7dc2e70 fix(coding-agent): centralize hidden activity state 2026-08-11 17:07:20 -04:00
Daniel Anderson-Little 3a4ea6a376 fix(coding-agent): hide internal tool activity blocks 2026-08-11 16:59:53 -04:00
Alexander Kirilin d1741f04e6 fix(omp): prevent false reset fireworks 2026-08-11 13:52:48 -04:00
left-to-right b3b95e769f fix(tui): multi-select ask dialog submits on Enter instead of dead-ending
Enter in a multi-select ask question toggled the focused option exactly
like Space, with the only submit path hidden behind the Submit tab that
appears only for multi/multi-question dialogs. Enter now submits the
current selection (matching single-select), Space still toggles, and the
footer hint reflects it.

Fixes #8252
2026-08-12 01:36:25 +08:00
Muhammad Mustaqeem bf99f9ce5b test(tui): lock the paired OSC 133 command zone instead of its absence
The existing assertion encoded the exact behaviour #8030 reports as the bug:
it required that no `133;C` ever be emitted, which is what leaves Ghostty's
sticky `.input` cursor semantic latched for the rest of the session.

Rewrite it around the property the fix actually guarantees. The marker must
now be present, but it must be immediately followed by `133;D;0` and appear
exactly once per bubble, so the command zone is opened and closed within the
same render and later assistant/tool output is still never grouped under the
submitted prompt. That was the real concern behind the original assertion,
and it is now checked directly rather than by proxy.

Refs #8030
2026-08-11 10:47:01 +05:00
can1357 9637a2cb0c Merge PR #7774: fix(tui): gate built-in renderers by tool provenance (@roboomp) 2026-08-07 13:37:57 +02:00
can1357 4beb58a39b fix(tree): make bookkeeping rows searchable 2026-08-07 13:37:57 +02:00
ParadaCarleton ecaefd54d7 fix(tree): stop rendering bookkeeping entries as empty rows
Seven session entry types — title_change, credential_pin, mode_change,
service_tier_change, ttsr_injection, reset_boundary and session_init —
fell through #getEntryDisplayText's default branch to the empty string,
and none of them were in the default view's hidden set. Each one drew as
a bare bullet: a row you cannot read, cannot identify and cannot explain
the gap it leaves in the thread.

Hide them in the default and no-tools views, alongside the settings
entries they resemble, and give every one of them a label for `all`
mode. The default branch now falls back to the entry type rather than
the empty string, so a type added later degrades to a dull row instead
of an invisible one. Service tier renders its per-family map, and says
"(default)" when the tier was cleared instead of printing null.
2026-08-05 19:08:54 -07:00
roboomp 931f61867c fix(tui): gated built-in renderers by tool provenance
- Routed session tool provenance through live and rebuilt transcript render paths.
- Kept same-named extension tools on the generic renderer while preserving native tool rendering.
- Added regression coverage for an external recall result collision.

Fixes #7770
2026-08-06 01:36:25 +00:00
roboomp ca5504cae0 fix(tui): kept virtual-root children nested
- Advanced indentation for a virtual root's direct children so single-child roots no longer collapse to the shared column-0 root.

- Mirrored the fix in the HTML export renderer and added a multi-root regression.

Fixes #7332
2026-08-02 00:34:42 +00:00
roboomp f8b71b4a3c fix(tui): compacted linear branch continuations
- Kept single-child chains aligned with their branch head while preserving real branch depth.

- Removed disconnected terminal-branch anchors from TUI and HTML tree renderers.

- Updated nested tree regressions for compact connector alignment.

Fixes #7332
2026-08-02 00:27:41 +00:00
roboomp 8a059e3027 fix(coding-agent): normalize ask dialog questions to prevent render crash
The live AskDialog trusted question.question while its render helpers
(replaceTabs, renderQuestionTitle, questionTabLabel) assume a string. A
question reaching AskDialogComponent without a string question field threw
an uncaught TypeError that escaped the TUI render loop and killed the
session. The transcript renderer already normalizes the same malformed
data via normalizeRenderQuestions; the live path did not.

Normalize the questions array at dialog entry (new normalizeDialogQuestions),
coercing question/id/label to strings and options to a well-formed array,
matching the transcript path.

Fixes #7211
2026-08-01 00:11:21 +00:00
roboomp a60f1efa96 fix(tui): formatted selector keybinding hints
Routed copy selector and ask dialog hints through the shared human-readable key formatter and covered both rendered surfaces.

Fixes #7164
2026-07-31 10:06:46 +00:00
can1357 fcc8cce9d9 Merge remote-tracking branch 'refs/remotes/pr/6858' into prep/6858
# Conflicts:
#	packages/coding-agent/src/modes/components/status-line/component.ts
2026-07-30 01:41:54 +02:00
robomp-bot 65707c7f4c fix(coding-agent): close VCS cache lifecycle gaps
(cherry picked from commit b88851334b07eb1da6743b51b542ea5d3222ccca)
2026-07-29 23:08:58 +02:00
joshrzemien 7a9f8da3f8 Fix Codex fireworks workspace account matching 2026-07-28 23:31:52 -04:00
joshrzemien 66f3fa0e2a fix: distinguish reset grants from redemption 2026-07-28 03:23:50 -04:00
joshrzemien 74debff579 fix: preserve unknown Codex fetch timestamps 2026-07-28 01:30:21 -04:00
roboomp 9cf1d28258 fix(settings): hid excluded web search providers
Filtered the provider-order submenu against the configured web search exclusions and covered the rendered settings contract.

Fixes #6860
2026-07-28 05:22:27 +00:00
joshrzemien a5ee376a70 fix: celebrate unscheduled weekly Codex resets 2026-07-28 01:12:44 -04:00
joshrzemien 06fd971f28 fix: address Codex reset fireworks review 2026-07-28 00:52:27 -04:00
joshrzemien 1ba1ddacab feat: add opt-in Codex reset fireworks 2026-07-28 00:33:53 -04:00
can1357 cfd335d2b1 fix(tui): restored image attachments on /tree and esc-esc branch
- branch() and navigateTree() now return the selected user message's image
  parts (selectedImages/editorImages) alongside the text, extracted in marker
  order by #extractUserMessageImages.
- CustomEditor.setDraft() replaces the composer draft with text plus its
  pending images, so restored [Image #N] markers resolve on resubmit instead
  of degrading to literal text.
- Wired all six restore call sites (selector-controller, extension-ui-controller)
  through setDraft; updated rpc-subagents mocks for the new branch shape.
- Added offline regression tests for branch/navigateTree image restitution,
  multi-image marker order, and text-only prompts.
2026-07-28 00:57:34 +02:00
can1357 d16a251777 chore: reorg tests 2026-07-27 16:43:53 +02:00
can1357 af9e8546a9 feat: implemented session account selection and pinning via slash command
- Add `pinSessionOAuthAccount` storage method and active account flag to the auth storage API.
- Introduce session account selector component, controller logic, and interactive mode delegation.
- Implement the `/session pin` builtin slash command with text listing and account pinning capabilities.
- Add unit tests covering session account selection, component navigation, and command handling.
2026-07-24 07:57:55 +02:00
can1357 366bd6203e Merge PR #6392: feat(coding-agent): add usage-aware model fallback (@eggpeat) 2026-07-24 02:25:35 +02:00
can1357 32f79dbb48 Merge PR #6444: fix(plan): preserve and line-anchor review annotations (@anatoli-tsinovoy) 2026-07-24 02:24:05 +02:00
Brent 0bfb0bd1e3 feat(coding-agent): add usage-aware model fallback 2026-07-24 02:23:51 +02:00
can1357 505af4188f fix(coding-agent/modes): pinned displaceable transcript snapshots to viewport
- Pinned displaceable snapshots like hub waiting polls and todo lists to the viewport during active execution.
- Prevented unpinned spinner ticks from repeatedly committing mutating rows to native scrollback and force-sealing blocks.
2026-07-24 01:25:29 +02:00