sim
9a88bee5c6
feat(app): polish desktop UI, expand languages and prepare cloud sync
2026-09-09 01:13:16 +08:00
sim
4519f19c92
style(app): 统一前端与平台源码格式
2026-09-08 14:35:28 +08:00
sim
a6ed77c0d0
feat(ui): 完善设置子页与自定义风格图标
2026-09-08 14:16:24 +08:00
sim
69f454bd68
feat(ui): integrate 2.0 interface and agent work
...
Consolidate the current 2.0 sidebar, overview, settings, vocabulary editing, correction rules page, and first-launch splash with their Core and Tauri adapters. Include the accompanying source and architecture documentation updates.
Validation: npm test (build and 73 discovered test files); cargo test -p openless-core --locked; Core/Linux and Tauri rustfmt checks.
2026-09-08 11:12:05 +08:00
sim
b1370b5d40
chore(docs): 删除已无引用的火山控制台截图
...
volcengine-setup.md 重写为以 descriptor 为锚后,旧指南的 4 张控制台
截图不再被任何文档引用。
2026-09-07 14:24:16 +08:00
sim
34cab16fce
docs: 以源码为准重写 1-app 文档系统(19 篇)
...
保留目录骨架与文件名,内容全部以当前源码为依据重写:范围与版本锚点
(2.0.0-Beta.1 / crate 0.1.0 / com.openless.app)、架构分层与 Core 模块地图、
桌面验收清单(功能域→源码入口→证据)、Linux 交接 8 篇(沿用 L01-L12 登记体系,
锚点落到 settings.rs/audio.rs/ports.rs 等)、后端接口契约、Android 计划、
运营指南 5 篇(以 provider descriptor 与实际 CSP/.gitmodules 为锚)。
原过程中的计划叙述、截图与历史收口记录不再保留。
2026-09-07 13:48:29 +08:00
sim
92da4fbf9b
docs: 清理已了结的规划过程文档并同步引用
...
删除已完成/已收口任务的规划与过程记录(2.0 UX 收口、Core 2.0 计划、
PR#1019 复核与桌面复审、平台边界审计、Linux 引导知识快照、
Linux 共享后端阶段计划、供应商渠道计划、Windows sherpa 规划、
PR#711 评审截图、应用内测试计划),保留规范性文档、验收清单、
Linux 交接目录与运营指南,并修复全部引用链接。
2026-09-07 13:29:55 +08:00
sim
be1118bc2a
style(src-tauri): 应用 rustfmt 默认风格统一格式
2026-09-07 13:29:55 +08:00
sim
30e580fc37
feat(ui): Core 2.0 入口、设置与布局整理,Linux 引导与视觉改进
...
- 主页前置下一步与真实服务状态,服务卡直达对应设置;概览与热力图排布调整
- 设置按任务分类并支持搜索、焦点返回与 Escape 语义;旧 section ID 保持稳定
- AI 分区拆分语言模型/语音识别/本地模型/连接;渠道列表与表单重构,设置实底
- 本地模型管理与下载目录重排,补空态、主操作与窄屏布局
- Core 生成 provider descriptor 公开目录供浏览器预览懒加载,原生 IPC 合同不变
- Linux egui 按开始/听写/AI 服务/模型/工具/手机输入/历史/设置组织页面并加环境引导
- 五语言文案与文档(体验梳理、架构、计划收口)同步
2026-09-07 12:51:24 +08:00
Chris233
fc38edd1a3
refactor: consolidate Core 2.0 and restore cross-platform behavior ( #1019 )
...
* refactor: split Linux egui host from shared backend
* fix: keep CI contracts portable across runners
* fix(ci): preserve CRLF while removing qwen dependency
* fix(ci): regenerate target lockfile and install ripgrep
* fix(ci): gate desktop-only selection voice module
* ci: limit native build parallelism on cross-platform runners
* fix(host): expose blocking task seam to coordinator
* fix(settings): avoid macOS default hotkey collision
* docs: record cross-platform CI evidence
* ci: expose Linux validation package artifact
* ci: grant reusable Linux package permissions
* refactor: remove legacy coordinator dictation facade
* ci: skip unsupported MSI prerelease builds
* ci: install minisign only for signed Linux releases
* fix: keep test-only coordinator session helper
* refactor: move style preview diagnostics into core
* fix: import shared preferences type from core
* refactor: centralize enabled vocabulary projection
* ci: install ripgrep for Linux package gates
* test: make source contract line-ending agnostic
* fix: keep Linux desktop entry standards compliant
* docs: expose core style diagnostics contract
* ci: resolve Linux package version in app directory
* refactor: centralize ASR vocabulary priority
* fix: use shared vocabulary note constant
* refactor: keep vocabulary priority inside core
* test: retain starting-stop queue coverage
* ci: scope Linux updater URL to the current repository
* docs: close implementation and artifact evidence
* docs: record final CI artifact evidence
* fix(android): align updater plugin versions
* fix(android): pin updater crate exactly
* refactor(core): remove unused type anchor
* docs: record final artifact runs
* fix(remote-input): preserve beta status fields
* fix(tauri): finish beta host merge
* fix(asr): pass scoped operation to native qwen adapter
* fix(macos): bundle mlx metallib as a resource
* test(remote-input): update status wire contract
* feat: share Less Computer voice flow with Linux
* refactor(core): centralize host-independent runtime policy
* refactor(core): complete 2.0 backend consolidation
* fix(ci): prepare Sherpa after cache restore
* fix(macos): route native model paths through Core store
* fix(macos): use ModelStore catalog API
* fix(ci): serialize macOS native test build
* test(ci): preserve macOS cargo diagnostics
* fix(macos): release input source lock before await
* test(core): replace legacy hotkey injection gate
* test(core): move Codex sandbox contract into Core
* fix(core): close final runtime policy gaps
* fix(windows): terminate coding agent process trees
* fix(core): complete local model migration
* fix(credentials): align Core LLM model account
* fix(core): restore 1.x parity across shared backend
* fix(android): complete shared backend stubs
* fix: close cross-platform migration review gaps
* fix: complete migration lifecycles and platform compatibility
* docs: define desktop 2.0 acceptance and Linux handoff
* fix: close desktop parity and session lifecycle gaps
* fix: finish voice lifecycle and desktop feedback parity
* fix: close desktop cancellation and feedback race gaps
* fix: honor proxy settings and reject stale session effects
* fix: dispatch native cleanup on host runtimes and order events
* fix: keep optional recording effects best effort
* fix: close desktop agent model and QA lifecycle gaps
* fix: preserve desktop raw voice and QA turn ownership
* fix: finalize desktop dictation and QA feedback
2026-09-06 18:39:46 +08:00
Jimmy Lee and Chris233
42c1b31754
本地模型增加whisper相关模型的支持; 增加qwen3-asr的rust版本, 相比C版本速度更快 ( #940 )
...
* feat: add selectable local ASR backends
* fix(build): 修复本地 ASR 多平台构建与旧渠道兼容
* fix(asr): 修复 MLX 权重跨线程 stream 错误
* fix(ci): exclude MLX Qwen3 from non-macOS jobs
* fix(ci): use app-relative ASR submodule path
* fix(android): skip qwen-asr C backend
* fix(android): guard qwen-asr by target triple
* fix(ci): 修正语法错误
* fix(ci): remove invalid checkout step options
* fix(asr): harden local backend integration
* fix(asr): 处理 PR #940 审查发现(9 项)
- strip: 全局保留 symbols,macOS release profile 单独退回 debuginfo(Homebrew rustc 的 LINKEDIT 问题仅限 macOS)
- 转录超时改为驱逐引擎而非无效 cancel():spawn_blocking 解码任务无法被中止,驱逐后下次会话加载新引擎而非排队
- Turbo/Q5 共享目录模型在 is_downloaded/downloaded_bytes/delete_model 上互相认账
- MLX 临时 WAV 用 RAII guard 兜底清理;HF tree API 改 Link rel=next 游标分页(offset 被服务器静默忽略),带防御上限与 5 个单测
- Intel Mac 渠道下拉不再闪现 MLX 预设;MetalToolchainGuide 默认折叠并标注仅源码构建期要求
- qwen3-asr-rs 子模块 URL 与 gitlink 指向 Open-Less org 镜像,嵌套 mlx-c 同步改指 org(供应链 N-6)
- README/注释补充:所有平台源码构建均需递归初始化子模块(path 依赖跨 target 解析)
* fix: harden local whisper model lifecycle and downloads
* fix(asr): address PR 940 review findings
* fix(ci): add local ASR model stub to backend tests
* fix(linux): bundle and sync fcitx5 selection plugin
* fix(macos): avoid duplicate whisper test module
* fix(history): make detail sibling keys unique
* fix(ci): stub macos whisper model constant
* test(ci): avoid macOS streaming timeout race
---------
Co-authored-by: Chris233 <h-chris233@outlook.com >
2026-08-20 20:22:02 +08:00
Chris233
d961248210
fix(asr): 火山 ApiKey 模式改用官方端点,修复 45000010 ( #931 ) ( #936 )
...
* fix(asr): 火山 ApiKey 模式改用官方端点,修复 45000010 (#931 )
ApiKey 鉴权模式此前使用 wss://openspeech.bytedance.com/api/v3/plan/sauc/bigmodel_async,官方文档(docs/6561/1354869)中不存在 /plan/ 路径,导致服务端鉴权层返回 45000010 AuthenticationError(The API key or AK/SK in the request is missing or invalid)。
- 端点改为与 AppIdToken 模式一致的官方双向流式优化版端点 wss://openspeech.bytedance.com/api/v3/sauc/bigmodel_async
- 按官方鉴权表补充 X-Api-Request-Id(复用会话 connect_id)与 X-Api-Sequence(固定 -1)头
- 测试断言两模式端点一致并覆盖新增请求头
* docs(asr): 补充新版控制台 API Key 配置说明,澄清 Key 来源
- docs/volcengine-setup.md 新增「新版控制台(API Key 方式)」章节(官方链接 console.volcengine.com/speech/new/setting/apikeys)
- 设置页文案不再称「方舟 API Key」,改为「新版控制台 API Key」并在提示中给出官方创建入口(en/ja/ko/zh-CN/zh-TW 同步)
* fix(asr): use fresh request IDs for connection retries
2026-08-09 17:58:26 +08:00
b4d1317e77
feat(providers): LLM/ASR 供应商改成渠道卡片——同一家可存多把 key,排序即优先级 ( #918 )
...
* feat(providers): LLM/ASR 供应商改成渠道卡片——同一家可存多把 key,排序即优先级
原来一个供应商只能存一份配置,换 key 只能把旧的覆盖掉;想在主号/备号之间来回切,
每次都要重新粘贴。这个 PR 把「服务 → AI 提供商」从「下拉选厂商 + 一组字段」改成
一张张可命名、可排序、可开关的渠道卡片。
心智只有一条:**排序即优先级,列表里第一个启用的就是当前生效的渠道**。关掉的渠道
自动沉到末尾;后端不另存「当前选中」,避免「列表第一张是 A、实际请求打的是 B」
这种两处真相。
本 PR 只做多渠道的存储、编辑与切换,**不含失败重试与故障转移**(那是下一个 PR,
需要先把听写/润色链路里几十处隐式读 active 凭据的地方显式化)。
存储与迁移
- ChannelMeta(providerType / order / enabled / lastTest)以 serde(flatten) 嵌进
ASR、LLM 两个 entry;v1 老 payload 照常反序列化。
- providerType 与渠道 id 解耦:同一家厂商的多张卡片各有自己的 id,但 providerType
都指向同一个厂商实现。coordinator::resolve_effective_asr_provider 和 commands 里
几十处 `== PROVIDER_ID` 的比较依赖它,拿成 id 会让整个 ASR 路由失效。
- v1→v2 迁移幂等:迁移出的渠道 **id 沿用原 preset id**,不生成 uuid,老用户的 map key
一个字节都不变,重复执行结果一致。
- 迁移只在内存里做、不主动落盘:启动时写 keyring 会在 macOS 触发钥匙串 ACL 弹窗,
留给下一次真实写入顺带固化。
- clean_credentials 原本会 retain(!is_empty) 删掉空 entry —— 刚点「添加渠道」、名字
取好了还没填 key 的卡片会被静默删掉,改为「渠道卡片只能由用户显式删除」。
- ChannelMeta 手写 Default(derive 会让 enabled=false,而 write_account 用
entry().or_default() 建 entry,新写入的渠道会一出生就被禁用)。
- Windows 全新安装预置一张 Foundry 本地 ASR 卡片,保住开箱即用。
IPC
- 新增 list/create/rename/delete/set_enabled/reorder/record_test 七个命令。
- set_credential/read_credential 的 provider 作用域原本硬性拒绝 LLM 账户,补上
get/set_for_llm_provider —— 编辑列表里第 3 张 LLM 卡片必须能按 id 定位。
- validate_provider_credentials / list_provider_models 新增可选 channel_id:
卡片上的「测试连通」要测用户点的那一张,而不是当前生效的那张。
前端
- ChannelList:卡片列表、拖拽排序、开关沉底、生效中/失败标红/延迟展示。
- 添加与编辑弹窗;本地引擎与 Codex OAuth 不做预置固定卡片,和云端厂商一样从
「添加渠道」里选,只是编辑时没有 key/地址字段。
- 新手引导(Onboarding)列表为空时直接摊开添加表单,不让新用户对着空列表发呆。
- 五种语言文案齐备。
验证:cargo test --lib persistence::credentials(31 passed)、commands::(104 passed)、
npm test(含 tsc + vite build,退出码 0)、浏览器 mock 预览逐项走查四种卡片状态与两个弹窗。
设计与分期见 docs/provider-channels-plan.md。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
* fix(channels): 添加改成一步、拖拽在真机能用、卡片状态不再假装"健康"
三处都是装机自用后暴露的问题。
**添加渠道少一步。** 原来是「先建卡片、再填凭据」两步 —— 那只是实现上需要先有渠道 id
才能写凭据(凭据按 id 作用域存),不该变成用户多点一次。改成点+ 直接开一个完整弹窗,
供应商、名字、密钥、地址、模型、连接检查都在一屏里;草稿卡片在后台先建出来,用户什么
都没填就关掉时由 delete_channel_if_blank 回收,不会在列表里留空卡片。换供应商也不再
需要重建卡片,走新增的 set_channel_provider_type。
**拖拽在打包后的 app 里根本不动。** Tauri 的 webview 默认开着 dragDropEnabled,会把
HTML5 的 dragstart/drop 当成文件拖放吞掉 —— 浏览器预览里是好的,真机里是坏的,只验
前者就会漏。改用 pointer 事件手写,顺带让 Windows / Android 行为一致。
改的过程中炸出第二个:最初用 setPointerCapture,它把后续事件重定向到手柄,浏览器补发
的 click 于是落到设置弹窗的遮罩上(遮罩挂着 onClick={onClose}),**拖一下卡片整个设置
面板就关了**。改成 window 级监听不动事件目标,并在捕获阶段吞掉拖拽后紧跟的那一次 click。
**卡片状态不再假装"健康"。** 原来当前那张有绿点 + 「生效中」文字,两者都被读成"这张
能用",可它只代表排在最前面 —— 一张 key 已经失效的卡片照样排第一。优先级和健康度是两
个正交的维度,被压成了一个视觉。现在:
- 绿点与「生效中」全部去掉,当前那张只用左侧一条竖条表达位置,不带健康暗示;
- 验证按钮移到卡片上(开关左侧),**按钮自己就是结果容器**:未验过显示「验证」、
通过显示延迟数字(`284ms`,数字本身既说明通了又能比快慢)、失败显示能指导行动的短
标签(`✗ 401` 改 key / `✗ 429` 等会儿 / `✗ 超时` 查网络);
- 副行显示上次验证是多久以前,超过一天的结果褪色 —— 让"这条结论会过期"可见;
- 按钮宽度固定,避免文字变化把开关和箭头挤来挤去;
- **不做自动验证**:验证是真实 API 调用(LLM 走一次真润色、ASR 传一段静音音频),
打开设置就全部验一遍等于按卡片数烧额度,还容易撞进限流。
顺带把 mock 的 reorderChannels 改成真重排:原来是空操作,浏览器预览里松手后顺序被
listChannels 拉回原样,看着像"拖拽坏了",会误导下一个人。
另:补上此前遗漏的 rustfmt(自己编辑范围内的行)。
验证:cargo test --lib persistence::credentials(31 passed)、commands::(101 passed)、
tsc 0;浏览器侧用精确的 pointer 事件序列验了拖动跟手、松手持久化、设置面板不被误关。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
* fix(channels): 迁移时优先把「填过凭据」的渠道排第一,别让空卡片顶到最前
`active` 指向一个已不存在的 entry 是真实会发生的:前端 prefs 里的 activeAsrProvider
与凭据库里的 active.asr 是两份数据,历史上可能不同步。原来遇到这种情况纯按字母序挑一张
排第一,完全不看那张有没有填过 key —— 结果很容易把一张空卡排到最前,用户升级后打开就
看到「未配置」,而他真正配好的那张其实还在列表下面躺着。
排序优先级改为:原 active → 填过凭据的 → 字母序(兜底,保证幂等)。
同时补一个边界测试钉死底线:即使 active 指向缺失 entry,迁移也**绝不碰任何凭据** ——
所有 key 原样留在各自 entry 里,用户把想用的那张拖回第一位就能恢复。
验证:cargo test --lib persistence::credentials(33 passed,跑前已备份 preferences.json
且跑后 md5 未变)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
* docs(channels): 写明重试尚未实现,并区分代码里已有的连接层重连与渠道故障转移
排查时在代码里搜到 retry 容易误以为渠道重试做了。补两条既有行为的说明:
net.rs::send_with_retry 只对连接层失败重连同一个 endpoint(拿到任何 HTTP 响应即返回、
超时不重试),永远不会换卡片;润色失败已经会回落插入 ASR 原文,所以「全渠道失败 →
出原文」这条决策天然满足,P2 要做的是在回落前多试几张卡片。
同时写明 P0 的定位:多渠道现在的价值是存档与手动切换,排第二的卡片不会被自动用上。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
* fix(channels): 修复渠道化 Spec 缺陷——禁用语义/order 冲突/默认值回填/LocalAsr 激活
- sync_active_channels 全部禁用时清空 active,运行时不再使用已禁用渠道凭据
- create_channel 落盘前 compact_orders,消除新卡与禁用项 order 冲突
- 换供应商时仅空槽写入 preset 默认 endpoint/model(不覆盖用户已填值)
- LocalAsr 激活前确保本地引擎渠道卡存在、启用并置顶
- 更新 provider-channels-plan 状态与待确认项
* fix(channels): 修复 Omni 路由与草稿生命周期
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com >
Co-authored-by: Chris233 <h-chris233@outlook.com >
2026-08-07 23:09:41 +08:00
Chris233
5be28b1dbd
feat(asr): 支持讯飞实时语音转写(RTASR)提供商(#842) ( #894 )
...
- 新增 asr/xfyun.rs RTASR 流式客户端:signa = Base64(HmacSHA1(MD5(appid+ts), apiKey))
鉴权,1280B/40ms 分块发送,{"end": true} 收尾,seg_id 去重拼接,断连 partial 兜底,
鉴权/限流/超时错误分类可读。
- 全链路接入:dictation 主流程、QA 面板、重新转录、取消、设置页凭据预检与
"验证"探活;凭据 xfyun.app_id / xfyun.api_key 存系统凭据库,不落日志。
- 设置页新增「讯飞实时语音转写」选项(AppID + API Key),5 种语言 i18n。
- 文档:docs/xfyun-asr.md + README/README.zh/USAGE 同步。
已知限制:标准版 RTASR 无请求级热词参数(在讯飞控制台配置),语种默认中文普通话。
2026-08-03 21:37:10 +08:00
8f49971874
feat(asr): support additional Bailian speech models ( #866 )
...
* feat(asr): support more Bailian speech models
* test(asr): cover final 8k downsample phase
* fix(asr): address review findings on Bailian model routing (#866 )
- route paraformer-8k-realtime / sensevoice-8k-realtime to classic WebSocket,
matching the 8k downsample naming space in bailian.rs
- downsample 16k->8k with pairwise averaging (first-order low-pass) instead of
pure decimation to reduce aliasing; drop the lone tail sample on flush
- cap async provider validation at 120s (60s poll) instead of 660s so the
validate button cannot block for nearly 11 minutes
- join async transcript segments with a space so latin-script words do not
get glued together
* fix(asr): drop qwen3-asr-flash-filetrans and harden async polling (#866 )
- qwen3-asr-flash-filetrans only accepts public URLs per DashScope docs; it
is incompatible with the local-recording temporary OSS + oss:// path, so
reject it in protocol_for_model / routing / picker / docs instead of
shipping a model that would silently fail on real recordings
- simplify async_transcription_body / extract_async_result_url to the
single fun-asr results shape
- add bounded retry (exponential backoff, deadline-capped) to async task
polling and result download so one transient network blip does not
discard an entire recording
* docs(asr): list qwen-audio-3.0-asr-flash as a synchronous model (#866 )
Merge with beta #876 brought qwen-audio-3.0-asr-flash into the model
picker and protocol routing; keep the model reference doc in sync and
note that -streaming variants are not supported.
---------
Co-authored-by: LauraGPT <lauragpt@users.noreply.github.com >
Co-authored-by: Chris233 <h-chris233@outlook.com >
2026-08-02 18:55:03 +08:00
NarwhalChen
346942e1bb
style(ui): improve dark theme polish
...
Rework dark theme tokens, replace hardcoded dark-mode colors with theme variables, and remove the redundant overview metrics wrapper border.
2026-06-25 13:41:06 +08:00
TRIP
fbe40ab583
feat(android): 集成 #704 安卓自动更新 + 同步 PC updater 修复(#705/#708)到安卓 ( #712 )
...
合并 #704(安卓应用内自动更新 + JNI 修复)并把 PC updater 修复同步到安卓:①安卓公钥回退 6F4B5994→1DEAA803(同步#705)②installError 安装失败兜底+去 throw(同步#708)③还原被自动合并误删的桌面 logClientError。桌面机制零变更。CI 全绿 + @claude 审核通过。取代 #704 及 #694 安卓部分。
2026-06-19 13:55:53 +08:00
TRIP
0eb69fc0f4
chore: codebase cleanup + behavior-preserving refactor ( #693 )
...
Audit-driven cleanup: 6 issue fixes (#689/#686/#680/#691/#678/#612), Aura skin removal (visually-neutral), dead-code cleanup (98→87 warnings), behavior-preserving modularization (coordinator.rs 6961→3083 + LocalAsr/ + polish/ submodules), and RELEASING.md (admin-only release policy). Gates: cargo test --lib 446 passed, tsc, all-platform build + contract checks green. Supersedes #685/#687/#690/#692/#682/#681.
2026-06-16 23:22:21 +08:00
HKLHaoBin and Cursor
0fe5fbfdcf
feat(android): align release pipeline with desktop updater rules
...
Add signed release APK builds on v*-tauri tags, minisign manifests per ABI, custom Android in-app updater, and CI cargo check for aarch64-linux-android.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 19:48:07 +08:00
HKLHaoBin
1ea467a001
feat(android): port Android APK runtime onto beta
2026-06-12 18:13:12 +08:00
Ltdaaa
6402fb8b1f
docs: add aura skin implementation plan
2026-06-05 20:37:50 +08:00
Ltdaaa
09bcf6129f
docs: add aura skin redesign spec
2026-06-05 20:33:44 +08:00
weikeyi
3bfd61cf1c
feat(windows): add sherpa-onnx local ASR
2026-05-21 09:46:18 +08:00
baiqing
d1aff0f97c
Merge remote-tracking branch 'origin/main' into beta
...
# Conflicts:
# openless-all/app/package-lock.json
# openless-all/app/package.json
# openless-all/app/src-tauri/Cargo.lock
# openless-all/app/src-tauri/Cargo.toml
# openless-all/app/src-tauri/tauri.conf.json
2026-05-17 18:18:23 +08:00
baiqing
d6d1fee77e
chore(repo): 移除内部 AI 协作 / 规划 / 审计文档,仅本地保留
...
公共仓库不再发布 CLAUDE.md / AGENTS.md / 内部 audit + roadmap +
github-tracking + superpowers + windows-*-tracking 等共 45 个文件。
- 全部用 `git rm --cached`,本地仍保留以供日常协作;
- `.gitignore` 加规则防止再次被 `git add` 拉回;
- 用户 docs(volcengine-setup / tauri-csp / references / 图片素材)
以及 ISSUE_TEMPLATE / workflows / pull_request_template 仍保留发布。
密钥层面审计同步完成:未发现 API key / token / 私钥泄露,
tauri pubkey 与 GitHub OAuth client_id 均为设计上公开值。
2026-05-16 22:07:30 +08:00
TRIP
e33fc0047b
Merge pull request #450 from Open-Less/beta
...
release: 1.3.2 stable — marketplace UI gated, ASR correction upgraded
2026-05-15 23:03:04 +08:00
baiqing
883ff74cf4
docs(marketplace): add style pack marketplace planning doc
...
预留风格包市场的 HTTP API + IPC 契约 + DTO + 鉴权/缓存/安全策略。
IPC stub 未实装;后端 endpoint 选型 + 服务端工程化待定。
2026-05-14 14:59:36 +08:00
baiqing
f89fd2ed22
chore(release): merge beta for Stable 1.3.1
2026-05-14 12:58:48 +08:00
baiqing
effa12e5f1
fix(hotkey): Wayland 下用 CLI 触发录音,修复 #420
...
Wayland 协议禁止应用监听非聚焦窗口键盘事件,原 rdev 路径必然失效。
保留 X11 rdev 不动;Wayland 下走 stub HotkeyAdapter(不监听键盘),
通过 tauri-plugin-single-instance 把 `openless --toggle-dictation`
等 CLI 命令的 argv 转给主实例 coordinator,由桌面环境快捷键设置
绑定该命令实现全局触发。Settings → 录音 mount 时 invoke
is_wayland_cli_mode 拉状态,显示绑命令引导 callout
(GNOME / KDE / Hyprland / sway 四段步骤)。
新增:
- src-tauri/src/cli.rs — CLI intent 解析 + 10 个单测
- docs/issue-420-wayland-hotkey-research.md — 方案调研文档
改动:
- hotkey.rs Linux 分支:Wayland 检测命中走 WaylandCliAdapter stub
(不再硬拒绝 wayland_unsupported)
- lib.rs:single-instance 回调路由 argv → dispatch_cli_intent
- commands.rs:新增 is_wayland_cli_mode IPC command
- coordinator.rs:dictation_phase_for_cli + cli_toggle_qa_panel
暴露 CLI 入口,复用现有状态机
- Settings.tsx:WaylandHotkeyCallout 组件 + invoke pull 模型
- i18n × 5 locale:settings.recording.wayland.* 共 14 个键
macOS CGEventTap 和 Windows RegisterHotKey 路径零触碰。
2026-05-13 12:34:52 +08:00
H-Chris233
4d9b63aab3
Route qwen-asr through the organization fork
...
Keep the submodule pinned to the reviewed commit while moving the fetch URL to Open-Less/qwen-asr, then document the review checklist future upgrades must follow.\n\nConstraint: #301 identified the personal upstream submodule URL as a supply-chain risk.\nRejected: Updating the submodule commit together with the URL change | would mix provenance hardening with unreviewed upstream code changes.\nConfidence: high\nScope-risk: narrow\nDirective: Do not point .gitmodules back to antirez/qwen-asr; sync upstream into the organization fork and review the diff first.\nTested: gh repo view Open-Less/qwen-asr; git submodule update --init --recursive openless-all/app/src-tauri/vendor/qwen-asr; git diff --check; npm run build; cargo check --manifest-path src-tauri/Cargo.toml\nNot-tested: macOS INSTALL=0 ./scripts/build-mac.sh C-link verification.
2026-05-12 18:48:03 +08:00
baiqing
a74a5472b0
docs: 2026-05-10 audit + beta logic review snapshots
...
Snapshot two audit artifacts produced 2026-05-10:
- docs/audit-2026-05-10-validated.md — 21 audit items run against
the live source tree at openless-all/app/src-tauri/src/ with a
CONFIRMED / FALSE_POSITIVE / PARTIAL verdict per item plus the
exact file:line range that supports each verdict.
- docs/logic-review-2026-05-10.md — 5-path logic review of
origin/beta @ 400097ad covering startup, press/release, end-of-
session, capsule emit, and shutdown. Notable: at 400097ad the
emit_capsule fix from PR #389 was NOT yet an ancestor, so the
cpal audio-callback → AppKit/Win32 SIGTRAP risk was still live
on that snapshot (subsequent merges have addressed it; this doc
remains the dated record).
Both files are pure snapshots — no code changes here.
2026-05-10 18:13:46 +08:00
H-Chris233
717e694370
Constrain WebView loading with a minimal CSP
...
The desktop WebView no longer runs with an unexplained disabled CSP. The policy keeps scripts self-hosted, permits Tauri IPC and local Vite development connections, keeps provider/update/model networking on the Rust side, and documents the only unsafe allowance for React inline styles used by the existing pixel-aligned UI.
Constraint: Issue #226 requires csp:null to be replaced or explicitly bounded
Constraint: Provider validation, updater checks, and model downloads are Rust-side paths, not frontend fetch allowlist entries
Rejected: Keep csp:null with documentation only | weaker defense-in-depth and leaves the WebView effectively unconstrained
Confidence: high
Scope-risk: narrow
Directive: Do not add external provider domains to WebView connect-src unless a frontend fetch path is introduced
Tested: npm run build
Tested: npm run tauri -- info
Tested: cargo check --manifest-path src-tauri/Cargo.toml
2026-05-08 12:00:09 +08:00
millionart
f358260866
merge upstream main into windows local asr
2026-05-06 21:28:41 +08:00
baiqing
938c6a74b9
docs: 工程审计基线 (audit-2026-05-06.md)
...
完整工程审计报告(系统化逐项检查):
- 后端架构总评 + 5 个 P1/P2 优化点(coordinator/commands 拆分等)
- 前端 4 个 UI bug(tab 切换竞态、流式滚动打断 QA 等)
- 工程化水平评估 + 4 条改善(CI 门禁 / E2E / gitignore / 版本号)
→ 其中 3 条已在本 PR 实现(CI matrix + gitignore + bump-version 脚本)
- 多端逻辑与体验一致性表(macOS vs Windows 平台差异 vs 行为一致性)
- UI/后端 IPC 1:1 映射校验(全部命令前后端对齐 ✓)
- 改进建议汇总:P0 无;P1 5 项;P2 6 项
- 总结:项目整体健康,建议下迭代处理 coordinator 拆分 + 前端动画竞态
把这份基线纳入 git,让 main 留下 v1.2.20→v1.2.21 这一阶段的工程现状
锚点,后续审计有 baseline 对照。
2026-05-06 20:57:38 +08:00
millionart
2a03f15292
Merge remote-tracking branch 'upstream/main' into codex/windows-local-asr
...
# Conflicts:
# openless-all/app/src-tauri/Cargo.lock
# openless-all/app/src-tauri/src/commands.rs
# openless-all/app/src-tauri/src/coordinator.rs
# openless-all/app/src-tauri/src/lib.rs
2026-05-06 20:15:12 +08:00
millionart
9ebedebf7d
docs: plan Windows local ASR
2026-05-06 14:14:58 +08:00
millionart
844c1da098
docs: design Windows local ASR
2026-05-06 13:59:39 +08:00
millionart
f497cd4eb5
merge Windows TSF IME support
2026-05-03 19:24:21 +08:00
Cooper-X-Oak
f8c5337084
docs(windows): 为 issue 142 建立 capsule 占位
2026-05-02 12:04:28 +08:00
TRIP
68298d253c
Merge pull request #138 from Cooper-X-Oak/codex/auto-update-download-acceleration
...
fix(tauri): 加速自动更新下载
2026-05-02 09:51:13 +08:00
TRIP
124778036d
Merge pull request #145 from Cooper-X-Oak/codex/windows-cold-start-ui-pr
...
fix(windows): 收口 startup visible-ready 生命周期并进入评审观察
2026-05-02 09:48:13 +08:00
Cooper-X-Oak
d58c9500c6
docs(windows): add tracking docs for issue 139 and pr 140
2026-05-02 09:46:39 +08:00
TRIP
4d06f0cad2
Merge pull request #160 from Cooper-X-Oak/codex/continue-from-main
...
fix(windows): 延后剪贴板恢复并补齐插入回归覆盖
2026-05-02 09:32:45 +08:00
TRIP
cc030c8f88
Merge pull request #155 from Cooper-X-Oak/codex/issue-154-windows-dual-hotkey-pr
...
docs(windows): 跟踪双热键事件源生命周期
2026-05-02 09:30:17 +08:00
Cooper-X-Oak
e8df0cd971
docs(tracking): tighten windows insertion handoff
2026-05-02 05:42:52 +08:00
Cooper-X-Oak
4f6df56744
docs(windows): refresh pr 145 review-ready tracking summary
2026-05-02 05:25:11 +08:00
Cooper-X-Oak
229b871d27
docs(github-tracking): add dual-hotkey tracking docs
2026-05-02 05:19:11 +08:00
Cooper-X-Oak
da13e8ca37
docs(windows): add tracking docs for issue 98 and pr 145
2026-05-02 05:18:01 +08:00
Cooper-X-Oak
780a4a4483
docs(tracking): add windows clipboard restore handoff
2026-05-02 05:15:32 +08:00
Cooper-X-Oak
283cfdf9f3
test(windows): stabilize lifecycle regression coverage
2026-05-02 05:07:40 +08:00