Commit Graph
1144 Commits
Author SHA1 Message Date
吕柏青 482408071e fix(popup): 云审收口(clamp saturating_sub 防溢出 + 右缘溢出单测 + 清理不可达 hwnd guard) 2026-06-07 13:59:54 +08:00
吕柏青 fab965162b fix(popup): capsule 四边 clamp + Windows 句柄重试(#470) + qa 焦点契约文档化(#466) 2026-06-07 13:48:56 +08:00
吕柏青 bdd26fbca2 docs(commands): 修正 mod.rs 过时命令计数注释(89→127) 2026-06-07 13:42:29 +08:00
吕柏青andClaude Opus 4.8 d669dfd419 style(asr): cargo fmt 收尾 pcm.rs 测试断言换行
属 C4(pcm_duration_ms 去重)的 rustfmt 收尾,无逻辑变化。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 13:19:28 +08:00
吕柏青andClaude Opus 4.8 b77f42a458 refactor(ui): 抽出共享 format.ts(clamp/formatTime/formatDuration/formatBytes)
clamp 在 DataStorageSection/DebugToolsSection 字节级相同;formatTime/
formatDuration 在 Overview/History 高度重复(仅日期分支/i18n key 略不同);
formatBytes 在 AutoUpdate/LocalAsr 行为有差异(封顶 MB+guard vs 到 GB)。
统一收口到 src/lib/format.ts,用 option 区分各分支:formatTime 的
withTimeOnOtherDays、formatDuration 的 minutesAsClock、formatBytes 的
maxUnit/mbDigits/guard。各调用点改为 import + 薄封装,显示行为逐处保持不变。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 13:18:45 +08:00
吕柏青andClaude Opus 4.8 16fa62d082 refactor(coordinator): 合并 less_computer 两个 bridge loop
less_computer_modifier_bridge_loop 与 less_computer_combo_bridge_loop 循环体
逐字相同,只有事件枚举类型不同(HotkeyEvent vs ComboHotkeyEvent)。抽出泛型
less_computer_bridge_loop<E>,调用方传入把各自事件映射到归一 LessComputerEdge
的闭包;两个公开入口改为薄封装。block_on(handle_less_computer_*) 调用语义不变。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 13:15:47 +08:00
吕柏青andClaude Opus 4.8 cbf3be0d50 refactor(coordinator): 合并 take_*_combo_hotkey_on_main_thread 三处复制
combo_hotkey / translation_hotkey / coding_agent_combo_hotkey 三个
take_*_on_main_thread 的主线程释放(issue #118)marshaling 体逐字相同,仅
take 字段不同。抽出共享 take_combo_monitor_on_main_thread(inner, slot),
slot 闭包按 &Arc<Inner> 取回对应 Mutex<Option<ComboHotkeyMonitor>> 字段,
三处改为薄封装。action_hotkey 类已用 action_hotkey_slot 单独泛化,不动。
语义不变。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 13:14:31 +08:00
吕柏青andClaude Opus 4.8 db51e95fde refactor(asr): 抽出共享 pcm_duration_ms
(pcm.len()/2)*1000/16000 这段时长换算原本在 foundry/sherpa_runtime/
sherpa_provider/whisper/mimo 五处各自重复(带魔法数 2/16000)。收口到新
模块 asr/pcm.rs(pcm_duration_ms + pcm_duration_ms_from_bytes),各处改为
薄封装调用,参考 wav::encode_wav_16k_mono 的共享先例。行为不变。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 13:11:58 +08:00
吕柏青andClaude Opus 4.8 72f9ced533 refactor(commands): commands.rs 拆为 commands/ 域模块(glob 重导出,lib.rs 零改)
把 4857 行的单文件 commands.rs 按单一职责拆成 commands/ 下 16 个域模块
(settings / credentials / providers / history / dictionary / dictation /
style_packs / permissions_cmds / qa / hotkeys / local_asr / foundry_asr /
sherpa_asr / marketplace / github_oauth / misc)。纯机械式、行为保持的剪切 +
可见性提升,未改动任何 #[tauri::command] 函数体。

- commands.rs → commands/mod.rs:内含 `mod <domain>;` + `pub use <domain>::*;`,
  glob 重导出每个域模块。`commands::<name>` 路径全部不变 → lib.rs 的
  generate_handler! 清单(346-492)与所有类型/helper 引用零改动。
  #[tauri::command] 生成的 __cmd__<name> 伴生项随 glob 一并重导出。
- 跨域共享项提到 mod.rs 并 pub(crate):is_valid_session_id /
  is_valid_local_pack_id、open_path_in_file_manager(3 个 cfg 变体)、
  共享状态类型(MicrophoneMonitorState / TrayMicrophoneMenuState 等)、
  常用 crate 级 import 以 `pub(crate) use` 重导出供子模块 `use super::*` 取用。
- MARKETPLACE_BASE_URL 提为 pub(crate)(misc::check_network 引用);
  hotkeys.rs 的 reject_* 整套 + sync_dictation_hotkey_legacy_fields 保留在
  hotkeys.rs 但提 pub(crate)(被 settings::persist_settings、qa::set_qa_hotkey 引用);
  style_packs.rs 的 activate_builtin_style_mode 等保留并 pub(crate)(lib.rs 引用)。
- 测试:保留单个 tests mod 在 mod.rs,把 `use super::{...}` 改为 per-module
  路径,被测 helper 提为 pub(crate)。不改任何测试逻辑。
- sherpa_onnx_asr_* 整组 #[cfg(windows)],非 Windows 平台 glob 重导出无人引用,
  对该 `pub use sherpa_asr::*` 加 #[allow(unused_imports)]。

验证:cargo check 0 error;cargo test --lib 417 passed(基线不回归);
npm run build 通过;capsule Spaces / hotkey-injection 契约测试通过。
命令面 127 个 #[tauri::command] 与原文件逐一对齐,无新增/缺失/重复。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 13:05:53 +08:00
吕柏青andClaude Opus 4.8 7a5ae5fbe2 test(coordinator): capsule-spaces 契约测试改读 ime_insertion.rs
show_capsule_window_no_activate 随 SRP 拆分搬到 coordinator/ime_insertion.rs,
契约函数本身未改;测试路径与 pub(crate) 前缀同步更新。npm run check:macos-capsule-spaces 通过。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 12:44:18 +08:00
吕柏青andClaude Opus 4.8 c228ce87ad refactor(coordinator): 把 #[cfg(test)] mod tests 移到 coordinator/tests.rs
机械式行为保持:把 ~850 行单元测试模块体搬到独立文件,父模块改为 #[cfg(test)] mod tests;
声明。tests 里的 super::* / super::dictation::* 从子文件解析路径一致,417 测试不变。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 12:40:21 +08:00
吕柏青andClaude Opus 4.8 682603077a refactor(coordinator): 抽出 qa_session 子模块
机械式行为保持拆分:从 coordinator.rs 搬出划词语音问答会话生命周期 —— QA 录音 error
监听、begin/end_qa_session、错误/静默/取消收尾。与 qa.rs(热键/面板状态)互补。
end_qa_session 跨 await 持/放 qa_state 锁、驱动 SSE 流与窗口焦点 marshaling 原样保留。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 12:37:58 +08:00
吕柏青andClaude Opus 4.8 a21e46cbb9 refactor(coordinator): 抽出 asr_setup 子模块
机械式行为保持拆分:从 coordinator.rs 搬出 ASR 引擎构建与生命周期 —— 麦克风/凭证
前置校验、本地模型释放调度(Foundry/sherpa/local-qwen3)、QaAsrStart provider 构建、
全局超时常量与各 provider 超时、音频线程驱动的 DeferredAsrBridge。schedule_*_release
session 守卫与 DeferredAsrBridge attach/flush 交错原样保留。ActiveAsr 及 QaAsrStart/
DeferredAsrBridge 的跨模块方法提升为 pub(crate);ActiveAsr/分类器留在父模块。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 12:35:18 +08:00
吕柏青andClaude Opus 4.8 f9a531be6b refactor(coordinator): 抽出 llm_pipeline 子模块
机械式行为保持拆分:从 coordinator.rs 搬出 LLM 润色/翻译/provider 构建/凭证读取管线
—— 流式与一次性润色、润色+翻译合并、各 ASR/LLM provider 凭证读取与 ActiveLLMProvider
构建、provider 分类器、中文字形偏好、词库 phrases/hotwords 读取。polish-translate
marker 常量经 glob 重导出供父模块 tests 的 super:: 引用。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 12:30:40 +08:00
吕柏青andClaude Opus 4.8 0430c3ec32 refactor(coordinator): 抽出 capsule 子模块
机械式行为保持拆分:从 coordinator.rs 搬出 capsule HUD 呈现层 —— 显示策略、
emit_capsule 状态广播、布局快照/底部居中定位、自动回 Idle 调度,及相关 const/static。
emit_capsule 的 ~30Hz 音频回调线程 run_on_main_thread marshaling 原样保留。
CapsuleLayoutState 经 glob 重导出供 Inner 字段类型可见。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 12:25:33 +08:00
吕柏青andClaude Opus 4.8 64e97f5a8c refactor(coordinator): 抽出 ime_insertion 子模块
机械式行为保持拆分:从 coordinator.rs 搬出 Windows IME 会话/TSF 插入/非 TSF 回退,
以及焦点目标抓取恢复、前台 App 抓取、capsule 窗口 no-activate 显示/隐藏等 OS 级窗口
插入管线。大量 unsafe + Win32/objc2 FFI 与 cfg 分支、SAFETY/issue 注释原样跟随。
PreparedWindowsImeSessionSlot 留在父模块(Inner 字段类型)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 12:22:11 +08:00
吕柏青andClaude Opus 4.8 90e74b84d2 refactor(coordinator): 抽出 hotkey_supervisors / voice_agent_hotkeys 子模块
机械式行为保持拆分:从 coordinator.rs 搬出听写/QA/combo/翻译/action/window
热键的 supervisor/bridge/事件循环,以及 Less Computer 语音 Agent 热键簇。
保持 use super::* 重导出契约(pub(crate) use 子模块::*),Inner/ActionHotkeyKind
随之提升为 pub(crate)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 12:14:16 +08:00
吕柏青 17e69f217a Merge origin/beta into feat/fast-agent(解决 insertion/App/main 冲突) 2026-06-07 11:54:58 +08:00
吕柏青 31580b7cbe fix(less-computer): 护栏复审跟进(deny 家目录改 ~/ 前缀/控制台去 WebFetch/git clean 等价/补测试) 2026-06-07 11:49:23 +08:00
吕柏青 bbce0013b1 fix(less-computer): 修复云审护栏安全问题(写失败 fail-closed/deny 等价放行/deny 覆盖/钳制 bypass/去 WebFetch/Starting 熄 glow/删死代码) 2026-06-07 11:36:20 +08:00
jmr c14d61e8a5 Merge pull request #611 from H-Chris233/fix/linux-fcitx-clipboard-fallback
fix(linux): enable Wayland clipboard fallback
2026-06-07 00:18:21 +08:00
H-Chris233 d72c79ef92 fix(linux): enable Wayland clipboard fallback 2026-06-06 23:16:40 +08:00
Chris233 85ca2acbe7 Merge pull request #604 from dttxorg/fix/issue-minimax-thinking-control
fix(llm): 修复 MiniMax thinking 关闭无效
2026-06-06 22:04:12 +08:00
Chris233 a1fc7c503d Merge pull request #610 from H-Chris233/fix/linux-fcitx-clipboard-fallback
fix(linux): restore clipboard fallback after fcitx failure
2026-06-06 22:00:42 +08:00
H-Chris233 1010cf7932 fix(linux): restore clipboard fallback after fcitx failure 2026-06-06 21:41:03 +08:00
H-Chris233 9bfed9a275 Merge remote-tracking branch 'upstream/pr-601' into beta 2026-06-06 21:36:47 +08:00
吕柏青 8c1e4df764 fix(less-computer): polish agent capsule UX 2026-06-06 20:35:48 +08:00
Chris233 9f8f8d29d2 Merge pull request #608 from H-Chris233/fix/issue-600-macos-ci
fix(asr): stabilize MiMo HTTP tests on macOS
2026-06-06 18:57:05 +08:00
H-Chris233 fc2cc898ef fix(asr): stabilize MiMo HTTP tests on macOS 2026-06-06 18:35:55 +08:00
Chris233 7722a1c860 Merge pull request #607 from H-Chris233/feat/issue-600-xiaomi-mimo-asr
feat(asr): add Xiaomi MiMo provider
2026-06-06 18:11:45 +08:00
H-Chris233 a79b7429fe feat(asr): add Xiaomi MiMo provider 2026-06-06 17:58:23 +08:00
aeoformandClaude Opus 4.7 1033130852 fix: resolve merge conflicts with beta (frost removal + audio cue)
Accept beta's WindowChrome/global.css/FloatingShell changes for Linux
surface treatment, re-apply AudioCueListener component on top.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-06 17:42:37 +08:00
Chris233 61b99ad593 Merge pull request #606 from H-Chris233/fix/issue-553-linux-solid-surfaces
fix(linux): use solid surfaces for windows
2026-06-06 17:20:53 +08:00
H-Chris233 b59c920195 fix(linux): use solid surfaces for windows
Disable Linux transparent windows for main, capsule, and QA so WebKitGTK compositing no longer controls frosted-glass visuals.

Remove the no-compositing frontend fallback command and route Linux shell surfaces through opaque surface styling while preserving the existing compositing environment workaround.
2026-06-06 14:08:00 +08:00
Mavis 063cd36a32 fix(llm): 修复 MiniMax thinking 关闭无效
**Bug 复现**
用户在 OpenLess 设置里把「思考」关闭后,MiniMax(M3)润色仍输出 thinking 内容块,UI 关闭形同虚设。

**根因**
polish.rs::openai_compatible_thinking_control 只在 5 个 provider_id
(deepseek / openrouterFree / alibabaCoding / openai / codingPlanX) 上分派
thinking 控制参数;MiniMax 不在列表里,走默认 _ => None 分支,后端根本
不下发 thinking 字段。M3 默认开启 thinking,所以 UI 关闭后服务端仍
输出 <think>…</think> 块。

**修复**
- 新增 ThinkingControl::MiniMaxThinking 变体:关闭下发
  `thinking.type = "disabled"`、开启下发 `thinking.type = "adaptive"`,
  与 minimaxi 官方 Chat Completions schema 完全对齐。
- openai_compatible_thinking_control 增加 "minimax" provider_id 识别。
- 同时增加 base_url 兜底识别(host 含 "minimax" 关键字即命中),让用户
  用「自定义」preset 接入 MiniMax 时也能正确下发 thinking 控制参数。
- 前端 ProvidersSection.tsx::LLM_PRESETS 新增 minimax preset
  (baseUrl=https://api.minimaxi.com/v1, model=MiniMax-M3)。
- 5 个 i18n 文件 (en/zh-CN/zh-TW/ja/ko) 加 minimax 文案。
- 加 4 个 Rust 单元测试覆盖:preset 命中、adaptive 字面量、custom
  base_url 兜底、host 提取对尾斜杠与路径的容错。

**兼容性**
- 旧 provider (deepseek/openai/codingPlanX/alibabaCoding/openrouterFree)
  行为完全不变,新增 case 仅在 provider_id 命中 minimax 或 base_url
  含 minimaxi 主机时启用。
- 行为对齐 minimaxi 官方文档:
  https://platform.minimaxi.com/docs/api-reference/text-chat-openai#thinking-控制

**测试**
cargo test --lib polish:: 41 passed, 0 failed
新增 4 个 case:
- openai_chat_body_disables_minimax_thinking_by_preset
- openai_chat_body_enables_minimax_thinking_with_adaptive_literal
- openai_chat_body_falls_back_to_base_url_for_custom_minimax_endpoint
- openai_chat_body_base_url_fallback_respects_trailing_slash_and_path
2026-06-06 10:13:09 +08:00
aeoformandClaude Opus 4.7 ac650113ab fix: move audio cue listener from capsule window to main window
- AudioCueListener is a new component rendered in FloatingShellBody
  that listens to capsule:state on the main window, so the record
  start cue works on Linux where the capsule window is hidden.
- Coordinator now emits capsule:state to both "capsule" and "main"
  windows so the listener receives state changes.
- Remove duplicate audio cue logic from Capsule.tsx to avoid
  double-triggering on macOS/Windows where capsules are shown.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 22:47:37 +08:00
aeoformandClaude Opus 4.7 1658af4dfd ci(linux): upload fcitx5 plugin as standalone release artifact
- Add upload step for libopenless.so + openless.conf as a separate
  artifact (openless-fcitx5-plugin-linux-x64) for AppImage users
  and manual installation
- Include plugin files in GitHub Release assets alongside existing
  deb/rpm/AppImage bundles

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 22:12:10 +08:00
aeoformandClaude Opus 4.7 7e21123bad fix(linux): fcitx5 hotkey intercept + remove backdrop-filter + clipboard cleanup
- fcitx5 plugin: fix Alt+a hotkey leaking 'a' character by normalizing
  case comparison (Alt produces uppercase sym, Key::check expects lowercase)
- fcitx5 plugin: use PreInputMethod + filterAndAccept to block engine
  before commit happens (same strategy as clipboard addon)
- Linux: remove backdrop-filter (unreliable on WebKitGTK, #553),
  replace with opaque background
- Linux: skip clipboard writes after streaming insert (fcitx5 commits
  directly, clipboard fallback corrupts user data)
- SettingsModal: render via React Portal to document.body (#580, fixes
  scrollbars overlapping modal)
- Remove is_no_compositing_mode command and CSS fallback (no longer needed)
- Remove StartupShell loading screen (app renders FloatingShell immediately)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 21:59:12 +08:00
吕柏青 120cc152dc fix(less-computer): 全屏描边贴边修复(逻辑坐标+菜单栏层级)+苹果式高斯柔光(细带blur内化)+按下即亮; 弹框可拖动(顶栏拖把手+resize原位锚定); agent超时120→300s/预算0.5→2$ 2026-06-05 21:12:48 +08:00
吕柏青 cf933cb347 fix(less-computer): 长按松手停录音(latch不再被5s轮询重置) + 全屏弧形彩虹描边浮层(点击穿透/无缝) + 流式进场动画 + 文案 2026-06-05 20:52:49 +08:00
吕柏青 93c54ca2d5 feat(less-computer): 连续对话(--continue 续会话+多轮气泡) + 彩虹跑马灯描边/流动呼吸背景 2026-06-05 19:28:24 +08:00
吕柏青 26e7c48289 fix(less-computer): 把 less-computer 窗口加进 capabilities,否则 webview 收不到事件也调不了命令(卡片空白根因) 2026-06-05 16:14:25 +08:00
吕柏青andClaude Opus 4.8 d6ca97d493 feat(less-computer): streaming chat popup window + inline approval scaffolding
Adds a macOS-only fluid chat popup (window label=less-computer) for the Less Computer voice agent. Streams user bubble + assistant Delta + tool chips + final result/cost as the agent runs, instead of only showing the final capsule. Content-adaptive height (bottom-anchored, clamped 120-520, scrolls past max), non-movable, always-on-top, frost aesthetic mirroring the QA panel. Esc / close button dismiss. High-risk guard hits surface an inline Approve/Deny card; Approve re-runs the task once with that pattern lifted from the deny list. Windows/Linux keep it hidden and inert (no hotkey, no emit). i18n added to all 5 locales.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 15:07:08 +08:00
吕柏青 f735ae9155 chore(less-computer): 精简文案 desc 与 voiceHotkeyDesc 缩短 5 语言 2026-06-05 14:42:30 +08:00
吕柏青 5546e50db5 feat(settings): 模型改抽拉下拉(Haiku/Sonnet/Opus,不用记ID)+ Cloud 控制台默认折叠 2026-06-05 14:34:20 +08:00
吕柏青 5ee5cb1df8 feat(less-computer): 处理态文案 thinking 改为 using(Agent 操控电脑时);并入 origin/beta 的 bug 修复 2026-06-05 14:31:05 +08:00
吕柏青 4aa293e1e0 Merge remote-tracking branch 'origin/beta' into feat/fast-agent 2026-06-05 14:22:12 +08:00
吕柏青 8fd3ca4a19 fix(less-computer): Agent 真正动手干活——放行+护栏(acceptEdits + Bash/工具 + 高风险拦截)
根因:run_voice_agent_transcript 之前硬编码 Plan 只读 + 无工具,所以 Agent 只能返回文本、
根本不会真的开 Chrome / 跑命令。改成项目既有的「放行 + 护栏」动作模式:
- permission_mode = acceptEdits(尊重高级里的设置;coding_agent_mode_from_pref 映射)
- allowed_tools = Bash/Read/Edit/Write/Glob/Grep/WebFetch/WebSearch(能真正动手)
- 护栏 settings:deny 高风险(rm -rf / sudo / 强推等)自动拦截 = 用户选的「混合:仅高风险」MVP
- cwd = workdir 或 $HOME(--add-dir 限定文件作用域);运行前 git 快照便于回滚;用后清理临时护栏文件

真实链路实测(claude v2.1.161,haiku):让它「在 /tmp 建 lesscomputer_probe.txt 内容 ok」
→ 文件真的被创建、result=success/「done」、15.8s/$0.05。证明无头链路确实会执行动作。
「开 Chrome」走同一条 Bash 路径(open -a)。

注:交互式弹审批(高风险在弹框点同意)+ 自适应弹框 UI 为后续;当前高风险=自动拦截。
cargo check 0 / less_computer + guard + autonomous_prompt 单测全过。
2026-06-05 14:13:44 +08:00
吕柏青 dae966ffd1 feat(less-computer): 「按住说话键」挪到 通用→快捷键,去掉高级里的重复
- 通用 → 快捷键 新增 Less Computer 行(macOS):可直接启用并录制按住说话键,
  和听写/翻译/QA/切风格/打开应用一排,用户一眼就能看到(之前埋在高级里)。
  启用按钮一键置 codingAgentEnabled=true + 默认键,保存即触发后端重新注册。
- 高级 → Less Computer 移除重复的按住说话键行,只留后端/模型/权限/工作目录。
- tsc 0。
2026-06-05 13:30:01 +08:00
吕柏青 0082e0bf0e feat(less-computer): 专用语音键(Codex 实现,已审核)
把「长按听写键」方案换成独立专用键 coding_agent_voice_hotkey(默认 LeftControl,
支持 Ctrl/Option/Fn 等单修饰键,亦支持组合键),按住说话、松开处理:
- 单修饰键 → 第二个 CGEventTap(HotkeyMonitor,Hold 模式);组合键 → ComboHotkeyMonitor
- handle_less_computer_pressed/released:按下开始录音并标记 voice_agent,松开 end_session
  → 复用既有 run_voice_agent_transcript(autonomous_prompt + Plan 只读)
- 完整冲突校验(Less Computer vs 听写/QA/翻译/切风格/打开应用)
- 移除旧 coding_agent_hotkey(global-hotkey panel/quick)模块;macOS-only
- 设置 UI、i18n(5 语言)、mock/types 同步

审核结论:后端实现完整、已测试可跑。65 coordinator + 20 coding_agent 单测全过
(含 less_computer_press_emits_visible_capsule、冲突校验测试)。

注:当前 Less Computer 配置在「高级」里,下一步按用户要求挪到「通用」并做弹框 + UI 整理。
2026-06-05 13:25:57 +08:00