Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
48be665
feat: add opt-in composer dictation (ZQ-77)
zqbake Aug 21, 2026
e7626ae
fix: address composer dictation review blockers
zqbake Aug 21, 2026
31f91a4
fix: preserve dictation intent and edit range
zqbake Aug 21, 2026
42a0962
docs: design desktop-integrated native input
zqbake Aug 22, 2026
e68c7bf
docs: plan native input feasibility spike
zqbake Aug 22, 2026
8e709ce
Merge remote-tracking branch 'origin/main' into zq-77-fresh-composer-…
zqbake Aug 22, 2026
3d6f1d0
build: scaffold desktop native input targets
zqbake Aug 22, 2026
b1fc397
feat: validate native input protocol envelopes
zqbake Aug 22, 2026
786f95e
feat: track session-owned input method text
zqbake Aug 22, 2026
e276d88
feat: fail closed before native input capture
zqbake Aug 22, 2026
0948fb9
feat: adapt owned text to InputMethodKit
zqbake Aug 22, 2026
cc2850e
feat: frame desktop native input bridge messages
zqbake Aug 22, 2026
10996f1
feat: authenticate native input peers
zqbake Aug 22, 2026
528820f
feat: coordinate native input source restoration
zqbake Aug 22, 2026
eb2ac41
feat: own native input bridge from desktop
zqbake Aug 22, 2026
4e271af
build: embed native input in desktop
zqbake Aug 22, 2026
98d0ec4
test: gate native input phase zero
zqbake Aug 22, 2026
73aea3a
test: keep native input gates cross-platform
zqbake Aug 22, 2026
b6479ce
feat: connect desktop native input lifecycle
zqbake Aug 22, 2026
dc372cd
fix: harden desktop native input recovery
zqbake Aug 22, 2026
a8cfa6d
fix: close native input smoke races
zqbake Aug 22, 2026
5c708ac
fix(desktop): correlate native input dev operations
zqbake Aug 23, 2026
b3bd8de
test(desktop): verify native input settings return
zqbake Aug 23, 2026
5121feb
fix(desktop): harden installed native input sessions
zqbake Aug 23, 2026
0fedd65
test(desktop): stabilize native input CI
zqbake Aug 24, 2026
ea62c63
test(desktop): synchronize native IME probe
zqbake Aug 24, 2026
1fad8d6
test(desktop): bound native fixture socket paths
zqbake Aug 24, 2026
ff03416
test(desktop): diagnose native XPC phases
zqbake Aug 24, 2026
97f0ded
Merge upstream main into ZQ-77
zqbake Aug 24, 2026
137e9a8
fix(desktop): harden native input boundaries
zqbake Aug 24, 2026
6e89aea
fix(desktop): reject opaque native text ranges
zqbake Aug 24, 2026
b0b4214
Merge upstream main into ZQ-77
zqbake Aug 24, 2026
4178d2c
fix(desktop): commit native text effects atomically
zqbake Aug 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions PRIVACY.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,22 @@ qwen-audio-agent 是本地运行的语音前台,不包含内置遥测、广告

## 本地数据

可选的 Web/TUI composer 听写使用独立 Qwen ASR 连接。partial、未提交、取消、失败
和超时内容只存在于当前进程/会话的临时内存,不进入 conversation、Memory、日志或
磁盘,也不会新增逐字听写历史。普通文本只有用户成功提交后才沿用既有会话规则;
明确的长期事实纠正属于 Memory-only 控制意图,不进入普通会话或 memory extractor,
只复用现有 Memory 精确替换、敏感过滤与元数据审计。

Desktop 的“随处输入”仍复用同一听写连接与临时内存规则。InputMethodKit 只接收
当前会话的结构化 partial/final/edit 操作和本会话自有 UTF-16 range,不读取或上传
目标应用的周边文档。IME 与瞬态 Bridge 不持有 provider key、不采音、不联网,也不
记录操作正文;目标、签名、Secure Event Input、输入源或可见状态无法确认时立即
拒绝并取消 Gateway 听写。安装状态只保留 bundle 版本/注册/启用布尔值,不新增逐字
历史。基础输入不申请 Accessibility;可选 Voice Send 仍是单独授权能力。
用户主动切换到其他输入源时,macOS 可能按系统输入法语义把当前 marked partial
结算到原目标;Qwen 随即拒绝后续操作,不向新目标写入,也不把该文字送入
conversation 或 Memory。

用户档案、长期记忆、任务状态、后台工作目录和配置默认保存在
`~/.config/qwaudio/`。API Key 等凭据不应写入仓库、对话或用户档案。卸载应用不会
自动删除该目录,避免意外丢失用户数据。
Expand Down
5 changes: 5 additions & 0 deletions desktop/electron-builder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ extraResources:
mac:
category: public.app-category.productivity
icon: desktop/build/icon.icns
extraResources:
- from: dist/native-input/QwenInputBridge
to: native-input/QwenInputBridge
- from: dist/native-input/Qwen Input.app
to: native-input/Qwen Input.app
hardenedRuntime: true
entitlements: desktop/build/entitlements.mac.plist
entitlementsInherit: desktop/build/entitlements.mac.inherit.plist
Expand Down
1,011 changes: 1,011 additions & 0 deletions desktop/native/QwenInput.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1C0AD0531C22DCB049394438"
BuildableName = "QwenInput.app"
BlueprintName = "QwenInput"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1C0AD0531C22DCB049394438"
BuildableName = "QwenInput.app"
BlueprintName = "QwenInput"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1C0AD0531C22DCB049394438"
BuildableName = "QwenInput.app"
BlueprintName = "QwenInput"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1C0AD0531C22DCB049394438"
BuildableName = "QwenInput.app"
BlueprintName = "QwenInput"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "BF79E8A04E390515CC61D962"
BuildableName = "QwenInputBridge"
BlueprintName = "QwenInputBridge"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "BF79E8A04E390515CC61D962"
BuildableName = "QwenInputBridge"
BlueprintName = "QwenInputBridge"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "BF79E8A04E390515CC61D962"
BuildableName = "QwenInputBridge"
BlueprintName = "QwenInputBridge"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "BF79E8A04E390515CC61D962"
BuildableName = "QwenInputBridge"
BlueprintName = "QwenInputBridge"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "B5383CB908DBB27A6C8ED485"
BuildableName = "QwenInputBridgeTests.xctest"
BlueprintName = "QwenInputBridgeTests"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "B5383CB908DBB27A6C8ED485"
BuildableName = "QwenInputBridgeTests.xctest"
BlueprintName = "QwenInputBridgeTests"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "B5383CB908DBB27A6C8ED485"
BuildableName = "QwenInputBridgeTests.xctest"
BlueprintName = "QwenInputBridgeTests"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<CommandLineArguments>
</CommandLineArguments>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "B5383CB908DBB27A6C8ED485"
BuildableName = "QwenInputBridgeTests.xctest"
BlueprintName = "QwenInputBridgeTests"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</MacroExpansion>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "B5383CB908DBB27A6C8ED485"
BuildableName = "QwenInputBridgeTests.xctest"
BlueprintName = "QwenInputBridgeTests"
ReferencedContainer = "container:QwenInput.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
Loading