Version: CURRENT_PROJECT_VERSION 130 -> 131 (project.yml, AGENTS.md, READMEs, docs/llms.txt). fix(flow): host-app identification now compiles in every build configuration (Debug, TestFlight, Release). The arbiter probe and HostAppIdentity were DEBUG-only, so TestFlight/App Store builds never knew the host bundle id and could not auto-return after a startflow handoff. Debug-only logging and the Home test card are unchanged. Also includes the pending work in the tree: - Home: single account/setup card surface (HomeAccountSurfacePolicy/Views) - Wide screens: voice key row and centred mic placement, iPhone Duo layout - Keyboard: clipboard skill ranking and AI skill layout updates - Debug: account session handoff to the Simulator (+ import script) - Docs: portfolio assets, privacy policy URL, site/README refresh
937 lines
50 KiB
HTML
937 lines
50 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);
|
||
--media-border: rgba(0, 0, 0, 0.06);
|
||
/* Brand green — matches OSGColor.brandAccent (#3AA05A) in the app. */
|
||
--accent: #3aa05a;
|
||
--chip-bg: rgba(58, 160, 90, 0.1);
|
||
--card-shadow: 0 1px 2px rgba(0, 0, 0, 0.04), 0 10px 26px rgba(0, 0, 0, 0.05);
|
||
}
|
||
|
||
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);
|
||
/* Brightened brand green for legibility on dark surfaces. */
|
||
--accent: #57c47d;
|
||
--chip-bg: rgba(87, 196, 125, 0.16);
|
||
--card-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 12px 30px rgba(0, 0, 0, 0.35);
|
||
}
|
||
|
||
* { 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;
|
||
/* Faint directional long shadow — mirrors the app's card depth. */
|
||
box-shadow: var(--card-shadow);
|
||
}
|
||
|
||
.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);
|
||
}
|
||
|
||
/* Screenshots and demo clips are light captures — keep a light backing in
|
||
both themes so a not-yet-painted frame never disappears against the dark
|
||
page background (e.g. before autoplay starts). */
|
||
.wn-media img { background: #ffffff; }
|
||
.wn-media video { background: #ffffff; }
|
||
|
||
/* 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.1.6 ========== -->
|
||
<article class="version-block" data-version="2.1.6">
|
||
<div class="version-chip">2.1.6</div>
|
||
|
||
<div class="lang-block" data-lang="zh">
|
||
<section class="section">
|
||
<ul>
|
||
<li><strong>适配 iPhone Duo</strong>:展开内屏自动使用宽屏布局,合上后切回手机布局</li>
|
||
<li><strong>优化横屏键盘</strong>:iPad 与 iPhone Duo 的语音键盘底部改为系统风格按键行,iPhone 横放时键盘更矮</li>
|
||
<li><strong>优化首页顶部</strong>:最多只显示一张卡片,缺少权限、未登录或积分用完时直接给出下一步入口</li>
|
||
<li><strong>新增剪贴板 AI 技能</strong>:其他语言的内容可一键“优化”,当前语言的内容可“翻译 XX”译成目标语言</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="lang-block" data-lang="en">
|
||
<section class="section">
|
||
<ul>
|
||
<li><strong>iPhone Duo support</strong>: the unfolded inner display uses the wide layout automatically and returns to the phone layout when folded</li>
|
||
<li><strong>Better landscape keyboards</strong>: on iPad and iPhone Duo the voice keyboard ends with a row of system-style keys, and the keyboard is shorter on an iPhone held sideways</li>
|
||
<li><strong>Cleaner top of Home</strong>: at most one card is shown, with a clear next step when permissions are missing, you are signed out, or credits run out</li>
|
||
<li><strong>New clipboard AI skills</strong>: “Polish” for text in other languages, and “Translate to XX” for text in your current language</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
|
||
<!-- ========== 2.1.0 ========== -->
|
||
<!-- Cumulative notes for users upgrading from 1.8.0: 2.0.x were skipped as -->
|
||
<!-- public releases, so all of their user-facing changes ship here. -->
|
||
<article class="version-block" data-version="2.1.0">
|
||
<div class="version-chip">2.1.0</div>
|
||
|
||
<div class="lang-block" data-lang="zh">
|
||
<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>全新 App 界面与视觉</h2>
|
||
<ul>
|
||
<li>iPhone 使用 iOS 26 原生 Liquid Glass 标签栏与页面过渡,切换标签时保留各页面的导航状态</li>
|
||
<li>技能页改为更清晰的已安装与未安装列表,点按进入详情页,集中管理安装、快捷指令配置和自定义技能编辑</li>
|
||
<li>重新整理首页、账号、AI 服务与个人词库的信息层级;缺少必要配置时会直接说明原因并提供下一步入口</li>
|
||
<li>卡片统一加入淡雅的定向长投影;系统弹窗与模态操作改用自适应黑白配色,不再继承绿色,主次更清晰</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>首页焕新:月度用量日历与积分</h2>
|
||
<div class="wn-media wide">
|
||
<img src="assets/whats-new/monthly-usage-zh.png" alt="首页当月听写字数日历卡片" loading="lazy" decoding="async">
|
||
</div>
|
||
<ul>
|
||
<li>首页与 Mac 总览用<strong>当月日历</strong>替换近七天图表,日期圆点的深浅代表当天听写字数,一眼看清整月节奏</li>
|
||
<li>积分与邀请卡片从设置迁到首页统计上方,登录前也能看清免费注册与邀请奖励</li>
|
||
<li>可直接从「听写字数」和「个性词库」卡片进入历史记录或个性词库</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>智能剪贴板技能与智能回复</h2>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/smart-reply-zh.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>端侧模型与本地规则会对剪贴板内容进行语义识别,并从完整技能目录中智能推荐最多五个相关操作(回复、翻译、总结、澄清、共情、商务回复、整理清单等)</li>
|
||
<li>对可回复的消息,<strong>「回复」</strong>会给出<strong>普通 / 正式 / 轻松趣味</strong>三种个性化候选;键盘分别学习你的听写与回复偏好,让候选越来越像你</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-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>
|
||
<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>在中文输入习惯之外,也会学习你反复使用的<strong>英文生词</strong>并推荐加入个人词库;中英文推荐词都需你确认后才会加入</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>问题修复与其他</h2>
|
||
<ul>
|
||
<li>Apple 账号登录状态更可靠:令牌轮换更稳,已撤销的登录不会被恢复,切换 App 后中英文候选词可靠恢复</li>
|
||
<li>推荐热词按真实来源标记,移除词库列表中的内部使用次数,iPhone 确认弹窗指向所选热词</li>
|
||
<li>移除自愿打赏,积分包成为唯一的 App 内购买项</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="lang-block" data-lang="en">
|
||
<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>A New App Interface and Visual Language</h2>
|
||
<ul>
|
||
<li>iPhone 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 have a clearer hierarchy, with direct explanations and next steps when setup is incomplete</li>
|
||
<li>Card surfaces gain a faint directional long shadow; system dialogs and modal actions use adaptive black or white instead of the green accent</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Home, Refreshed: Monthly Usage Calendar and Credits</h2>
|
||
<div class="wn-media wide">
|
||
<img src="assets/whats-new/monthly-usage-en.png" alt="Home monthly dictation-characters calendar card" loading="lazy" decoding="async">
|
||
</div>
|
||
<ul>
|
||
<li>Home and the Mac Dashboard replace the seven-day chart with a full <strong>current-month calendar</strong> whose date-circle opacity reflects each day's dictation characters</li>
|
||
<li>The credits and invitation card moves from Settings to Home above the usage metrics, explaining free signup and referral rewards before you sign in</li>
|
||
<li>Open History or Personal Dictionary directly from their metric cards</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Smart Clipboard Skills and Replies</h2>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/smart-reply-en.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>On-device models and local rules recognize clipboard content and recommend up to five relevant actions from the full catalog (Reply, Translate, Summarize, Clarify, Empathy, Business Reply, Organize List, and more)</li>
|
||
<li>For a message worth answering, <strong>Reply</strong> offers <strong>Ordinary / Formal / Playful</strong> personalized choices; the keyboard learns your dictation and reply preferences separately so they sound more like you</li>
|
||
<li>For invitations, tasks, blessings, clarifications, and empathy — where intent must not be guessed — it offers three fixed, clearly labeled positions</li>
|
||
<li>A 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 when a skill needs AI, and choice feedback stays on this device</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>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 that make your voice distinct</li>
|
||
<li>Apply it 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 tap Generate, and the result is saved only after you review it</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Smarter Typing</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; local learning does not record complete keystrokes</li>
|
||
<li>Beyond Chinese typing habits, the keyboard learns rare <strong>English words</strong> you use repeatedly and suggests them; suggestions in either language are added only after you confirm</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Fixes and Other Changes</h2>
|
||
<ul>
|
||
<li>Apple sign-in is more durable: steadier token rotation, a revoked login is no longer restored, and Chinese/English candidates recover reliably after switching apps</li>
|
||
<li>Hotword recommendations are labeled by their real source, internal usage counts are removed from dictionary rows, and the iPhone confirmation popover points at the selected hotword</li>
|
||
<li>The voluntary tip purchase is removed; credit packs are now the only in-app purchase</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
|
||
<!-- ========== 2.0.0 – 2.0.3 ========== -->
|
||
<!-- Skipped as public releases; all user-facing changes are folded into 2.1.0 above. -->
|
||
|
||
<!-- ========== 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>
|