- Pushed LFS objects for main explicitly before tagging.
- Set GIT_LFS_SKIP_PUSH so the pre-push hook no-ops on the tag ref.
- Used explicit refspecs to avoid hook resolving tag refs to branches.
- Emitted per-command cmd:N targets after the assistant message that issued them.
- Carried commands from text-less messages to the next visible message.
- Replaced the single trailing "last command" leaf.
- Updated EventController to keep foreground render mode active from agent_start through agent_end so live-region rebuild remains enabled during a turn.
- Pinned stop-reason assistant errors to the editor banner and suppressed the transcript's inline Error line while pinned, then restored it on the next agent_start.
- Added tests covering error-banner suppression/restoration and eager native scrollback rebuild ordering before loading animation.
- Updated write streaming content formatting to accept an expanded flag and show full output only when expansion is active.
- Passed the expanded state from the write renderer so in-flight write previews now lift the 12-line cap on Ctrl+O.
- Added streaming write preview tests to verify collapsed tail capping, expansion growth, and short-write behavior.
- Updated rawTextInputFromPartialJson to stop excluding values that start with '[' from raw text fallback detection.
- Preserved existing exclusions for inputs starting with '{' and '"' in partial JSON detection.
- Let custom/test terminals override the ED3-risk profile without mutating shared TERMINAL.
- Centralized risk checks behind a private helper falling back to TERMINAL.
- Replaced `¶path#hash` prefix with `[path#hash]` delimiters across parser, tokenizer, and grammar.
- Updated prompts, docs, and recovery paths to the new bracketed form.
- Added a fullscreen /copy tree of recent assistant messages with nested code blocks and a live preview pane.
- Removed the /copy last|code|all|cmd subcommands in favor of tree selection.
- Extracted copy-target assembly into a testable util.
- Dimmed models whose context window is smaller than current usage.
- Skipped disabled entries during navigation and selection.
- Showed context-limit suffix and warning for unselectable models.
- Repainted only the active-grid tail row relative to the tracked hardware cursor so a scrolled reader's history stays intact.
- Let bottom-anchored spinner/status chrome advance while the real scrollback mutation stays deferred.
- Deferred completely instead of repainting when there is no direct input or eager streaming.
- Treated an unknown viewport position as at-bottom so zero-byte frames no longer froze the spinner/footer.
- Repainted for liveness while keeping native scrollback dirty; known-scrolled readers stay deferred.
- Dropped the redundant deferredMutation branch in the append path.
- Stopped expanding the volatile tool block so a >100-line code arg no longer overflows the viewport.
- Kept streaming and resolved render shapes consistent at codeMaxLines.
- Padded direct-input shrink frames to clear stale popup rows without re-exposing committed scrollback.
- Repainted live viewport when offscreen edits shift rows above the viewport top.
- Prevented diff-append from duplicating the prefix at the scrollback seam on transient UI growth.
- Added scroll-buffer assertions to the autocomplete viewport test.
- Wrapped selector and overlay list windows in ScrollView for proportional right-edge scrollbars.
- Dropped numeric position/count footers in favor of the scrollbar.
- Simplified SelectList status line to search hints only.
- Added ED3-risk autocomplete repaint test for POSIX terminals.
- Added tui-core-renderer.md covering yank/corruption/flash/width faults.
- Linked the new doc from runtime internals and the tui.ts header.
- Refreshed runtime-internals to match current boot and render-intent flow.
- Permitted autocomplete/IME frames to repaint the live viewport in place.
- Prevented stale autocomplete rows from lingering until next checkpoint.
- Kept full deferral when neither direct input nor eager streaming is active.
- Added timeout pause/resume control ops and helper to suspend idle timers during bridge work.
- Fixed TimeoutError on long delegated agent()/llm() calls by pausing timeout while silent.
- Updated IdleTimeout with reference-counted pauses, ignored checks while paused, and resumed fresh.
- Replaced heartbeat keepalives with timeout-control events in bridge paths and status routing.
- Raised the timeout on four `sdk-async-job-manager-singleton` session tests to 60000ms to reduce flakes in parallel runs.
- Adjusted the asynchronous singleton cases to avoid timeout races between long session startup and teardown.
- Recorded the timeout stabilization in the package changelog entry.
renderAgentResult and the live-progress sibling cast
extractedToolData?.yield to Array<{ data }> and called ?.map without
checking the actual runtime shape. Optional chaining only short-circuits
on null/undefined, so any stray non-array value (a single yield object
landing in the slot) made .map undefined and threw
TypeError: completeData?.map is not a function — taking down every
`review` task render.
Both sites now route through a new normalizeYieldData helper (next to
normalizeReportFindings) that returns an array of yield records: it
preserves arrays unchanged, wraps a single object as a 1-element array
so the verdict still renders, and drops primitives. Added a regression
test exercising the result branch, the progress branch, the primitive
fall-through, and the canonical array shape — all of the failing-branch
ones reproduce the crash on the pre-fix renderer.
Fixes#1987
`TtsrManager` previously ignored the `ttsr.enabled: false` toggle:
- `addRule()` still registered rules, so `bucketRules` demoted them
to the TTSR bucket and dropped the rulebook/alwaysApply fallback
- `hasRules()` still returned true, so `AgentSession` entered the
TTSR matching path on every message_update
- `checkDelta` / `checkSnapshot` (via `#matchBuffer`) still matched
patterns and could abort the stream and inject system reminders
Gate all three public-ish entry points on `#settings.enabled` so
disabling TTSR short-circuits the whole path. Condition rules fall
through to the rulebook bucket in `bucketRules` instead of being
silently swallowed.
Closes#1767
The Ctrl+Q follow-up fallback should only be removed when a recognized
keybinding action claims that chord. Unknown or stale config entries are
ignored by the keybinding manager and should not suppress a working
follow-up default.
Addresses code review on #1905.
The slash-autocomplete-viewport test's settle() slept only 120ms after
each keystroke — 20ms over Editor's 100ms autocomplete debounce. The
post-debounce flow is debounce timer + microtask + a 16ms throttled
render before the new (filtered) list lands, leaving ~4ms of headroom
once the debounce fires. macOS setTimeout jitter reliably consumed that
margin, so the stale unfiltered menu was still being painted at
getViewport() time and pushed the live editor row out of the 6-row
viewport, surfacing 'Expected to contain: "/m"' against the rendered
menu.
Sleep 250ms instead and document the budget so a future trim doesn't
quietly regress the slack.
Fixes#1979
Returned the current workspace folder list when a server queried workspace/workspaceFolders after initialization so advertising the capability no longer left late requests answered with -32601.
Ensured rust-analyzer textDocument/didOpen ran before workspace readiness polling so the server could discover the file's Cargo workspace, and skipped the readiness wait entirely for standalone .rs files outside any Cargo workspace ancestor.
Continued rust-analyzer workspace readiness polling across transient analyzerStatus request timeouts while preserving early exit for unsupported methods and server failures.