From 8f593a641529e3982d2820e73fd82203b5cfb7f8 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Sat, 13 Jun 2026 22:05:04 +0800
Subject: [PATCH] Build X-ASR local validation package
---
Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/RELEASE_MANIFEST.md | 39 +++++++++
Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/SHA256SUMS.txt | 1
privatevoice.src/app.go | 2
Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/logs/xasr-2.1.30-build20260613.2201-arm64.log | 145 ++++++++++++++++++++++++++++++++++++
CHANGELOG.md | 3
privatevoice.src/frontend/src/components/settings/AboutPage.svelte | 2
privatevoice.src/build/darwin/Info.plist | 2
7 files changed, 190 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 86c2b3e..237feff 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,10 +8,11 @@
- **录音中实时字幕**:X-ASR 录音时复用现有动态浮窗显示小号实时字幕;松开热键后浮窗切到“识别中/完成”,最终文本仍按原流程粘贴到目标 App。
- **流式 session 接口**:新增 streaming engine/session 抽象,当前只由 X-ASR 使用;SenseVoice、Qwen3-ASR、Moonshine、Parakeet 行为保持不变。
- **录音增量读取**:Recorder 支持安全读取新增 PCM 样本,用于低延迟字幕,不影响最终录音样本收集。
+- **macOS 上屏安全同步**:同步正式上架线的剪贴板校验与代际保护,降低关闭“保留到剪贴板”时误粘旧内容的风险。
### 构建
-- build: `20260607.1127`
+- build: `20260613.2201`
- 说明: 本版本为 X-ASR 实时字幕与尾句修复实验候选包,不是 App Store 正式上传包。
---
diff --git a/Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/RELEASE_MANIFEST.md b/Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/RELEASE_MANIFEST.md
new file mode 100644
index 0000000..90a9f76
--- /dev/null
+++ b/Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/RELEASE_MANIFEST.md
@@ -0,0 +1,39 @@
+# PrivateVoice Dictation 2.1.30 build 20260613.2201 X-ASR Local ARM64
+
+## 验证包
+
+- 文件:`PrivateVoice Dictation-2.1.30-build20260613.2201-arm64-local.dmg`
+- 路径:`/Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/PrivateVoice Dictation-2.1.30-build20260613.2201-arm64-local.dmg`
+- SHA256:`e3256be40322182e8cf6ba8d4ff051d10f891830289090b65a18999185e5c8af`
+- 大小:约 `20M`
+
+## 版本信息
+
+- 分支:`codex/x-asr-experiment-2.1.29`
+- App 版本:`2.1.30`
+- Build:`20260613.2201`
+- Bundle ID:`com.shanghai3168.privatevoicedictation`
+- 架构:`arm64`
+- 签名:`PrivateVoice Local Code Signing`
+- 类型:本机验证 DMG,不是 App Store 上传包,不是 notarized Developer ID 正式分发包。
+
+## 本包包含
+
+- X-ASR 实时字幕与尾句保护实验分支现有功能。
+- macOS 上屏安全修复:剪贴板写入校验、paste generation 保护、恢复前复核。
+
+## 已验证
+
+- `git diff --check`:通过。
+- `plutil -lint privatevoice.src/build/darwin/Info.plist`:通过。
+- `go test ./internal/input`:通过。
+- `go test ./...`:通过;有既有 macOS 链接器版本 warning。
+- `privatevoice.src/scripts/build-local-macos.sh arm64`:通过。
+- App `codesign --verify --deep --strict`:通过。
+- DMG `hdiutil verify`:通过。
+- 主程序架构:`arm64`。
+
+## 说明
+
+- 这是给 M 系列 Mac 本机验证 X-ASR 效果的包。
+- 如果复制到其他机器,可能因为本地签名证书不受信任而需要额外处理;本轮目标是当前机器验证。
diff --git a/Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/SHA256SUMS.txt b/Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/SHA256SUMS.txt
new file mode 100644
index 0000000..6c8b67e
--- /dev/null
+++ b/Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/SHA256SUMS.txt
@@ -0,0 +1 @@
+e3256be40322182e8cf6ba8d4ff051d10f891830289090b65a18999185e5c8af /Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/PrivateVoice Dictation-2.1.30-build20260613.2201-arm64-local.dmg
diff --git a/Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/logs/xasr-2.1.30-build20260613.2201-arm64.log b/Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/logs/xasr-2.1.30-build20260613.2201-arm64.log
new file mode 100644
index 0000000..65789a3
--- /dev/null
+++ b/Release/PrivateVoice-Dictation-2.1.30-build20260613.2201-xasr-local-arm64/logs/xasr-2.1.30-build20260613.2201-arm64.log
@@ -0,0 +1,145 @@
+
+==> Preflight checks
+Using existing local signing identity: PrivateVoice Local Code Signing
+
+==> Cleaning old local build
+
+==> Building frontend
+
+> privatevoice-dictation-frontend@2.1.30 build
+> vite build
+
+vite v6.4.1 building for production...
+transforming...
+10:02:45 PM [vite-plugin-svelte] src/components/update/UpdateDialog.svelte:28:0 Elements with the 'dialog' interactive role must have a tabindex value
+https://svelte.dev/e/a11y_interactive_supports_focus
+26:
+27: <!-- svelte-ignore a11y_click_events_have_key_events -->
+28: <div class="overlay" onclick={onclose} role="dialog">
+ ^
+29: <!-- svelte-ignore a11y_click_events_have_key_events -->
+30: <div class="dialog" onclick={(e) => e.stopPropagation()} role="document">
+10:02:45 PM [vite-plugin-svelte] src/components/update/UpdateDialog.svelte:30:2 Non-interactive element `<div>` should not be assigned mouse or keyboard event listeners
+https://svelte.dev/e/a11y_no_noninteractive_element_interactions
+28: <div class="overlay" onclick={onclose} role="dialog">
+29: <!-- svelte-ignore a11y_click_events_have_key_events -->
+30: <div class="dialog" onclick={(e) => e.stopPropagation()} role="document">
+ ^
+31: <h2 class="title">{t('update.title')}</h2>
+32: <p class="version">{t('update.version', { version: info.version })}</p>
+10:02:45 PM [vite-plugin-svelte] src/components/shared/ToggleSwitch.svelte:17:0 Buttons and links should either contain text or have an `aria-label`, `aria-labelledby` or `title` attribute
+https://svelte.dev/e/a11y_consider_explicit_label
+15: </script>
+16:
+17: <button
+ ^
+18: class="toggle"
+19: class:active={checked}
+✓ 163 modules transformed.
+rendering chunks...
+computing gzip size...
+dist/index.html 0.41 kB │ gzip: 0.28 kB
+dist/assets/app-icon-Bs-pS5hx.png 400.98 kB
+dist/assets/index-xXipat_2.css 35.60 kB │ gzip: 6.04 kB
+dist/assets/index-CoSDf25U.js 144.99 kB │ gzip: 48.31 kB
+✓ built in 469ms
+
+==> Building Go binary (arm64)
+# voicesnap
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/go.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000000.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000001.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000002.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000003.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000004.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000005.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000006.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000007.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000028.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000029.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000030.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000031.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000032.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000033.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000034.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000035.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000036.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000037.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000038.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000039.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000040.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000041.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000042.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000043.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000044.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000045.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000046.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000047.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000048.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000049.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000050.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000051.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000052.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000053.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000054.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-3000549083/000055.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
+ld: warning: building for macOS-11.0, but linking with dylib '@rpath/libonnxruntime.1.24.4.dylib' which was built for newer version 14.0
+
+==> Assembling PrivateVoice Dictation.app
+
+==> Fixing rpaths
+
+==> Code signing with stable local identity
+/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app/Contents/Frameworks/libonnxruntime.1.24.4.dylib: replacing existing signature
+/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app/Contents/Frameworks/libsherpa-onnx-c-api.dylib: replacing existing signature
+/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app/Contents/MacOS/PrivateVoice Dictation: replacing existing signature
+/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app: replacing existing signature
+
+==> Verifying app signature
+--prepared:/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app/Contents/Frameworks/libsherpa-onnx-c-api.dylib
+--validated:/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app/Contents/Frameworks/libsherpa-onnx-c-api.dylib
+--prepared:/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app/Contents/Frameworks/libonnxruntime.1.24.4.dylib
+--validated:/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app/Contents/Frameworks/libonnxruntime.1.24.4.dylib
+/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app: valid on disk
+/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app: satisfies its Designated Requirement
+Executable=/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app/Contents/MacOS/PrivateVoice Dictation
+Identifier=com.shanghai3168.privatevoicedictation
+Format=app bundle with Mach-O thin (arm64)
+CodeDirectory v=20500 size=28519 flags=0x10000(runtime) hashes=880+7 location=embedded
+Signature size=1830
+Authority=PrivateVoice Local Code Signing
+Signed Time=Jun 13, 2026 at 22:02:58
+Info.plist entries=15
+TeamIdentifier=not set
+Runtime Version=26.2.0
+Sealed Resources version=2 rules=13 files=5
+Internal requirements count=1 size=116
+
+==> Creating DMG
+created: /Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation-2.1.30-build20260613.2201-arm64-local.dmg
+
+==> Signing DMG
+正在检查“Protective Master Boot Record(MBR:0)”的校验和…
+Protective Master Boot Record(MBR:0):已验证CRC32 $64FBFDFA
+正在检查“GPT Header(Primary GPT Header:1)”的校验和…
+ GPT Header(Primary GPT Header:1):已验证CRC32 $588312B5
+正在检查“GPT Partition Data(Primary GPT Table:2)”的校验和…
+GPT Partition Data(Primary GPT Table:已验证CRC32 $9BA757F6
+正在检查“(Apple_Free:3)”的校验和…
+ (Apple_Free:3):已验证CRC32 $00000000
+正在检查“disk image(Apple_APFS:4)”的校验和…
+ disk image(Apple_APFS:4):已验证CRC32 $1DF0E27C
+正在检查“(Apple_Free:5)”的校验和…
+ (Apple_Free:5):已验证CRC32 $00000000
+正在检查“GPT Partition Data(Backup GPT Table:6)”的校验和…
+GPT Partition Data(Backup GPT Table::已验证CRC32 $9BA757F6
+正在检查“GPT Header(Backup GPT Header:7)”的校验和…
+ GPT Header(Backup GPT Header:7):已验证CRC32 $50C07959
+已验证CRC32 $73A2C4E7
+hdiutil: verify: checksum of "/Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation-2.1.30-build20260613.2201-arm64-local.dmg" is VALID
+
+==> Local build complete
+ App: /Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation.app
+ DMG: /Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation-2.1.30-build20260613.2201-arm64-local.dmg
+ Compatibility DMG: /Users/ar/Projects/PrivateVoice/privatevoice.src/build/local/arm64/PrivateVoice Dictation-2.1.30-arm64-local.dmg
+ Signing identity: PrivateVoice Local Code Signing
diff --git a/privatevoice.src/app.go b/privatevoice.src/app.go
index ad5b0e4..73a8aec 100755
--- a/privatevoice.src/app.go
+++ b/privatevoice.src/app.go
@@ -29,7 +29,7 @@
const (
appVersion = "2.1.30"
- appBuild = "20260607.1127"
+ appBuild = "20260613.2201"
appDisplayVersion = appVersion + " (build " + appBuild + ")"
appName = "PrivateVoice Dictation"
diff --git a/privatevoice.src/build/darwin/Info.plist b/privatevoice.src/build/darwin/Info.plist
index 594d068..a9c5b5a 100755
--- a/privatevoice.src/build/darwin/Info.plist
+++ b/privatevoice.src/build/darwin/Info.plist
@@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>2.1.30</string>
<key>CFBundleVersion</key>
- <string>20260607.1127</string>
+ <string>20260613.2201</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.productivity</string>
<key>ITSAppUsesNonExemptEncryption</key>
diff --git a/privatevoice.src/frontend/src/components/settings/AboutPage.svelte b/privatevoice.src/frontend/src/components/settings/AboutPage.svelte
index 7d27687..cb28262 100644
--- a/privatevoice.src/frontend/src/components/settings/AboutPage.svelte
+++ b/privatevoice.src/frontend/src/components/settings/AboutPage.svelte
@@ -3,7 +3,7 @@
import { t } from '../../lib/i18n'
import AppIcon from '../shared/AppIcon.svelte'
- let version = $state('2.1.30 (build 20260607.1127)')
+ let version = $state('2.1.30 (build 20260613.2201)')
const currentYear = new Date().getFullYear().toString()
const aboutLinks = [
{ labelKey: 'about.sourceProjectLabel', urlKey: 'about.sourceUrl' },
--
Gitblit v1.9.3