Files
OSGKeyboard/docs/osgkeyboardversion.html
T
Rocky 39002336c0
CI / Validate manifests (push) Has been cancelled
CI / SwiftLint (push) Has been cancelled
CI / iOS / Extension (push) Has been cancelled
CI / macOS (push) Has been cancelled
feat(app): add flow diagnostics and refine interface
Improve failure recovery visibility, strengthen account-session handling, and make the cross-platform interface more consistent.
2026-08-26 14:40:06 +08:00

848 lines
44 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-Hans" data-theme="light">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>OSGKeyboard — What's New / 更新说明</title>
<meta name="robots" content="noindex">
<meta name="color-scheme" content="light dark">
<style>
:root {
--bg: #f7f7f5;
--text: #1a1a1a;
--text-secondary: #5c5c5c;
--text-tertiary: #8a8a8a;
--card: #ffffff;
--border: rgba(0, 0, 0, 0.08);
--media-border: rgba(0, 0, 0, 0.06);
--accent: #2f6fed;
--chip-bg: rgba(47, 111, 237, 0.1);
}
html[data-theme="dark"] {
--bg: #0a0a0b;
--text: #f2f2f2;
--text-secondary: #b0b0b0;
--text-tertiary: #7a7a7a;
--card: #161618;
--border: rgba(255, 255, 255, 0.1);
--media-border: rgba(255, 255, 255, 0.08);
--accent: #6b9fff;
--chip-bg: rgba(107, 159, 255, 0.16);
}
* { box-sizing: border-box; }
html, body {
margin: 0;
padding: 0;
background: var(--bg);
color: var(--text);
font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC",
"Hiragino Sans GB", "Helvetica Neue", Helvetica, Arial, sans-serif;
-webkit-text-size-adjust: 100%;
line-height: 1.5;
}
body {
/* Fixed bottom padding only — App WKWebView already lays out above the home indicator. */
padding: 20px 16px 28px;
max-width: 720px;
margin: 0 auto;
}
.page-header {
margin-bottom: 20px;
}
.page-header h1 {
margin: 0 0 6px;
font-size: 1.5rem;
font-weight: 700;
letter-spacing: -0.02em;
}
.page-header .subtitle {
margin: 0;
color: var(--text-secondary);
font-size: 0.95rem;
}
.empty {
display: none;
margin-top: 40px;
text-align: center;
color: var(--text-secondary);
font-size: 0.95rem;
}
.empty.visible { display: block; }
.version-block {
display: none;
background: var(--card);
border: 1px solid var(--border);
border-radius: 16px;
padding: 18px 16px 8px;
margin-bottom: 16px;
}
.version-block.visible { display: block; }
.version-chip {
display: inline-flex;
align-items: center;
padding: 4px 10px;
border-radius: 999px;
background: var(--chip-bg);
color: var(--accent);
font-size: 0.8rem;
font-weight: 650;
letter-spacing: 0.01em;
margin-bottom: 14px;
}
.section { margin-bottom: 16px; }
.section h2 {
margin: 0 0 8px;
font-size: 1.05rem;
font-weight: 700;
}
.group { margin-bottom: 12px; }
.group-title {
margin: 0 0 6px;
font-size: 0.95rem;
font-weight: 650;
color: var(--text);
}
ul {
margin: 0;
padding: 0 0 0 1.15em;
}
li {
margin: 0 0 6px;
color: var(--text-secondary);
font-size: 0.92rem;
}
li strong {
color: var(--text);
font-weight: 600;
}
.lang-block { display: none; }
.lang-block.visible { display: block; }
/* Inline demo media directly under a group title. */
.wn-media {
margin: 2px 0 12px;
text-align: center;
}
.wn-media video,
.wn-media img {
display: block;
width: 100%;
max-width: 260px;
height: auto;
margin: 0 auto;
border-radius: 14px;
border: 0.5px solid var(--media-border);
background: #000;
}
/* Landscape-ish clip (near-square) can sit a bit wider. */
.wn-media.wide video,
.wn-media.wide img {
max-width: 340px;
}
</style>
</head>
<body>
<header class="page-header">
<div class="lang-block" data-lang="zh">
<h1>更新说明</h1>
<p class="subtitle">本页展示当前版本及更早版本的更新内容</p>
</div>
<div class="lang-block" data-lang="en">
<h1>What's New</h1>
<p class="subtitle">Notes for this version and earlier releases</p>
</div>
</header>
<p class="empty" id="empty-zh">暂无与当前版本匹配的更新说明。</p>
<p class="empty" id="empty-en">No release notes match this app version.</p>
<!-- ========== 2.0.2 ========== -->
<article class="version-block" data-version="2.0.2">
<div class="version-chip">2.0.2</div>
<div class="lang-block" data-lang="zh">
<section class="section">
<h2>UI 与交互全面升级</h2>
<ul>
<li>iPhone 使用 iOS 26 原生 Liquid Glass 标签栏与页面过渡,切换标签时会保留各页面的导航状态</li>
<li>技能页改为更清晰的已安装与未安装列表;点按技能进入完整详情页,集中管理安装、快捷指令配置和自定义技能编辑</li>
<li>重新整理首页、账号、AI 服务和个人词库中的信息层级;缺少必要配置时,会直接说明原因并提供下一步入口</li>
</ul>
</section>
<section class="section">
<div class="group">
<h2>新增 Apple 账号登录</h2>
<div class="wn-media wide">
<img src="assets/whats-new/account-sign-in-zh.png" alt="OSGKeyboard 通过 Apple 登录账号的真实界面卡片" loading="lazy" decoding="async">
</div>
<ul>
<li>支持通过 Apple 登录创建或打开 OSG 账号,集中查看积分、邀请奖励和购买记录</li>
<li>登录后可直接通过 OSG 积分使用托管语音与 AI 服务,也可通过 App Store 购买积分包</li>
<li>本地听写和用户自备 API Key 仍可独立使用,无需登录</li>
</ul>
</div>
<div class="group">
<h2>邀请好友,双方得积分</h2>
<div class="wn-media wide">
<img src="assets/whats-new/referral-rewards-zh.png" alt="OSGKeyboard 账号中的积分余额与邀请奖励" loading="lazy" decoding="async">
</div>
<ul>
<li>登录可领取注册奖励;每成功邀请一位好友,你和好友都可以获得积分</li>
<li>邀请链接与积分余额会跟随账号保持同步</li>
</ul>
</div>
</section>
<section class="section">
<h2>新增个人专属风格</h2>
<div class="wn-media wide">
<img src="assets/whats-new/personal-style-card-zh.png" alt="润色风格页面中的生成专属风格真实界面卡片" loading="lazy" decoding="async">
</div>
<ul>
<li>可从自己的听写表达与明确修改中学习说话风格,生成专属于你的措辞和表达习惯</li>
<li>个人风格可应用于剪贴板回复,在不改变原意的前提下调整用词与节奏,让回复更像你自己</li>
<li>用于学习的文字语料仅在你主动点击生成时发送给所选 AI 服务,生成结果需要确认后才会保存和启用</li>
</ul>
</section>
<section class="section">
<h2>新增智能剪贴板技能</h2>
<ul>
<li>端侧模型与本地规则会对剪贴板内容进行基础语义识别,并从完整技能目录中智能推荐最多五个相关操作</li>
<li>可识别任务、邀约、问句、情绪和语言,推荐回复、翻译、总结、澄清、共情、商务回复或整理清单等技能</li>
<li>复制单个电话号码时可直接拨号或新建联系人;复制网页链接时可直接打开,或提取公开网页内容进行总结</li>
<li>识别和推荐过程在设备端完成;只有主动运行需要 AI 的技能时,相关内容才会发送给所选服务</li>
</ul>
</section>
<section class="section">
<h2>新增自动推荐个人热词</h2>
<div class="wn-media wide">
<img src="assets/whats-new/personal-terms-card-zh.png" alt="首页个性词库中的个人热词推荐真实界面卡片" loading="lazy" decoding="async">
</div>
<ul>
<li>根据键盘中反复输入的新词自动生成个人热词推荐,让常用名称、术语和表达更容易再次输入</li>
<li>推荐词必须由你明确确认后才会加入个人词库;本地学习不会记录完整击键内容</li>
</ul>
</section>
</div>
<div class="lang-block" data-lang="en">
<section class="section">
<h2>UI and Interaction, Rebuilt</h2>
<ul>
<li>iPhone now uses the native iOS 26 Liquid Glass tab bar and transitions while preserving each tab's navigation state</li>
<li>Skills are organized into clearer Installed and Not Installed lists; tap one to manage installation, Shortcut setup, or custom-skill editing on a dedicated detail page</li>
<li>Home, Account, AI Service, and Personal Dictionary now have a clearer hierarchy, with direct explanations and next steps when setup is incomplete</li>
</ul>
</section>
<section class="section">
<div class="group">
<h2>New Sign in with Apple</h2>
<div class="wn-media wide">
<img src="assets/whats-new/account-sign-in-en.png" alt="Real OSGKeyboard account card with Sign in with Apple" loading="lazy" decoding="async">
</div>
<ul>
<li>Use Sign in with Apple to create or open an OSG account and manage credits, referral rewards, and purchase history in one place</li>
<li>After signing in, use managed speech and AI services with OSG credits, with additional credit packs available through the App Store</li>
<li>Local dictation and user-owned API keys remain available independently, with no sign-in required</li>
</ul>
</div>
<div class="group">
<h2>Invite Friends, Earn Credits Together</h2>
<div class="wn-media wide">
<img src="assets/whats-new/referral-rewards-en.png" alt="Credit balance and referral rewards in an OSGKeyboard account" loading="lazy" decoding="async">
</div>
<ul>
<li>Sign in to receive the signup reward; for every successful referral, both you and your friend can earn credits</li>
<li>Your invitation link and credit balance stay synchronized with your account</li>
</ul>
</div>
</section>
<section class="section">
<h2>New Personal Style</h2>
<div class="wn-media wide">
<img src="assets/whats-new/personal-style-card-en.png" alt="Real Generate Your Style card on the Polish Styles page" loading="lazy" decoding="async">
</div>
<ul>
<li>Learn a personal speaking style from your dictation and explicit edits, capturing the wording and expression patterns that make your voice distinct</li>
<li>Apply that style to clipboard replies so wording and rhythm sound more like you without changing the original meaning</li>
<li>Learning text is sent to the selected AI service only when you explicitly tap Generate, and the result must be reviewed before it is saved and enabled</li>
</ul>
</section>
<section class="section">
<h2>New Smart Clipboard Skills</h2>
<ul>
<li>On-device models and local rules perform lightweight semantic recognition, then recommend up to five relevant actions from the complete skill catalog</li>
<li>Tasks, invitations, questions, sentiment, and language can surface skills such as Reply, Translate, Summarize, Clarify, Empathy, Business Reply, or Organize List</li>
<li>A single copied phone number can open calling or a prefilled new-contact form; a copied web link can open directly or be summarized from bounded public webpage content</li>
<li>Recognition and recommendation stay on device. Content is sent to the selected service only after you run a skill that requires AI</li>
</ul>
</section>
<section class="section">
<h2>New Automatic Personal-Term Suggestions</h2>
<div class="wn-media wide">
<img src="assets/whats-new/personal-terms-card-en.png" alt="Real personal-term suggestion card on Home" loading="lazy" decoding="async">
</div>
<ul>
<li>Repeated new terms from keyboard input become suggestions, making frequently used names, terminology, and expressions easier to type again</li>
<li>A suggestion joins Personal Dictionary only after your explicit confirmation; local learning does not record complete keystrokes</li>
</ul>
</section>
</div>
</article>
<!-- ========== 2.0.1 ========== -->
<!-- Consolidated into the cumulative 2.0.2 user-facing release notes. -->
<!-- ========== 2.0.0 ========== -->
<!-- Intentionally skipped in user-facing notes; key changes are included in 2.0.2. -->
<!-- ========== 1.8.0 ========== -->
<article class="version-block" data-version="1.8.0">
<div class="version-chip">1.8.0</div>
<div class="lang-block" data-lang="zh">
<section class="section">
<h2>新功能</h2>
<div class="group">
<p class="group-title">AI Agent</p>
<div class="wn-media wide">
<video src="assets/whats-new/ai-voice-assistant-zh.mp4" autoplay muted loop playsinline preload="metadata"></video>
</div>
<ul>
<li>语音听写与 AI 问答合并为全新的<strong>助手模式</strong>:轻点麦克风开始听写,长按麦克风可直接语音提问</li>
<li>新增<strong>热点与情境热词</strong>,麦克风区域会展示天气、节日、新闻、热搜等建议;点按即可向 AI 获取相关信息</li>
<li>AI 回答会实时显示在键盘中,确认后可插入当前输入框;支持的服务商可联网搜索,并在失败时自动回退</li>
<li>仅当原输入框与光标上下文仍然匹配时自动插入 AI 回答;上下文变化时会保留回答,等待用户明确插入或丢弃</li>
<li>设置 → <strong>AI Agent</strong> 可调节<strong>「回复篇幅」</strong>:简短 / 中等 / 详细</li>
</ul>
</div>
<div class="group">
<p class="group-title">剪贴板与 AI 技能</p>
<div class="wn-media wide">
<video src="assets/whats-new/clipboard-skills-zh.mp4" autoplay muted loop playsinline preload="metadata"></video>
</div>
<ul>
<li>新增<strong>剪贴板历史</strong>。在设置 → 剪贴板开启“历史记录”后,可在本机保存最近 15 条纯文本;该功能默认关闭</li>
<li>新增<strong>剪贴板建议条</strong>。可从键盘顶栏打开历史并点按插入;开启建议条后,最新复制内容会显示在键盘上方</li>
<li>复制文字后约 30 秒内,助手会显示<strong>回复、总结、翻译</strong>等快捷技能;技能支持分页浏览,并可在技能页调整顺序</li>
<li>新增<strong>技能</strong>页,最多可将 8 个技能放入键盘。内置技能可提取待办、添加日历日程、存入备忘录,或打开地图导航</li>
<li>新增<strong>自定义 AI 技能</strong>,可设置名称、图标和提示词,也可选择连接自己的 iCloud 快捷指令</li>
</ul>
</div>
<div class="group">
<p class="group-title">编辑上次输入</p>
<ul>
<li>编辑入口移至<strong>键盘右下角</strong>。点按后可口述修改要求、对比原文与编辑结果,并选择替换原文或追加内容</li>
<li>编辑只使用最近一次由 OSGKeyboard 插入且仍可验证的文字,不会读取输入框中的无关内容</li>
</ul>
</div>
</section>
<section class="section">
<h2>全新 App 界面</h2>
<ul>
<li>首页改为信息总览:使用统计、听写历史和个性词库集中显示为资料卡,点按后使用标准返回按钮进入完整列表</li>
<li>iPhone 底部导航重做为 <strong>首页 / 技能 / 风格 / 设置</strong>四栏 Liquid Glass Dock,绿色胶囊清楚标示当前页面</li>
<li>技能与润色风格统一为卡片式管理:点按选择、右上角编辑、右下角显示启用状态;技能支持像主屏幕图标一样长按拖动排序</li>
<li>设置入口重新整理,AI Agent、剪贴板、语音与文字输入等页面更容易找到,当前设置摘要直接显示在导航行右侧</li>
<li>iPad 改为侧栏 + 内容区布局;键盘横竖屏均充分利用可用宽度,并加入系统地球键、撤销、重做、复制和剪切等操作</li>
</ul>
</section>
<section class="section">
<h2>中英文输入全面升级</h2>
<ul>
<li>中英文输入均可在本机学习用户的输入习惯、候选频率和选择偏好;设置中可单独清除打字习惯,不会删除个性词库</li>
<li>拼音优化混合简拼排序,并支持 <code>zh</code><code>ch</code><code>sh</code> 两键简拼</li>
<li>英文键盘新增类 QuickType 候选栏,同时显示原词、纠错和补全;约 4 万词离线词表会结合系统词库、通讯录名称与文本替换提供建议</li>
<li>英文邻键纠错更贴合真实键位,并减少对专名、短词和全大写词的误改;拒绝纠错后会学习保留原词</li>
<li>支持叠指连打、英文双空格句号,以及根据输入框显示前往、搜索、发送、完成、下一项等回车键文案</li>
</ul>
</section>
<section class="section">
<h2>更稳定、更可控</h2>
<ul>
<li>听写、AI 回答、编辑结果和剪贴板粘贴可通过统一的撤销操作回滚</li>
<li>修复切换键盘崩溃、中文输入初始化后无法恢复、通用剪贴板导致键盘卡住,以及 AI 会话结束后麦克风不可用等问题</li>
<li>全部内置与自定义润色风格都会保留问句原意,不再把用户的问题改写成回答</li>
<li>设备端语音识别仍为默认选项;AI 使用用户自己配置的服务商与 API Key,不再提供内置 DeepSeek 回退</li>
<li>长按麦克风现用于向 AI 提问;编辑上次输入改用右下角编辑按钮。旧的长按剪贴板语音指令已由剪贴板历史和快捷技能取代</li>
<li>已安装旧中文名称“待办”或“日程”快捷指令的用户,需要从技能页重新安装 <code>OSGExtractTodos</code><code>OSGExtractEvents</code></li>
<li>已移除空白区域滑动光标及其设置开关</li>
</ul>
</section>
</div>
<div class="lang-block" data-lang="en">
<section class="section">
<h2>New Features</h2>
<div class="group">
<p class="group-title">AI Agent</p>
<div class="wn-media wide">
<video src="assets/whats-new/ai-voice-assistant-en.mp4" autoplay muted loop playsinline preload="metadata"></video>
</div>
<ul>
<li>Voice dictation and AI questions now share one <strong>Assistant</strong> mode: tap the microphone to dictate, or hold it to ask a question by voice</li>
<li>New <strong>trending and contextual hotwords</strong> surface suggestions for weather, holidays, news, trending topics, and more; tap one to ask AI about it</li>
<li>AI answers stream directly into the keyboard for review and insertion. Supported providers can search the web and fall back automatically when needed</li>
<li>AI answers insert automatically only while the original field and cursor context still match. If the context changes, the answer is retained for explicit insertion or discard</li>
<li>In Settings → <strong>AI Agent</strong>, choose <strong>Response length</strong>: Short / Medium / Detailed</li>
</ul>
</div>
<div class="group">
<p class="group-title">Clipboard and AI Skills</p>
<div class="wn-media wide">
<video src="assets/whats-new/clipboard-skills-en.mp4" autoplay muted loop playsinline preload="metadata"></video>
</div>
<ul>
<li>New <strong>Clipboard History</strong> keeps the latest 15 plain-text copies on this device when enabled in Settings → Clipboard. It is off by default</li>
<li>A new <strong>Clipboard suggestion strip</strong> lets you open history from the keyboard, insert an item, or keep the latest copy above the keyboard</li>
<li>For about 30 seconds after copying text, Assistant shows quick <strong>Reply, Summarize, Translate</strong>, and other skills. Skills support paging and can be reordered from the Skills page</li>
<li>The new <strong>Skills</strong> page lets you place up to eight skills on the keyboard. Built-in skills extract reminders, add calendar events, save to Notes, or open map navigation</li>
<li><strong>Custom AI Skills</strong> support your own name, icon, and prompt, with an optional iCloud Shortcut connection</li>
</ul>
</div>
<div class="group">
<p class="group-title">Edit Last Input</p>
<ul>
<li>Edit moves to the <strong>bottom-right keyboard button</strong>. Describe the change by voice, compare the original and edited text, then replace or append the result</li>
<li>Editing uses only the latest verifiable text inserted by OSGKeyboard and does not read unrelated field content</li>
</ul>
</div>
</section>
<section class="section">
<h2>A New App Interface</h2>
<ul>
<li>Home becomes a true overview: usage statistics, dictation history, and Personal Dictionary appear together as preview cards that open full lists with standard back navigation</li>
<li>The iPhone dock is rebuilt around four Liquid Glass destinations — <strong>Home / Skills / Styles / Settings</strong> — with a green capsule marking the current page</li>
<li>Skills and polish styles share one card-based interaction: tap to select, edit from the top-right, and see enabled status at the bottom-right; skills reorder with a Home Screen-style long-press drag</li>
<li>Settings navigation is reorganized so AI Agent, Clipboard, Speech, and Text Input are easier to find, with current summaries shown directly beside each row</li>
<li>iPad adopts a sidebar + detail layout. The keyboard fills the available portrait and landscape width and adds the system globe key, undo, redo, copy, and cut</li>
</ul>
</section>
<section class="section">
<h2>Chinese and English Typing, Rebuilt</h2>
<ul>
<li>Chinese and English typing learn candidate frequency and selection preferences locally. Typing habits can be cleared without deleting Personal Dictionary entries</li>
<li>Pinyin improves mixed abbreviations and supports two-key <code>zh</code>, <code>ch</code>, and <code>sh</code> abbreviations</li>
<li>The English keyboard adds a QuickType-style bar for the typed word, correction, and completion; an offline list of about 40,000 words works with the system lexicon, contact names, and text replacements</li>
<li>Neighbor-key correction follows the physical keyboard while avoiding unwanted changes to names, short words, and all-caps text; rejecting a correction teaches the original</li>
<li>Overlapping key presses, the English double-space period, and contextual Go / Search / Send / Done / Next Return labels make typing feel closer to the system keyboard</li>
</ul>
</section>
<section class="section">
<h2>More Stable, More Controllable</h2>
<ul>
<li>One Undo action now rolls back dictation, AI answers, edits, and clipboard pastes</li>
<li>Fixes include keyboard-switch crashes, Chinese input recovery after setup, Universal Clipboard freezes, and a microphone that could remain unavailable after AI sessions</li>
<li>Every built-in and custom polish style preserves questions instead of rewriting them as answers</li>
<li>On-device speech recognition remains the default. AI uses your configured provider and API key; the built-in DeepSeek fallback has been removed</li>
<li>Holding the microphone now asks AI, while Edit Last Input moves to the bottom-right Edit button. Clipboard History and quick skills replace the old hold-to-command clipboard flow</li>
<li>If you installed the older Chinese-named Tasks or Events Shortcuts, reinstall <code>OSGExtractTodos</code> and <code>OSGExtractEvents</code> from the Skills page</li>
<li>Blank-area cursor sliding and its Settings toggle have been removed</li>
</ul>
</section>
</div>
</article>
<!-- ========== 1.6.6 ========== -->
<article class="version-block" data-version="1.6.6">
<div class="version-chip">1.6.6</div>
<div class="lang-block" data-lang="zh">
<section class="section">
<h2>新功能</h2>
<div class="group">
<p class="group-title">全新保活流程</p>
<ul>
<li>键盘保活流程全新升级,大幅提升后台保活逻辑,大幅降低耗电量并提升稳定性</li>
</ul>
</div>
<div class="group">
<p class="group-title">新增键盘输入功能</p>
<div class="wn-media wide">
<video src="assets/whats-new/keyboard-typing.mp4" autoplay muted loop playsinline preload="metadata"></video>
</div>
<ul>
<li>新增<strong>拼音</strong><strong>英文</strong>键盘:支持全拼、微软/搜狗双拼、词组候选、可选模糊音;拼音与英文均支持自定义词库</li>
<li>键盘布局整体升级,语音 / 中文 / 英文外观统一;左侧 Logo 可跳转主 App,右侧改为输入方式切换与翻译入口</li>
<li>新增<strong>中文候选词面板</strong>,候选池更大,长词和更多备选更容易找到;多字输入时可分词选择</li>
<li>新增英文联想补全、自动纠错与候选撤销,输入更快更准</li>
<li>新增键盘防误触和误输入纠正,整体体验更接近系统键盘</li>
<li>新增<strong>按键音效与震动</strong>,以及轻 / 强震动设置</li>
<li>新增长按删除加速,改长文更高效</li>
<li>新增英文键盘智能大写:连续大写、句首自动大写</li>
<li>新增<strong>撤销上次输入</strong>按钮:麦克风旁可一键撤回最近一次听写或编辑结果</li>
<li>新增<strong>键盘偏好</strong>设置,支持记住上次使用的语音或文字界面,再次打开无需反复切换</li>
</ul>
</div>
<div class="group">
<p class="group-title">编辑上次输入</p>
<div class="wn-media wide">
<video src="assets/whats-new/edit-last-input-zh.mp4" autoplay muted loop playsinline preload="metadata"></video>
</div>
<ul>
<li>刚用 OSGKeyboard 输入过内容时,麦克风上方会提示<strong>「长按可编辑上一条」</strong></li>
<li><strong>长按</strong>麦克风进入编辑,说出想怎么改(如「改得更正式些」「结尾加一句问候」);<strong>短按</strong>仍是普通听写</li>
<li>说完<strong>再点一下</strong>结束录音,稍候即可左右滑动对比<strong>原文 / 编辑后</strong></li>
<li>确认后点<strong>应用编辑</strong>替换原文,或选择<strong>插入当前位置</strong>;右上角关闭可放弃本次编辑</li>
</ul>
</div>
<div class="group">
<p class="group-title">润色模式整体升级</p>
<div class="wn-media">
<img src="assets/whats-new/polish-styles-zh.png" alt="润色风格列表" loading="lazy">
</div>
<ul>
<li>大幅升级<strong>趣味润色</strong>(含直男癌等),风格更鲜明,同时减少事实失真</li>
<li>润色强度简化为轻度 / 重度:轻度优先保真,重度释放五种趣味风格的完整创意</li>
<li>新增<strong>同音 / 近音纠错</strong>,语音识别后的错字修复更准</li>
<li>长文本润色与翻译分段更清晰,列表结构更易读,翻译后保留段落格式</li>
</ul>
</div>
<div class="group">
<p class="group-title">应用内更新说明</p>
<ul>
<li>版本更新后自动展示更新说明;设置页版本行也可随时查看,跟随应用内语言与深浅色</li>
</ul>
</div>
<div class="group">
<p class="group-title">设置优化</p>
<ul>
<li>设置页层级与卡片布局更清晰,转写与润色入口更好找</li>
<li>简化首次设置:未完成语音配置时仍可正常打字</li>
<li>文本输入设置页的方案、模糊音与资源文案跟随应用内语言</li>
</ul>
</div>
</section>
<section class="section">
<h2>问题修复</h2>
<ul>
<li>修复润色代答问句:口述问句(如「你能听到我说话吗?」)时不再被改写成一句回答,全部风格与强度都会保留问句本身</li>
<li>修复自定义润色风格编辑偶发显示空白模板</li>
</ul>
</section>
<section class="section">
<h2>稳定性与可靠性</h2>
<ul>
<li>重构蓝牙与音频路由处理:切换蓝牙设备(耳机)后,录音恢复更可靠</li>
<li>修复录音启动 / 取消竞态,减少识别完成后卡在润色阶段的问题</li>
<li>Apple 本地识别改用降噪接口:同房间旁人说话时,更倾向听清你的近讲声音</li>
<li>为识别与润色增加明确超时与原文兜底,网络不稳时不再无限等待</li>
<li>加强主 App 与键盘的结果确认与恢复,降低结果丢失或无法上屏的概率</li>
<li>修复火山 ASR 连接问题;修复云端 ASR 配置验证误报</li>
<li>重构键盘启动流程、降低内存峰值,减少闪退与被系统终止</li>
<li>输入引擎按需加载,语音与文字切换更快、更省内存</li>
<li>未使用麦克风时,不主动拉起主 App 占用内存</li>
<li>移除冗余多步引导;优化会话未完成时的体验</li>
<li>自定义词 / 本地识别相关能力打包更完整</li>
</ul>
</section>
</div>
<div class="lang-block" data-lang="en">
<section class="section">
<h2>New Features</h2>
<div class="group">
<p class="group-title">Redesigned keep-alive flow</p>
<ul>
<li>Keyboard keep-alive is rebuilt for more reliable background continuity, lower power use, and better stability</li>
</ul>
</div>
<div class="group">
<p class="group-title">Typing keyboards</p>
<div class="wn-media wide">
<video src="assets/whats-new/keyboard-typing.mp4" autoplay muted loop playsinline preload="metadata"></video>
</div>
<ul>
<li>New <strong>Pinyin</strong> and <strong>English</strong> keyboards: full Pinyin, Microsoft/Sogou double Pinyin, phrase candidates, optional fuzzy Pinyin; both support custom dictionaries</li>
<li>Unified keyboard chrome across Voice / Chinese / English; left logo opens the main app; right side switches input mode and opens translation</li>
<li>New <strong>Chinese candidate panel</strong> with a larger pool for long phrases and alternatives; multi-character input supports segmented selection</li>
<li>English autocomplete, autocorrect, and candidate undo for faster, more accurate typing</li>
<li>Anti-mis-tap and mistype correction for a closer-to-system keyboard feel</li>
<li>New <strong>key sounds and haptics</strong>, with light / strong haptic options</li>
<li>Accelerating long-press delete for faster long-text edits</li>
<li>Smarter English capitalization: caps lock and sentence-start autocapitalization</li>
<li>New <strong>undo last input</strong> button beside the mic to roll back the latest dictation or edit result</li>
<li>New <strong>Keyboard Preferences</strong>: remember the last Voice or Typing surface so you dont keep switching</li>
</ul>
</div>
<div class="group">
<p class="group-title">Edit last input</p>
<div class="wn-media wide">
<video src="assets/whats-new/edit-last-input-en.mp4" autoplay muted loop playsinline preload="metadata"></video>
</div>
<ul>
<li>Right after you insert text with OSGKeyboard, the mic shows <strong>“Hold to edit your last input”</strong></li>
<li><strong>Long-press</strong> the mic to start editing and say how to change it (e.g. “make it more formal”, “add a greeting at the end”); a <strong>short press</strong> is still plain dictation</li>
<li><strong>Tap once more</strong> to finish, then swipe to compare <strong>Original / Edited</strong></li>
<li>Confirm to <strong>apply the edit</strong> (replace), or choose <strong>insert at cursor</strong>; close from the top-right to discard</li>
</ul>
</div>
<div class="group">
<p class="group-title">Polish upgrades</p>
<div class="wn-media">
<img src="assets/whats-new/polish-styles-en.png" alt="Polish styles list" loading="lazy">
</div>
<ul>
<li>Stronger <strong>fun polish</strong> styles (including Straight-Talk Rescue / 直男癌), with clearer voice and less factual drift</li>
<li>Intensity simplified to Light / Heavy: Light prioritizes fidelity; Heavy unlocks the full creativity of the five fun styles</li>
<li>New <strong>homophone / near-homophone correction</strong> after speech recognition</li>
<li>Clearer segmentation for long polish and translation; lists read better; translations keep paragraph structure</li>
</ul>
</div>
<div class="group">
<p class="group-title">In-app release notes</p>
<ul>
<li>Release notes appear automatically after an update, and the Settings version row opens them any time, following your in-app language and theme</li>
</ul>
</div>
<div class="group">
<p class="group-title">Settings</p>
<ul>
<li>Clearer Settings hierarchy and cards; transcription and polish are easier to find</li>
<li>Simpler first-run setup: you can type even before voice setup is finished</li>
<li>Schema, fuzzy-Pinyin, and resource strings on the Text Input settings page follow the in-app language</li>
</ul>
</div>
</section>
<section class="section">
<h2>Bug Fixes</h2>
<ul>
<li>Fixed polish answering a question: dictating a question (e.g. “Can you hear me?”) is no longer rewritten into an answer — the question is preserved across every style and intensity</li>
<li>Fixed the custom polish style editor occasionally opening a blank template</li>
</ul>
</section>
<section class="section">
<h2>Stability &amp; Reliability</h2>
<ul>
<li>Rebuilt Bluetooth / audio-route handling so recording recovers more reliably after switching headsets</li>
<li>Fixed start / cancel races that could leave the UI stuck in polish after recognition finished</li>
<li>Apple on-device recognition uses voice-processing / noise reduction so your near-talk mic is preferred over other speakers in the room</li>
<li>Explicit timeouts and original-text fallback for recognition and polish — no endless waits on flaky networks</li>
<li>Stronger host ↔ keyboard result confirmation and recovery to reduce lost or uninsertable text</li>
<li>Fixed Volcengine ASR connection issues and false cloud ASR config-validation failures</li>
<li>Rebuilt keyboard launch path with lower peak memory to reduce crashes and jetsams</li>
<li>Input engines load on demand — faster Voice ↔ Typing switches and lower memory use</li>
<li>Does not wake the host app just to hold memory when the mic isnt used</li>
<li>Removed redundant multi-step prompts; smoother experience when a session isnt finished</li>
<li>More complete packaging for custom words and on-device recognition assets</li>
</ul>
</section>
</div>
</article>
<!-- ========== 1.1.0 ========== -->
<article class="version-block" data-version="1.1.0">
<div class="version-chip">1.1.0</div>
<div class="lang-block" data-lang="zh">
<section class="section">
<h2>新功能</h2>
<ul>
<li>新增「润色风格包」:内置轻度清理、清晰结构、正式表达、日常聊天,并支持 iCloud 同步</li>
<li>新增「趣味润色风格」:直男癌拯救器、装逼指南、大厂黑话、帝吧大神、小红书集美五种润色风格</li>
<li>新增自定义润色风格功能</li>
<li>新增「画中画」保活,并作为默认风格,支持在设置中切换回灵动岛;关掉画中画即可结束会话</li>
<li>云端识别支持真流式(百炼 / 火山 / OpenAI),说话时文字会实时上屏</li>
<li>新增历史记录可按天删除(只清当天)</li>
<li>设置里对流式 ASR 供应商显示「流式识别」标签;OpenAI 云端识别默认走流式</li>
</ul>
</section>
<section class="section">
<h2>体验改进</h2>
<ul>
<li>设置页重新设计,结构更清晰</li>
<li>灵动岛保活默认改为 5 分钟(更省隐私与电量),支持多种时长设置</li>
<li>更新 iPhone 历史、词库 Tab 图标,与 Mac / iPad 统一</li>
<li>润色风格卡片与设置摘要更简洁,少装饰、少冗余状态字</li>
<li>设置、风格等相关页面统一卡片留白与圆角</li>
<li>更新权限与隐私说明</li>
</ul>
</section>
<section class="section">
<h2>问题修复</h2>
<ul>
<li>完成新手引导后不再卡在最后一页</li>
<li>删除重装后会重新出现欢迎引导</li>
<li>松手后尾音更不容易丢字;识别过短时会整句再识别一次兜底</li>
<li>按下录音时麦克风预热阶段的开头语音更不易被丢掉</li>
<li>末段识别为空时,不再把前面已经识别好的字抹掉</li>
<li>修复趣味润色在短句时的失真问题</li>
</ul>
</section>
</div>
<div class="lang-block" data-lang="en">
<section class="section">
<h2>New Features</h2>
<ul>
<li>Polish style packs: Light Cleanup, Clear Structure, Formal, and Casual Chat, with iCloud sync</li>
<li>Fun polish styles: Straight-Talk Rescue, Flex Guide, Big-Tech Buzzwords, Tieba Legend, and Xiaohongshu Vibes</li>
<li>Custom polish styles</li>
<li>Picture-in-Picture keep-alive as the default, with Dynamic Island as an option in Settings; ending PiP ends the session</li>
<li>True streaming cloud ASR (Bailian / Volcengine / OpenAI) with live on-screen text while you speak</li>
<li>Delete history by day (clear only that day)</li>
<li>Settings shows a “Streaming ASR” badge for streaming providers; OpenAI cloud ASR defaults to streaming</li>
</ul>
</section>
<section class="section">
<h2>Improvements</h2>
<ul>
<li>Redesigned Settings with a clearer structure</li>
<li>Dynamic Island keep-alive defaults to 5 minutes (more privacy- and battery-friendly), with multiple duration options</li>
<li>Updated iPhone History and Dictionary tab icons to match Mac / iPad</li>
<li>Simpler polish-style cards and Settings summaries — less decoration and fewer status words</li>
<li>Consistent card padding and corner radius across Settings and style pages</li>
<li>Updated permission and privacy copy</li>
</ul>
</section>
<section class="section">
<h2>Fixes</h2>
<ul>
<li>Onboarding no longer sticks on the last page after completion</li>
<li>Welcome onboarding shows again after delete-and-reinstall</li>
<li>Less end-of-utterance truncation on release; very short captures retry the whole phrase</li>
<li>Speech at the start of mic warm-up is less likely to be dropped</li>
<li>An empty final segment no longer wipes earlier recognized text</li>
<li>Fixed fun-polish distortion on short sentences</li>
</ul>
</section>
</div>
</article>
<script>
(function () {
function parseVersion(raw) {
if (!raw) return null;
var parts = String(raw).trim().split(".").map(function (p) {
var n = parseInt(p, 10);
return Number.isFinite(n) ? n : 0;
});
while (parts.length < 3) parts.push(0);
return parts.slice(0, 3);
}
function compareVersions(a, b) {
for (var i = 0; i < 3; i++) {
if (a[i] !== b[i]) return a[i] - b[i];
}
return 0;
}
function readParams() {
var params = new URLSearchParams(window.location.search);
var lang = (params.get("lang") || "").toLowerCase();
if (lang.indexOf("zh") === 0) lang = "zh";
else if (lang.indexOf("en") === 0) lang = "en";
else lang = (navigator.language || "").toLowerCase().indexOf("zh") === 0 ? "zh" : "en";
var theme = (params.get("theme") || "").toLowerCase();
if (theme !== "light" && theme !== "dark") {
theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
}
var version = params.get("v") || params.get("version") || "";
return { lang: lang, theme: theme, version: version };
}
var cfg = readParams();
document.documentElement.lang = cfg.lang === "zh" ? "zh-Hans" : "en";
document.documentElement.setAttribute("data-theme", cfg.theme);
document.querySelectorAll(".lang-block").forEach(function (el) {
el.classList.toggle("visible", el.getAttribute("data-lang") === cfg.lang);
});
var current = parseVersion(cfg.version);
var blocks = Array.prototype.slice.call(document.querySelectorAll(".version-block"));
var visibleCount = 0;
blocks
.map(function (el) {
return { el: el, version: parseVersion(el.getAttribute("data-version")) };
})
.filter(function (item) {
if (!item.version) return false;
// No v= → show all; otherwise only versions <= current app version.
if (!current) return true;
return compareVersions(item.version, current) <= 0;
})
.sort(function (a, b) {
return compareVersions(b.version, a.version);
})
.forEach(function (item) {
item.el.classList.add("visible");
// Re-append in newest → oldest order.
item.el.parentNode.appendChild(item.el);
visibleCount += 1;
});
var empty = document.getElementById(cfg.lang === "zh" ? "empty-zh" : "empty-en");
if (empty) empty.classList.toggle("visible", visibleCount === 0);
})();
</script>
</body>
</html>