Skip to content

v1.18.0

Choose a tag to compare

@yeahhe365 yeahhe365 released this 27 Aug 14:38
· 63 commits to main since this release

✨ Highlights

MCP — Full productization & live progress

  • Productization + Cherry parity: consolidated McpSection into focused modules, added filter/search/sort bar, detail tabs for Prompts/Resources (read-only), server log buffer (200 entries) with GET /api/mcp/logs + 30s polling, and static 200 layout
  • Trust & control: disabledTools / disabledAutoApproveTools + isTrusted per-server, trust helpers & cache keys, dual control table with trust gate, status dot/pill wired to Test
  • Tool execution: rendered tool traces, parallelized MCP loop loop (remove iteration cap), aligned tool calling with Gemini API documented behavior, silenced -32601 for Prompts/Resources as empty, JSON import tolerant of comments, one-click import
  • Live progress streaming: NDJSON progress events (progress/total/message) surfaced in chat cards — determinate bar when total known, indeterminate shimmer otherwise, inline current-step preview, per-step relative timestamps (+0s, +3s), expanded log (auto-pinned, toggle count)
  • Architecture: broke import cycles (toolDisplayNames decoupled from mcpApi), regrouped MCP components, split McpSection, lightweight mcpStatusStore / mcpToolRuntimeStore, fixed all stale test suites
  • UI polish: auto-approve badge (ShieldCheck), McpToolCallBlock disclosure with elapsed timer, process display polish with picker, badge clipping fix & input ring

Chat Input — Cherry Studio parity & expand engine

  • Expand engine: partial expand inline 50vh (not fullscreen), Cherry Studio 260ms ease-out height transition, CSS-var wiring to textarea, font-size adaptive sizing, deferred surface & TiPTap runtime stub
  • Compact & autogrow: compact presentation re-enabled without freeze, single-line 26px default, autogrow up to 40vh without manual expand, paste & autogrow stabilized with viewport limits, quiet title fallback
  • Composer & toolbar: replicated Cherry Studio thinking control (remove header Zap), refined toolbar buttons 32px / 34px / 36px with gap-2/gap-3 for ideal hover shadow, removed redundant fullscreen code & dead layout params

Audio & Transcription — Gemini 3.5 Transcribe

  • Added official gemini-3.5-transcribe support, sanitized thinkingConfig for transcription
  • Dedicated transcription strictly to gemini-3.5-transcribe, kept gemini-3.7-flash as default fallback for proxy compatibility
  • Properly handled empty speech recognition & stripped systemInstruction for transcribe, removed opacity dimming during transcription, fixed extraction from structured audioTranscription response parts, updated i18n help text & tooltips

Models & Providers

  • Third-party providers: enhanced configuration with diff reconcile, header presets, and official links
  • Selection-ask: independent model config on Settings → Models (moved from global)
  • Model capabilities: sanitize & expose modelCapabilities accurately

Build, CI & Code Health

  • Package manager: migrated from npm to pnpm@11.22.0 (pnpm-workspace.yaml, .npmrc, allowBuilds for pdfjs-dist), locked pdfjs-dist to 4.8.69, added @dnd-kit sortable deps
  • Structure: optimized project file layout, relocated streamingStore, fixed PWA manifest, broke DB/architecture boundary violations
  • CI: normalized eslint flags (--ext), fixed architecture test boundaries & eslint config, resolved all type errors (eliminate remaining any types), ensured format:check / typecheck / lint / knip / test / build / build:api green
  • Code health: pure type imports (audioApi), split genai type imports, typed transcription fallback, cleaned unused layout props, added mcpApitoolDisplayNames decoupling, fixed responsePart nullability for test compatibility

UI & i18n

  • Prevented MCP badge clipping, hid zero-count badge, fixed icon viewBox for branch menu, unified settings visual language, new DSH branch icons (IconBranch), added chat-input compact re-enable design docs

📦 Commits since v1.17.0 (87)

  • fa4250ce chore(release): bump version to 1.18.0
  • 6c823058 fix(ci): allow null responsePart and relax DiscoveredToolsPayload to fix typecheck
  • 63569f56 refactor(mcp): decouple toolDisplayNames from mcpApi to eliminate circular dependency
  • e95b7172 refactor(types): eliminate remaining any types in mcp and chat components
  • c4fd4570 fix(ui): prevent mcp badge clipping and add input ring
  • 96323835 fix(ui): hide zero count badge on mcp picker button
  • 1a253d7e ci: fix architecture test boundaries, eslint configuration and dependencies
  • 9f8338c6 fix(ci): normalize eslint command flags
  • f3ce1c04 ci: switch to pnpm and fix prettier formatting across repository
  • 9157efbd chore(structure): optimize project file structure, relocate streamingStore, and fix pwa manifest
  • a97a546f chore(code-health): convert audioApi to pure type imports and remove deprecated voice input options
  • 0b1b67b9 chore(code-health): clean up unused layout properties, split genai type imports, and use typed transcription model fallback
  • c8ce0033 style(ui): adjust chat input button size to 36px (h-9 w-9) with gap-2 for ideal hover shadow proportions
  • bf3a529b style(ui): maintain original 44px icon pitch with gap-3 for compact 32px buttons
  • 4139b574 style(ui): refine chat input toolbar button size to compact 32px to match icon proportions
  • 3b176b01 docs(i18n): display Gemini 3.5 Transcribe model in voice input help and tooltips
  • 95f5612c fix(ui): remove opacity-30 dimming on chat input wrapper during voice transcription
  • 8a26e7a3 fix(audio): support extracting text from structured audioTranscription response parts
  • 5e757780 feat(audio): dedicate transcription strictly to Gemini 3.5 Transcribe and remove generic model transcription
  • 89783e9b fix(audio): strip systemInstruction and properly handle empty speech recognition for gemini-3.5-transcribe
  • ebecaf80 fix(transcription): maintain gemini-3.7-flash as default transcription model for proxy compatibility
  • 1cfc6c89 feat(models): add official Gemini 3.5 Transcribe support and sanitize transcription thinking config
  • b6fd7891 feat(settings): enhance third-party provider configuration with diff reconcile, header presets, and official links
  • 154664ac feat(chat-input): refine expand/collapse transition animations and clean up unused code
  • b2eba21a docs(spec): add chat input compact re-enable design
  • d50e975c fix(chat-input): re-enable single-line compact collapse without input freeze
  • eb7f50bd fix(title): quiet empty title fallback and suppress console spam
  • fc48095c fix(chat-input): stabilize paste and autogrow with cherry viewport limits
  • b928dacb fix(chat-input): autogrow without manual expand up to 40vh
  • 9c5b699a fix(chat-input): disable compact to prevent freeze on clear
  • 0dae7bbc feat(chat-input): fix expand cherry parity
  • 315e72e2 feat(chat-input): integrate cherry expand sizing and compact
  • 05a0fc2f feat(chat-input): add deferred surface
  • 6bf5e297 feat(chat-input): add tiptap runtime stub
  • 679e750d feat(chat-input): wire css var sizing to textarea
  • cf5a2b38 feat(chat-input): add compact presentation
  • 5e9e7d31 feat(chat-input): align expand sizing with cherry
  • a19de6a0 feat(chat-input): add font-size adaptive sizing
  • 6b29f9bb docs(plan): chat input expand cherry parity hybrid
  • a03abfba feat(mcp): surface live tool-call progress in the card header
  • 74ab00ef fix(mcp): align tool calling with Gemini API documented behavior
  • 8ca75f9e feat(mcp): stream live tool-call progress into the chat UI
  • 93597f85 feat(chat): remove tool-loop iteration cap
  • f671c1e2 refactor(settings): split McpSection into focused modules
  • dff75253 refactor: break import cycles and regroup MCP components
  • 5fc4bae7 feat(mcp): process display + picker polish; fix all stale suites
  • 27624d1d feat: mcp productization + cherry parity + settings polish
  • afdcb953 style(settings): unify settings visual language
  • eadc613c refactor(settings): move selectionAsk model to Models page
  • a30901a3 feat(selection-ask): add independent model config in settings
  • d78061b7 feat(mcp): show auto-approve badge and loop scaffold
  • f79b36a1 feat(mcp): dual control table and trust gate in McpSection
  • d8c87f54 feat(mcp): trust helpers and cache key
  • 22edd233 feat(mcp): add disabledAutoApproveTools and isTrusted to config
  • bf803c2e fix(mcp): silence -32601 for prompts/resources (treat as empty)
  • 8e8b2afc fix(mcp): address critical batch1 review (logs guard, poll deps, tabs layout)
  • 9752e619 feat(mcp): logs tab static 200 with 30s poll
  • a4fd6674 feat(mcp): detail tabs prompts/resources read-only
  • 96590a78 feat(mcp): filter/search/sort bar for MCP server list
  • 29939386 test: 补充分叉菜单图标 viewBox 断言
  • 4402e2cb feat: 分叉消息按钮改用 DSH 分叉图标
  • 38d50ebd feat(mcp): server log buffer 200 + GET /api/mcp/logs + fetchMcpLogs
  • ded56d39 feat: 新增 DeepSeek Harness 分叉图标 IconBranch
  • a515fd5a fix(mcp): tolerate comments in JSON import and clean placeholder
  • 67621df1 feat(mcp): add one-click and JSON import for MCP servers
  • c70eced2 fix(mcp): address critical review findings (i18n wiring, pill labels, version, store selector)
  • de07ab48 chore(mcp): i18n and build verification for visible control
  • 4b22f4aa feat(mcp): render tool traces and parallelize loop
  • 873e689d feat(mcp): add McpToolCallBlock disclosure
  • e6d01b96 feat(mcp): per-tool enable table in McpSection
  • 733e835d feat(mcp): show status dot/pill in McpSection and wire to Test
  • 07cd64d7 feat(mcp): add lightweight mcpStatusStore
  • 594d2373 feat(mcp): filter disabledTools in client functions
  • 0b7b8373 feat(mcp): add disabledTools to McpServerConfig with sanitization
  • 7d3a2062 feat(composer): replicate Cherry Studio thinking control and remove header Zap
  • 902d8be4 chore(cleanup): remove unused chat input expand sizing exports and dead layout param
  • 713c8c08 chore(cleanup): remove redundant chat input fullscreen code
  • 39a053d1 fix(chat-input): wire expand corner through useChatInputExpandSizing toggle for Cherry Studio height animation
  • 9f4ba52d fix(chat-input): restore Cherry Studio 260ms height transition (shorthand)
  • 2f18cac1 fix(chat-input): extend expand animation to 350ms for visibility (Cherry 260ms ease-out)
  • 9833d7cd fix(chat-input): match Cherry outer transition-all for expand animation visibility
  • 71dca82d fix(chat-input): make expand animation match Cherry Studio (height 260ms ease-out)
  • 6490ee88 fix(chat-input): restore default input height to 26px (was 56px from 50vh expand frame)
  • 9fd40c35 feat(chat-input): partial expand like Cherry Studio (inline 50vh, not fullscreen)

✅ CI

  • lint-and-typecheck / test (2993 tests) / build / node24-build-compatibility / docker-build / e2e — all green on main (33079716044)
  • Previous failures (33078948115, 33078680285) fixed by fix(ci) decoupling & nullability patches

🔖 Release

  • Tag v1.18.0 on fa4250ce (bump only package.json 1.17.01.18.0)
  • pnpm@11.22.0, node >=24 <27