e5a83843db
Add resilient usage analytics, OOBE gateway flows, clipboard semantic ranking, purchase recovery, style learning, and managed current-information search.
789 lines
39 KiB
HTML
789 lines
39 KiB
HTML
<!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);
|
||
--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);
|
||
--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: 1px solid var(--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.1 ========== -->
|
||
<article class="version-block" data-version="2.0.1">
|
||
<div class="version-chip">2.0.1</div>
|
||
|
||
<div class="lang-block" data-lang="zh">
|
||
<section class="section">
|
||
<h2>更安全、更顺畅的 AI 体验</h2>
|
||
<ul>
|
||
<li>未登录、退出账号或会话过期时,所有 AI 功能会自动切回<strong>用户自备 API Key</strong>,并阻止缓存的托管 Grant 继续消耗积分</li>
|
||
<li>首次使用流程更加精简,可依次体验听写、翻译、智能回复和语音提问,再决定是否登录</li>
|
||
<li>官方 AI 技能目录可独立更新,无需等待新的 App 版本</li>
|
||
<li>修复后台挂起时的埋点数据库锁、重复显示购买成功提示,以及账号和设置刷新不稳定的问题</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="lang-block" data-lang="en">
|
||
<section class="section">
|
||
<h2>Safer, Smoother AI</h2>
|
||
<ul>
|
||
<li>When signed out or after a session expires, every AI feature now returns to <strong>your own API key</strong> and cached managed grants can no longer consume credits</li>
|
||
<li>The shorter first-run guide demonstrates dictation, translation, smart reply, and voice questions before the optional sign-in step</li>
|
||
<li>The official AI skill catalog can refresh without waiting for a new App Store release</li>
|
||
<li>Fixes analytics database locks during suspension, repeated purchase confirmations, and unreliable account or settings refreshes</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
|
||
<!-- ========== 2.0.0 ========== -->
|
||
<article class="version-block" data-version="2.0.0">
|
||
<div class="version-chip">2.0.0</div>
|
||
|
||
<div class="lang-block" data-lang="zh">
|
||
<section class="section">
|
||
<h2>全新积分体验</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">邀请好友,双方得积分</p>
|
||
<div class="wn-media wide">
|
||
<img src="assets/whats-new/referral-rewards-zh.png" alt="OSGKeyboard 设置中的邀请奖励卡片" loading="lazy" decoding="async">
|
||
</div>
|
||
<ul>
|
||
<li>每成功邀请一位好友,你和好友各获得<strong>1000 积分</strong></li>
|
||
<li>可在设置的账号区域分享邀请链接</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">OSG 积分模式</p>
|
||
<div class="wn-media wide">
|
||
<img src="assets/whats-new/osg-credits-zh.png" alt="OSGKeyboard AI 服务中已选择使用积分" loading="lazy" decoding="async">
|
||
</div>
|
||
<ul>
|
||
<li>使用 Apple 登录后,无需配置自己的 API Key,即可使用托管语音与 AI 服务</li>
|
||
<li>支持通过 App Store 购买积分包,积分余额自动同步</li>
|
||
<li>本地听写和自备 API Key 仍可独立使用,无需登录</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="lang-block" data-lang="en">
|
||
<section class="section">
|
||
<h2>A New Credits Experience</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Invite Friends, Earn Credits Together</p>
|
||
<div class="wn-media wide">
|
||
<img src="assets/whats-new/referral-rewards-en.png" alt="Referral rewards card in OSGKeyboard Settings" loading="lazy" decoding="async">
|
||
</div>
|
||
<ul>
|
||
<li>For every successful referral, you and your friend each receive <strong>1,000 credits</strong></li>
|
||
<li>Share your invitation link from the Account section in Settings</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">OSG Credits Mode</p>
|
||
<div class="wn-media wide">
|
||
<img src="assets/whats-new/osg-credits-en.png" alt="Use Credits selected in OSGKeyboard AI Service" loading="lazy" decoding="async">
|
||
</div>
|
||
<ul>
|
||
<li>Sign in with Apple to use managed speech and AI services without configuring your own API key</li>
|
||
<li>Purchase credit packs through the App Store and keep your balance synchronized automatically</li>
|
||
<li>Local dictation and user-owned API keys remain available independently, with no sign-in required</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
|
||
<!-- ========== 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 don’t 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 & 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 isn’t used</li>
|
||
<li>Removed redundant multi-step prompts; smoother experience when a session isn’t 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>
|