Add a release follow-up job that updates the Homebrew tap from the checksum manifest when a tap token is configured.
The job now skips before checkout/download/update when neither HOMEBREW_TAP_PAT nor RELEASE_TAG_PAT is configured, so missing tap credentials do not fail an otherwise successful release.
Closes#1602.
Co-authored-by: Zhiping <2716057626@qq.com>
Co-authored-by: Oliver-ZPLiu <47081637+Oliver-ZPLiu@users.noreply.github.com>
Map legacy DeepSeek CN provider names back to the canonical Deepseek provider in both manual parsing and TOML deserialization.
Co-authored-by: qiyan233 <qiyan233@users.noreply.github.com>
Hard-wrap overlong CJK/no-whitespace runs in diff and pager text wrappers so they do not overflow the right edge.
Fixes#1571.
Co-authored-by: Aitensa <1900013029@pku.edu.cn>
Deduplicate official DeepSeek model completions and normalize known prefixed aliases to the bare model IDs expected by official DeepSeek providers, while preserving provider-specific IDs for compatible backends.\n\nFixes #1594.\n\nCo-authored-by: reidliu41 <reid201711@gmail.com>
Make the translation client optional so missing or invalid API configuration does not crash startup before onboarding can render.\n\nCo-authored-by: Crvena <kuragectl@gmail.com>
Capture and replay Mcp-Session-Id for Streamable HTTP transports, and apply configured custom headers to the GET preflight.\n\nCloses #1629.\n\nCo-authored-by: Zhiping <2716057626@qq.com>
Write the Kitty keyboard protocol probe (ESC[>0u) on Windows instead of enabling disambiguation flags that crossterm does not decode there. Fixes#1599.
Make the sidebar expiry test avoid subtracting from a fresh Instant on Windows runners, falling back to a short sleep only when an older Instant cannot be represented.
Hard-break oversized streaming tokens so CJK runs, URLs, and other no-whitespace content stay within the target width. Includes regression coverage for long CJK text and first-token overflow.
Add the Feishu/Lark long-connection bridge, Tencent Lighthouse runbooks, CNB mirror guidance, CNB tag release pipeline, and China-friendly update fallback documentation for the v0.8.37 line.
Summary:
- restore auto sidebar focus when Ctrl+Alt+0 is pressed from hidden state
- preserve existing hide behavior from visible sidebar states
- add regression coverage
Validation: CI green before merge.
Summary:
- include generic tool input in approval-cache fingerprints
- keep exact repeat denials stable
- prevent one denied generic tool call from blocking future distinct calls
Validation: CI green before merge.
Summary:
- concise live shell/tool labels
- collapsed pending CI polling rows
- hardened stale task-panel timing test
Validation: CI green before merge.
Horace Liu (@liuhq) contributed Nix package support and install
documentation in the v0.8.34 cycle but was inadvertently omitted from
that release's changelog and the README contributor list. This commit
adds them to both.
The workspace ships two CHANGELOG files — the repo-root one and the
crate-local `crates/tui/CHANGELOG.md`. The `prompts::tests::
changelog_entry_exists_for_current_package_version` gate scans the
nearest CHANGELOG to the manifest, so the crate-local copy needs the
same `## [<version>]` section before tagging.
Copy the [0.8.34] section over from the root CHANGELOG, including the
edit_file fuzzy-punctuation bullet added later in the session. No new
content; the two files now agree.
When `edit_file` is called with `fuzz: true` and exact match fails,
the existing fallback strips leading whitespace and retries. That
catches indentation differences, but not the much more common
copy-paste failure mode where the search string came from a browser
or chat client that silently substituted Unicode punctuation:
* U+201C / U+201D (`"` / `"`) ↔ ASCII `"`
* U+2018 / U+2019 (`'` / `'`) ↔ ASCII `'`
* U+2013 / U+2014 (en/em dash `–` / `—`) ↔ ASCII `-`
* U+00A0 (non-breaking space) ↔ ASCII space
Add a second fallback after the indentation pass: when that yields
no matches, retry once more with both the file contents and the
search string punctuation-normalized to ASCII. A byte-map sized to
the normalized output recovers the original byte range, so the
replacement still goes back into the file untouched (the replacement
text is taken verbatim from the caller).
The fuzz note appended to the success message now distinguishes the
two cases:
Replaced 1 occurrence in foo.txt (fuzzy indentation match)
Replaced 1 occurrence in foo.rs (fuzzy punctuation match — typographic quotes/dashes normalized)
Adds two unit tests: one that recovers a smart-quote substitution,
one that handles em-dash + NBSP together.
Inspired by pi-agent's `edit-diff.ts` Unicode normalization step.