* docs(windows): 记录独占全屏游戏下 capsule overlay / hotkey 的 OS 级限制 (#457) - coordinator.rs: 在 show_capsule_window_no_activate (Windows 路径) 上方加注释, 说明 SetWindowPos(HWND_TOPMOST) 在独占全屏 DirectX/OpenGL 应用之上失效,以及 UIPI 阻挡 hotkey 的同源现象,避免后续维护者再次尝试用户空间 workaround。 - USAGE.md: 给最终用户加 FAQ —— Minecraft 等全屏游戏下应切换到 borderless windowed fullscreen,对齐管理员权限,预先打开游戏聊天框。 此次仅文档与注释改动,不修改运行时行为。修复独占全屏 overlay 需要 DirectX overlay 注入(Discord / MSI Afterburner 路线),工程量与风险都不在 surgical 修复范围。 * feat: style pack i18n + 差量缓存 + 内置三包升级到 v2 i18n(5 个 locale 全覆盖) - 新增 style.pack.* 命名空间(~70 keys)覆盖 Style 页面所有 UI 文案。 - 扩展 marketplace.* 命名空间(~50 keys,含 myPacks/upload/oauth/state/modal/derivativeBadge/sortLiked/likedEmpty 等)。 - ja.ts / ko.ts 原本完全缺失 marketplace.* —— JP/KR 用户进风格市场会 fallback 看见中文,本次补齐。 - Style.tsx 删除 100+ 行 `isEnglish ? '...' : '...'` 三元 copy 对象,全走 t()。 - Marketplace.tsx + MarketplaceModal.tsx 把硬编码 '我赞过的'/'我的发布'/'确定上传'/'已下架'/'撤回发布' /'审核中'/'已上架'/'未通过'/'未登录'/'衍生自' 等 30+ 处全走 t(),含 statusLabel(state, t) 重构。 差量缓存(src/lib/ipc.ts + Marketplace.tsx) - list cache 从 sessionStorage 升到 localStorage,跨重启秒呈现,TTL 24h。 - 新增 detail cache:按 (id, version, updatedAt) 三元组缓存 marketplace_detail; 三元组等价于内容版本签名,version/updatedAt 任一变化即失效重拉。命中 = 0 请求。 - 自动驱逐:写入 list cache 时根据当前三元组集合 prune 不在列表里的 detail 条目 —— 满足「云端哈希被移除时本机也移除」的语义。 - 安全审计: - 包 ID 必须匹配 UUID v4 正则(防 key 注入)。 - detail.id 必须等于请求 packId(防服务端返回错位内容)。 - 单条 prompt 长度上限 200KB(防 OOM)。 - detail 条目上限 64,LRU 淘汰(防 localStorage 配额耗尽)。 - openDetail 先查本机三元组缓存,命中即渲染 + 跳过网络;未命中再走 IPC + 校验回写。 内置 style pack 升级到 v2.0(types.rs + polish.rs tests) - 「轻度润色」「清晰结构」「正式表达」三个 builtin pack 整体替换为社区维护的 PRO v2 prompt (含独立角色 + {{HOTWORDS}} + 七/八节中文序号骨架 + 高密度示例 + ASR 纠错词表)。 - default_style_system_prompt_for_mode 对这三个 mode 早返回各自的 BUILTIN_PROMPT, 跳过标准 ROLE_BLOCK + COMMON_RULES + OUTPUT_BLOCK wrapper,避免与 v2 内同名段落重复。 - StylePack literal 同步:name 保留中文短名(去掉 PRO 后缀),version → 2.0.0, description/examples/tags 同步 manifest。 - 老用户磁盘已有的 builtin pack 不会被自动覆盖(persistence migration 只填空字段, 保护用户对内置包的编辑);要应用 v2 需在「风格」页面点一次「重置」;新装用户直接拿 v2。 - polish.rs 的 4 处依赖旧 heading 的断言更新为 v2 实际锚点; common_rules_include_auto_correction_and_natural_organization 拆为 Raw(走 wrapper)+ Light/Structured/Formal(走 v2 PRO 自带 ASR 纠错段)两组。 后端服务(apic.openless.top)这次没动。 * feat: 英文翻译注入 EN 专用指引 + 修「我的发布」加载/计数/驱逐 英文翻译加专用补丁 - translate_system_prompt 检测 target_language == English(含 '美式英文' / '英文' / 'english' / 'British English' 等别名)时,在基础 prompt 末尾拼一段 EN 专用指引: · ASR 纠错优先策略(高/中/低置信度分级) · 中→英技术词规范化表(令牌→Token / 密钥→Secret Key / 应用ID→App ID / 鉴权失败→authentication failure / 调用接口→call the API …) · 模型名 / 产品名还原(克劳德→Claude、双子座→Gemini、卡布奇诺→Cappuccino …) · 自然英文要求(idiomatic、avoid Chinglish、code/URL/版本号原样保留) - 其它语言行为不变。 - 来源:社区贡献的「重写为英文」prompt,精简后避免与 base 重复。 - 新增 translate_prompt_appends_en_extras_only_for_english 单测覆盖 happy path + 别名 + 非英文。 修「我的发布」三个 bug 1. 数据拉取态:新增 myPacksLoading / myPacksError 状态机。 原行为:拉取中显示「你还没有发布过风格包」,失败只弹 toast;用户分不清"empty"和"loading"。 现行为:四态优先级 loading → error → empty → list;loading 显示「正在拉取,请稍后…」; error 单独成块带「重试」按钮(inline 比 toast 更稳定可达)。 2. 计数错位:visibleMyPacks 立即过滤 withdrawn / superseded(移除原 5 分钟可见窗口)。 原 bug:发布 1 个删 1 个后,刚下架的那个还在 5 分钟窗口内 → 计数显示 2,跟实际不符。 下架的反馈走 actionMsg toast 即可,不需要在列表里继续占位。 3. 计数源切换:'已发布 N 个'里的 N 改用 visibleMyPacks.length(active 包), 跟列表里实际看到的卡片数对得上。pending 计数同样基于 visible。 4. 顺手清理:刷新按钮在 myPacksLoading=true 时 disabled,避免并发请求; 删掉只为旧 5 分钟窗口存在的 nowTick / setInterval 状态与 effect。 i18n(5 个 locale):marketplace.myPacks 新增 loadingTitle / loadingHint / loadErrorTitle / loadErrorRetry 四个 key。 * refactor(translate): EN 目标整段切到专用 prompt(不再走 append) 上一版是「通用 base + 末尾追加 EN 专用补丁」,两段重复 / 注意力被稀释。这版改为: - target_language 命中 English 时(含 '美式英文' / '英文' / 'english' / 'British English' 别名) → translate_system_prompt 直接 return 新增的 EN_TRANSLATE_SYSTEM_PROMPT 整段,不再拼通用 base。 - 其它语言行为不变(继续走原通用 # 任务(翻译输出) base)。 新 EN_TRANSLATE_SYSTEM_PROMPT 自包含、~60 行精简版(来源:社区「重写为英文」prompt): · 角色 + 输入是 ASR 不可靠 + 任务定义(先纠错再翻译,结果直插光标) · 工作流程 6 步(不可换顺序) · ASR 纠错按高/中/低置信度分级 · 中→英技术术语规范化表(Token / Secret Key / App ID / Access Token / Endpoint / Webhook / authentication failure / call the API / quota / front-end / back-end / Claude / Gemini / Cappuccino / Coder / LongCat …) · 翻译要求:自然 idiomatic、不要 Chinglish、保持原语气、英语写法的日期数字 · 原样保留:代码标识符 / 命令 / 路径 / env vars / 布尔值 / 完整版本号 / 大写缩略语(API SDK JWT OAuth …)/ 人名地名品牌名 · 边界 case + 5 条禁止 + 输出约束 替换 translate_prompt_appends_en_extras_only_for_english 单测为 translate_prompt_swaps_to_en_dedicated_when_target_is_english:断言 - 英文目标命中 EN 专用 prompt("# 任务(中文转写 → 英文翻译)"),不再含通用 base 标题 - 非英文目标仍走通用 base - 别名 '美式英文' / '英文' / 'english' / 'British English' 都解析为英文 cargo test 269 / 0 / 0;tsc clean。 --------- Co-authored-by: baiqing <lbx12309@icloud.com>
141 lines
5.1 KiB
Markdown
141 lines
5.1 KiB
Markdown
# OpenLess 使用指南
|
||
|
||
## 安装
|
||
|
||
### macOS
|
||
|
||
1. 从 [Releases](https://github.com/appergb/openless/releases/latest) 下载 `OpenLess_<版本>_aarch64.dmg`。
|
||
2. 打开 dmg,将 OpenLess.app 拖入「应用程序」文件夹。
|
||
3. 双击启动。
|
||
|
||
### Windows
|
||
|
||
1. 从 [Releases](https://github.com/appergb/openless/releases/latest) 下载 `OpenLess_<版本>_x64-setup.exe`。
|
||
2. 运行安装程序,按提示完成安装。
|
||
3. 从开始菜单启动 OpenLess。
|
||
|
||
---
|
||
|
||
## 首次配置
|
||
|
||
### macOS 权限
|
||
|
||
首次启动后,在「系统设置 → 隐私与安全」中授予以下权限:
|
||
|
||
1. **麦克风** — 允许 OpenLess 录音。
|
||
2. **辅助功能** — 允许 OpenLess 读写当前焦点输入框。授权后须**完全退出并重新启动** OpenLess,快捷键才会生效。
|
||
|
||
### Windows 权限
|
||
|
||
1. 按系统提示授予**麦克风**权限。
|
||
2. 打开 OpenLess → 「设置 → 权限」,确认全局快捷键监听器状态显示为「已启动」。
|
||
|
||
### 填入凭据
|
||
|
||
不会配火山 ASR 的话,先看这篇图文引导:
|
||
[OpenLess 火山 ASR 配置](docs/volcengine-setup.md)
|
||
|
||
打开 OpenLess → **设置**,填入以下字段:
|
||
|
||
| 字段 | 说明 |
|
||
| --- | --- |
|
||
| 火山引擎 App ID | 语音识别服务的应用 ID |
|
||
| 火山引擎 Access Token | 语音识别访问凭据 |
|
||
| 火山引擎 Resource ID | 语音识别资源 ID |
|
||
| Ark API Key | 文本润色服务的 API Key |
|
||
| Ark Model ID | 使用的模型 ID(如 `doubao-pro-32k`) |
|
||
| Ark Endpoint | 接口地址,默认 `https://ark.cn-beijing.volces.com/api/v3/chat/completions` |
|
||
|
||
保存后设置立即生效,无需重启。
|
||
|
||
---
|
||
|
||
## 基本使用
|
||
|
||
### 开始录音
|
||
|
||
按下全局快捷键(默认 macOS 右 Option,Windows 右 Control)。
|
||
屏幕边缘会出现状态胶囊,显示「录音中」。
|
||
|
||
### 结束录音
|
||
|
||
再次按下同一快捷键。OpenLess 会:
|
||
|
||
1. 停止录音并发送音频进行转写。
|
||
2. 对转写结果按当前输出模式进行润色。
|
||
3. 将润色后的文字插入当前焦点输入框(失败时自动复制到剪贴板)。
|
||
|
||
### 取消录音
|
||
|
||
录音过程中按 `Esc`,当前录音内容会被丢弃,不做任何插入。
|
||
|
||
---
|
||
|
||
## 输出模式
|
||
|
||
在 OpenLess 主窗口的胶囊或「设置」中切换模式:
|
||
|
||
| 模式 | 说明 |
|
||
| --- | --- |
|
||
| 原文 | 直接输出转写文字,不做任何修改 |
|
||
| 轻度润色 | 修正语气词、标点、明显错字,保留原意 |
|
||
| 清晰结构(AI prompt 模式) | 把口语整理成有结构、有约束、有上下文的 prompt,适合直接喂给 ChatGPT / Claude / Cursor |
|
||
| 正式表达 | 将口语转换为正式书面语 |
|
||
|
||
---
|
||
|
||
## 词典
|
||
|
||
词典用于提高特定词汇的识别准确率(产品名、人名、专有名词等)。
|
||
|
||
1. 打开主窗口 → **词典**。
|
||
2. 点击「新建」,填入正确拼写、分类和备注。
|
||
3. 启用后,词条会作为热词注入 ASR 识别阶段,并在润色阶段辅助语义判断。
|
||
|
||
---
|
||
|
||
## 历史记录
|
||
|
||
主窗口 → **历史**,可查看所有录音记录,包括原始转写和润色结果。
|
||
|
||
---
|
||
|
||
## 更换快捷键
|
||
|
||
主窗口 → **设置 → 快捷键**,选择触发键。
|
||
macOS 支持右侧修饰键(Option / Control / Command / Shift);Windows 支持右 Control。
|
||
|
||
---
|
||
|
||
## 常见问题
|
||
|
||
**Q: 快捷键没反应?**
|
||
macOS:确认已授予辅助功能权限,且授权后重启过 OpenLess。
|
||
Windows:在「设置 → 权限」中检查监听器状态。
|
||
|
||
**Q: 识别结果为空或是占位文字?**
|
||
检查火山引擎 ASR 凭据是否填写正确。填写正确后识别才能正常工作。
|
||
|
||
**Q: 文字没有插入,只是复制到了剪贴板?**
|
||
当目标输入框不支持辅助功能写入时(如某些安全限制的应用),OpenLess 会自动回退到剪贴板复制,手动粘贴即可。
|
||
|
||
**Q: 在 Windows 玩 Minecraft 等全屏游戏时,OpenLess capsule 不弹出 / 字符无法输入?**
|
||
这是 **Windows 操作系统层面的限制**,OpenLess 应用本身无法绕过(详见 [issue #457](https://github.com/Open-Less/openless/issues/457)):
|
||
|
||
- **独占全屏(exclusive fullscreen)**:标准应用窗口(包括 OpenLess capsule)**不会绘制在独占全屏 DirectX/OpenGL 应用之上**。请把游戏切换到 **无边框窗口化全屏(Borderless Windowed Fullscreen)**。Minecraft:视频设置 → 全屏 关闭(保持窗口最大化即可)。
|
||
- **管理员权限不一致(UIPI)**:若游戏以管理员身份运行而 OpenLess 不是,Windows 阻止 OpenLess 接收游戏前台的按键,hotkey 完全不触发。让两者权限对齐(要么都以管理员运行,要么都以普通用户运行)。
|
||
- **游戏聊天框未打开**:识别字符通过模拟键盘事件落字。Minecraft 中必须先按 `T` 打开聊天框,OpenLess 的输入才会落到聊天里。
|
||
|
||
macOS 不存在独占全屏(所有"全屏"都是带 Spaces 的无边框窗口),所以此限制不适用。
|
||
|
||
**Q: 润色结果和预期不符?**
|
||
尝试切换输出模式,或在词典中添加相关专有名词。
|
||
|
||
---
|
||
|
||
## 社区与支持
|
||
|
||
欢迎通过 QQ 加入用户群,反馈问题或交流使用体验:
|
||
|
||
**QQ 群:1078960553**
|