吕柏青
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
吕柏青 and Claude 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
吕柏青
ff918ece31
feat: 发给无头 Claude 的需求统一包一层「一次性完成」自动化前置说明
...
无头 claude -p 单次运行没有多轮兜底,模型中途提问/给半成品这一轮就废了。新增
coding_agent::autonomous_prompt(task):把真实需求包进目标驱动(/goal 式)的自动化指令——
要求先定目标与完成标准、自主连续执行到彻底完成、不提问、不给计划/半成品、长任务也在本次跑完、
只回最终结果。语音 Agent 改用它构造 prompt。
验证:autonomous_prompt 单测过 / cargo check 0 error
2026-06-05 10:53:45 +08:00
吕柏青
e9e7ba50c4
fix: 长按阈值从会话开始计时,扣除 ASR 握手耗时
...
arm_voice_agent_long_press 之前在 begin_session(含 ASR 握手)之后才睡 550ms,
握手慢时实际长按阈值被拉长、判定不稳。改为从 state.started_at(≈按下时刻)算起
睡剩余时间,阈值稳定。
2026-06-05 10:47:55 +08:00
吕柏青
ee50665278
feat: 长按听写键唤起 Cloud Agent 语音;移除 ⌘⇧J/⌘⇧Enter 组合键
...
按用户新交互方案:toggle 听写模式下,长按右 Option(>550ms)把当前会话升级成
语音 Agent —— 录音→ASR→把转写交给无头 Claude 跑任务→结果弹胶囊(不插入光标)。
短按仍是普通听写,行为完全不变。
实现(最大化复用、最小化对核心听写的改动):
- coordinator_state: SessionState 加 voice_agent 标志,begin_session_state 必复位(安全护栏 + 单测)
- dictation: handle_pressed(Toggle,Idle) 武装长按计时器;计时器到点且仍按住→置 voice_agent;
handle_released(Toggle) 若 voice_agent→end_session(按住说话语义);
end_session 拿到转写后分流到 run_voice_agent_transcript(Plan 只读、安全 MVP)
- 退役组合键:supervisor 清空 panel/quick 绑定并停止注册;移除两个设置行,
改为只读提示「长按听写键」;删除已无用的 sanitize_agent_hotkeys + 测试 + default_quick
- i18n(5 语言):新增 agentVoiceHint / agentVoiceTrigger
限制(已知):仅 toggle 听写模式接长按;hold 模式的「点按=Agent」未接。结果走胶囊,
长文本展示有限。权限固定 Plan 只读,不产生副作用。
验证:cargo check 0 error / coordinator 64 + dictation 33 + coding_agent 23 单测全过 / tsc 0
2026-06-05 10:45:16 +08:00
吕柏青
6c8e2843f2
fix: Cloud Agent 占位提示改为中性色(不再是红色报错)
...
handle_coding_agent_panel 之前用 CapsuleState::Error(红色),用户读成"报错"。
其实只是"敬请期待"信息提示 → 改用 Done(中性色)。同步更新集成测试断言。
日志确认:之前的红色就是这条占位提示,并非真实崩溃。
2026-06-05 10:30:26 +08:00
吕柏青
1b2a15dd75
test: 加胶囊内省 seam + 集成测试证明「按下面板键→弹可见胶囊」
...
emit_capsule 在校验 app 句柄前记录 last_capsule_state(廉价单锁,用户行为不变),
让无 GUI 测试能断言热键事件确实触发了可见胶囊。新增集成测试 coding_agent_panel_
press_emits_visible_capsule:开启功能→驱动 handler→断言下发 Error 胶囊(开发中提示),
headless 复现并验证目标 2(a)「按下有反馈」。
验证:cargo test coding_agent 27 passed / cargo check 仅余既有 warning
2026-06-05 10:09:01 +08:00
吕柏青
51d158754c
test: 自愈逻辑抽成纯函数 sanitize_agent_hotkeys + 4 个单测
...
把 supervisor 里内联的「无效单修饰键→有效组合键」自愈逻辑抽成可测纯函数,
新增单测复现用户故障(Right ⌘ 面板键 → 自愈为可注册的 ⌘⇧Enter),并覆盖
快取键、有效组合键不动、None 不动等分支。
验证:cargo test coding_agent_hotkey 7 passed / tsc ✅
2026-06-05 10:01:21 +08:00
吕柏青
b532ef9033
fix: 快速 Agent 热键自愈 + 统一停用旋钮布局
...
目标 2(快速 Agent 完全不生效)根因:用户把 Cloud Agent 绑成单修饰键
"Right ⌘",而 global-hotkey 无法注册单修饰键 → 注册无限失败、按下无任何反应。
- coding_agent_hotkey: 单个坏 binding 只跳过、不再拖垮整体注册,也不再无限重试空转
- coordinator: 启动时自愈无效绑定(单修饰键)→ 换成有效组合键(⌘⇧Enter/⌘⇧J)并持久化+通知前端
- types: 新增 default_coding_agent_quick_hotkey,panel/quick 默认值供自愈回退
- ShortcutRecorder: 新增 comboOnly(拒绝单修饰键并提示)+ 内联停用旋钮,
停用按钮紧贴录制按钮左侧成组靠右(两个旋钮布局)
- ShortcutsSection: 切风格/打开App/选区问答/选中文本润色/Cloud Agent 全部统一为内联停用旋钮
- i18n(5 语言): 新增 settings.recording.comboNeedKey;选中文本润色标签去掉"(Claude)"后缀
验证:cargo check ✅ / cargo test(hotkey+binding) ✅ / tsc ✅ / hotkey-injection gate ✅
2026-06-05 09:51:25 +08:00
吕柏青 and Claude Opus 4.8
8211dea3d7
feat(coding-agent): 拆分两功能 — 选中润色(快取用键)+ Cloud Agent(语音键,占位);热键移到通用设置
...
- 快取用键 = 选中文本润色:选中→Claude 润色→回插替换;全程胶囊反馈
(没选中提示"请先选中文本";润色中/完成/出错都显示),纯文本 plan 只读、无 guard、便宜可靠。
- 面板键 = Cloud Agent(语音→ASR→Claude→结果弹窗),完整流程开发中,先给可见提示。
- 两个热键从「高级」移到「通用→快捷键」,停用按钮置于录制器左边、常驻行。
- CodingAgentSection 精简为开关/后端/模型/权限/工作目录 + 热键位置提示;5 语言 i18n。
cargo check + tsc + vite 均绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 09:21:35 +08:00
吕柏青 and Claude Opus 4.8
0463c30282
feat(coding-agent): 接线快取用执行链路(热键 → 选中 → 无头 Claude → 回插)
...
- 新增 coding_agent_hotkey.rs:双绑定全局热键监听器(面板键 + 快取用键),
镜像 qa_hotkey,3 单测。
- coordinator 接线:Inner 加 coding_agent_hotkey;新增 supervisor(仅
coding_agent_enabled 时注册)+ bridge loop + handler;lib.rs 启动调用。
- handler:capture_selection → 护栏化 run_claude_agent(sonnet 默认、deny 清单、
git 快照、成本封顶)→ TextInserter 回插光标。本版面板键暂同走快取用,
语音 + 面板随后续版本。
cargo check 绿;coding_agent 全模块 22 单测通过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 08:34:04 +08:00
吕柏青 and Claude Opus 4.8
d8dc54695d
feat(coding-agent): 语音 Agent 设置 UI(开关 + Claude/OpenCode 选择 + 双热键 + 模型/权限/工作目录)
...
- UserPreferences 新增 7 字段(coding_agent_*):启用开关、后端 provider、模型、
权限模式、工作目录、面板热键、快取用热键;贯穿 struct/Wire/双向转换/默认。
- 前端 types.ts/ipc.ts 同步类型与 mock;CodingAgentPermissionMode 收敛到 types.ts 单一来源。
- 新增 CodingAgentSection(设置→高级):启用开关、Claude/OpenCode 选择、两个
ShortcutRecorder(可启用/停用)、权限模式、模型、工作目录。
- i18n 全 5 语言新增 settings.codingAgent.*。
热键实时注册与触发执行链路(coordinator 接线)随后续提交。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 08:20:56 +08:00
吕柏青
d5756db8a6
Merge remote-tracking branch 'origin/beta' into feat/fast-agent
2026-06-05 08:08:50 +08:00
TRIP
5ca3a80cd6
Merge pull request #581 from aeoform/chore/linux-plugin-check-and-ux-cleanup
...
chore(linux): plugin 路径检查增强 + 去除启动加载界面 + 修正快捷键描述
2026-06-05 08:02:14 +08:00
Chris233
0d94364e65
Merge pull request #591 from Open-Less/feat/issue-582-openrouter-asr
...
feat(asr): 支持 OpenRouter 作为 ASR 提供商 (#582 )
2026-06-04 22:19:12 +08:00
aeoform and Claude Opus 4.7
737ca4491e
fix: restore is_no_compositing_mode useEffect for Linux frost fallback
...
The useEffect that invokes is_no_compositing_mode was removed along
with StartupShell, but it is the sole trigger for #553/#570's CSS
frost fallback on Linux. Without it, WEBKIT_DISABLE_COMPOSITING_MODE=1
users never get the fallback and see broken frosted glass.
Also fix the dead ternary: isTauri ? 'ready' : 'ready' → 'ready'.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-06-04 22:05:02 +08:00
Chris233
6c17ffe35c
Merge pull request #590 from Open-Less/fix/issue-573-overview-credentials-refresh
...
fix(overview): 凭据保存后状态不刷新仍显示「未配置」 (#573 )
2026-06-04 21:57:46 +08:00
Chris233
a86af40194
Merge pull request #593 from Open-Less/chore/issue-470-capsule-diagnostics-v2
...
chore(capsule): #470 诊断 v2 — 暗点一次性日志(零行为改动)
2026-06-04 21:56:39 +08:00
Chris233
984169d837
Merge pull request #592 from Open-Less/feat/issue-576-global-hotkey-disable
...
feat(hotkey): 全局快捷键可停用/清空开关 (#576 )
2026-06-04 21:55:44 +08:00
吕柏青
83e4135175
chore(capsule): #470 诊断 v2 —— 给胶囊不显示的暗点补一次性日志(零行为改动)
...
#470「Windows 语音输入看不到录音胶囊」根因仍未定(PR #471 已明说只加诊断、需真机
日志;byte92 报 macOS 也复现,疑跨平台)。本 PR 不改任何 show/hide/position 行为,
仅在几个静默路径补日志,把根因收敛到 A/B/C 单一分支,帮助拿日志定位:
- coordinator.rs show_capsule_window_no_activate(Windows):两处 window_handle() /
RawWindowHandle::Win32 取不到时此前静默 return false,补 warn(Win32 show 失败最可能的暗点)。
- coordinator.rs emit_capsule:get_webview_window("capsule") 取不到时此前静默 return,
补一次性 warn(暗点 A0:窗口压根没创建/已销毁)。沿用 AtomicBool 一次性门,避免 ~30Hz 刷屏。
- lib.rs position_capsule_bottom_center(Windows):定位只夹了上边(.max(mon.top)),
多显示器/负坐标/异常 DPI 下可能算到屏幕外却无观测,补显示器几何 + 最终落点 debug log。
- Capsule.tsx:webview 收到第一个 capsule:state 事件时打一次 console.info,区分
「后端没 emit」与「emit 了但窗口没显示/没渲染」。
注:Windows-cfg 部分本机无法交叉编译验证(ring 的 C 代码需 MSVC),依赖 Windows CI。
2026-06-04 20:45:47 +08:00
吕柏青
d8ec007fcd
feat(hotkey): 全局快捷键可停用/清空开关 ( #576 )
...
0602 版本默认注册的「切换风格 / 唤起 App」全局快捷键无法关闭,与其他软件冲突
且会拦截软件内快捷键。本 PR 复用 QA 快捷键已有的 `Option<ShortcutBinding>=None`
停用模式,给这两个 action 键加上「可清空停用」能力。
默认仍开启(Some 默认键),对老用户零行为变化,仅新增可关。
后端:
- types.rs: 内层 AppPrefs switch_style_hotkey/open_app_hotkey 改 Option;default fn
返回 Some(默认键);Wire::default 改携带 Some(缺字段=启用);from-wire 去掉
unwrap_or_else 直传 Option(None=停用不再被塌缩成默认键——这正是「无法关闭」的根因)。
- coordinator.rs: action_hotkey_binding 返回 Option;supervisor / update 加 None 反注册
分支;reset-latch 对 Option 解包。
- commands.rs: set_switch_style_hotkey/set_open_app_hotkey 接受 Option(None=停用,跳过
validate/overlap);所有 reject_*_overlap 读取处对 Option 解包(停用项不参与冲突检测)。
前端:
- types.ts/ipc.ts: switchStyleHotkey/openAppHotkey 与 setter 改 nullable。
- ShortcutsSection: 有值→录制器+「停用」按钮;停用→「启用」按钮恢复默认(仿 QA 行)。
- lib/hotkey.ts: defaultSwitchStyleShortcut/defaultOpenAppShortcut helper。
- 5 份 i18n 加 settings.shortcuts.enable/disable。
测试:默认启用、缺字段启用、None 往返为 null、显式绑定往返、overlap 拒绝(含停用项跳过)。
2026-06-04 20:38:40 +08:00
吕柏青
1d4a3adaad
feat(asr): 支持 OpenRouter 作为 ASR 提供商 ( #582 )
...
OpenRouter 的 /audio/transcriptions 与 OpenAI 路径相同、也走 Bearer,但请求体是
application/json:{model, input_audio:{data:<base64 wav>, format:"wav"}},而非 OpenAI
官方的 multipart/form-data。直接当 whisper 兼容 provider 会被 OpenRouter 拒绝。
- whisper.rs: 新增 AsrRequestFormat{Multipart,OpenRouterJson},transcribe_chunk 按格式
分发;OpenRouterJson 走 JSON+标准 base64(带 padding),不带 multipart 专属的
prompt/response_format 字段。用 with_request_format builder 避免改 new() 签名(不动
既有 4 处构造点)。
- coordinator.rs: is_whisper_compatible_provider 注册 openrouter;新增
whisper_request_format;verbose_json 对 openrouter 保持关闭;base64 膨胀 ~33%,长
录音按 30s 切分(同 zhipu)。
- 前端: ASR_PRESETS / AsrPresetId / Overview 名称映射 + 5 份 i18n 加 openrouter。
- 测试: OpenRouterJson 发 JSON body 单测 + 注册/格式断言;既有 transcribe 测试不变。
默认 model 用报告人已验证的 openai/whisper-large-v3-turbo。
新增直接依赖 base64=0.22(此前已是传递依赖,未引入新 crate)。
2026-06-04 20:19:40 +08:00
吕柏青
14c3874eb8
fix(overview): port 凭据保存后状态不刷新修复到 beta ( #573 )
...
issue #532/#573:在 Settings 填写/更新凭据但不切换提供商时,Overview 页
原有的 useEffect 不会重跑,asrConfigured 仍停留在「未配置」。
该修复曾随 #538 合入 main,但被 beta→main 合并覆盖,beta(开发主分支)上缺失,
导致用户(如 Ubuntu 24.04)配好火山引擎 ASR 后界面仍显示「未配置」。
- commands.rs: set_credential 保存/删除成功后 emit "credentials:changed"
- Overview.tsx: 监听该事件调用 refreshCredentials()(复用 credentialsRequestSeq 防竞态,
比 #538 原版裸 getCredentials() 更稳)
2026-06-04 20:07:56 +08:00
吕柏青 and Claude Opus 4.8
333ba3dd1c
feat(coding-agent): 快速 Agent 引擎 + Claude 控制台(无头 Claude Code)
...
issue #579 骨架的首个垂直切片(UCW 版):只接 Claude Code、放行 + 护栏。
后端 coding_agent/ 模块(19 单测全绿,已对真实 claude v2.1.161 验证链路):
- args: claude -p 无头流式 argv 构造
- stream: stream-json 逐行解析为 CodingAgentEvent
- guard: 高风险命令分类 + acceptEdits + deny 清单护栏 settings
- detect: 解析 claude --version / mcp list(computer use 检测口径)
- mod: tokio 异步运行器(超时 / 取消 / stderr 排空)+ git stash create 快照
- commands: detect / run_test(护栏流式)/ cancel / command_risk,注册入 lib.rs
前端 Claude 控制台(设置 → 高级):
- 检测面板 + 终端观感流式输出 + 用量;权限模式 / 工作目录 / 可执行路径
- ipc 封装 + 类型 + 5 语言 i18n;控制台测试默认 sonnet 控成本
未含(后续阶段):语音双热键 + coordinator 接线 + 面板 + prefs 持久化。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 19:52:43 +08:00
TRIP
30cf33e2b1
Merge pull request #589 from Open-Less/docs/readme-real-example
...
docs(readme): 实际效果示例换成客户回邮件用例(中英双语)
2026-06-04 19:33:36 +08:00
吕柏青
5cf015de17
docs(readme): 实际效果示例换成客户回邮件用例(中英双语)
...
把「一个实际例子 / A concrete example」从未充分测试的 SQL→ChatGPT 演示
换成经过测试的客户回邮件用例:口语输入 → 结构化清理稿,更贴合
OpenLess「只清理你的话、不替你作答」的定位,宣传与实际相符。
收束句由「回车发送」改为「粘贴给 ChatGPT/Claude 续写」,标语保持不变。
2026-06-04 19:31:15 +08:00
TRIP
2067367d83
Merge pull request #588 from ig505gi/fix-beta-reset
...
fix(macos): Beta 更新重启前重置 TCC 权限记录
2026-06-04 19:29:46 +08:00
TRIP
61f5416c73
Merge pull request #587 from Open-Less/docs/discord-community-link
...
docs(readme): 顶部加入 Discord 社区入口
2026-06-04 19:00:47 +08:00
Ian Gao
f482ac21ee
fix(macos): Beta 更新重启前重置 TCC 权限记录
2026-06-04 16:04:54 +08:00
吕柏青
ace7fe47ab
docs(readme): 顶部加入 Discord 社区入口(badge + 社区行,中英双语)
2026-06-04 13:20:32 +08:00
吕柏青
bd435b9e5e
chore(release): bump version to 1.3.6-2 (Beta) — 翻译会话参与对话感知润色( #583 ) + 快速录音提示音丢失修复( #584 ) + 正式发版自动更新 Homebrew cask( #586 )
2026-06-04 13:17:17 +08:00
TRIP
7cc8175d98
Merge pull request #586 from Open-Less/ci/auto-update-homebrew-cask
...
ci(release): 正式发版自动更新 Homebrew cask(+ 补 cask 到 1.3.5)
2026-06-04 13:08:27 +08:00
TRIP
13a0a03ab3
Merge pull request #584 from Open-Less/fix/audio-cue-missing
...
fix(audioCue): 修复快速录音时录音提示音偶尔丢失
2026-06-04 13:08:19 +08:00
TRIP
85d6ed851f
Merge pull request #583 from Open-Less/fix/polish-context-isolation
...
fix(polish): 对话感知上下文——按风格包隔离 + 翻译会话参与润色(不串味)
2026-06-04 13:08:09 +08:00
吕柏青
4c31448cb9
test(polish): 补 Case 4 单测——普通历史在翻译轮喂 final_text (@claude review)
2026-06-04 12:59:08 +08:00
吕柏青
18ffbb0e48
fix(ci): cask intel sed 锚定 sha256 行,避免误改 arch 指令 (@claude review)
...
裸 s/intel: "..."/ 会同时命中 cask 第2行 arch arm: "aarch64", intel: "x64",把 arch 的 intel 改成哈希 → Intel Mac 用户 brew 安装 404。改用 ^[[:space:]]*intel: 锚定 sha256 块行(捕获组保留缩进),并加防呆:arch 指令被破坏或 sha256 没写进去就让 job 失败。本地模拟新旧 sed 对比已验证。
2026-06-04 12:57:31 +08:00
吕柏青
6b28d42ea1
chore(cask): openless 补到当前正式版 1.3.5
...
cask 此前停在 1.3.4(自动更新一直没生效),Homebrew 用户拿不到 1.3.5。用 v1.3.5-tauri release 资产 sha256 一次性补齐。
2026-06-04 11:50:32 +08:00
吕柏青
0d35c811fe
ci(release): 正式发版后在流水线内自动更新 Homebrew cask
...
原 update-cask.yml 监听 release: published,但 Release 由 release-tauri.yml 用默认 GITHUB_TOKEN 创建,不会触发该事件(GitHub 防递归)——所以 cask 从不自动更新,需手动;且其条件 endsWith('-tauri') 连 beta 也匹配。
改为在 release-tauri.yml 内新增 needs:build 的 update-homebrew-cask job:仅正式版 tag(v*-tauri 且非 -beta-tauri),构建+建 Release 后下载 DMG 算 sha256、sed 更新 Casks/openless.rb、提交回默认分支([skip ci])。删除失效且会错配 beta 的 update-cask.yml。
2026-06-04 11:50:32 +08:00
吕柏青
bff4bd727f
feat(polish): 翻译会话参与对话感知润色(润色+翻译单次调用 + 按轮剔除译文)
...
接续上一条「按风格包隔离」,把「翻译会话直接排除出上下文」改成「保留但按需剔除」:翻译会话也参与对话连续性,又不让外语译文污染普通润色。
- 翻译改为单次 LLM 调用同时润色源文 + 翻译:polish_and_translate_or_passthrough 用合成系统提示词(翻译规则 + 追加输出润色后源文 + 两段哨兵)走现成 polish() 通道,复用对话上下文;解析失败 / 译文为空则退回专用 translate_text 拿干净译文(不丢字)。
- DictationSession 加 polish_source(serde default 兼容旧历史),存润色后的源语言文本。
- eligible_polish_context_turns 加 current_translation_active 分流:翻译历史在普通轮喂 polish_source(无则跳过=剔除译文),翻译轮喂 final_text;普通历史始终喂 final_text。
- 前后端类型同步(polishSource);补解析器 + 上下文分流单测,cargo test --lib 371 全过。
2026-06-04 11:36:35 +08:00
吕柏青
52e2e45bb2
fix(audioCue): 修复快速录音时提示音偶尔丢失
...
suspended 的 AudioContext 播放前需异步 resume。原实现用单个 playGeneration:快速点一下录音时 resume 还没完成、录音已结束(stopAudioCue 自增代号),挂起的播放被作废 → 提示音「有时没有」。
A 治本:新增 primeAudioCue(),胶囊挂载时预热 resume,让常见路径同步播放、绕开竞态。
B 兜底:拆 playSeq(新播放接管)/ stopSeq(发生过 stop)双序号 + 400ms 迟到阈值,抽出纯函数 shouldPlayDeferredCue 决策——被新播放接管→不播;停了且真迟到→不播;停了但 resume 很快(快速录音)→仍补响一声。
补 shouldPlayDeferredCue 单测(含边界);tsc --noEmit 通过。
2026-06-04 09:23:15 +08:00