Repository navigation
feat(cli): add audio bridge for attachments #8332
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from 4 commits
Commits
Show all changes
95 commits
Select commit
Hold shift + click to select a range
ae8a8d7
feat(cli): add audio bridge for attachments
DragonnZhang 5a007e5
fix(cli): address audio bridge review feedback (#8332)
411007f
Merge upstream/main into dragon/audio-bridge
DragonnZhang 31489f6
fix(cli): harden audio bridge contracts
DragonnZhang 2bf04b2
fix(cli): preserve audio bridge abort semantics
DragonnZhang b3aeb24
test(cli): cover audio bridge guard paths
DragonnZhang 17c3eec
test(cli): pin audio bridge skip and text-only guard branches (#8332)
qwen-code-ci-bot 544258b
Merge branch 'dragon/audio-bridge' of https://github.com/DragonnZhang…
qwen-code-dev-bot 753b9e6
fix(cli): address audio bridge review feedback (#8332)
b141afc
test(cli): cover audio and vision bridge composition
DragonnZhang 28ff0e0
test(cli): strengthen audio bridge review assertions (#8332)
aeab4fe
Merge branch 'dragon/audio-bridge' of https://github.com/DragonnZhang…
qwen-code-dev-bot 48c90dc
test(cli): pin audio bridge injection-defense label (#8332)
6b84b25
fix(cli): state audio attachment limit in overflow note (#8332)
ed7bc1c
Merge branch 'main' into dragon/audio-bridge
qwen-code-dev-bot 6937de4
Merge branch 'main' into dragon/audio-bridge
wenshao 64dbfcf
Merge branch 'main' into dragon/audio-bridge
qwen-code-dev-bot 15ce5f4
fix audio handling for model overrides
DragonnZhang ab14e5d
fix(cli): harden audio bridge fail-closed paths (#8332)
qwen-code-dev-bot b9ed4fd
fix(core): bound bridge audio reads
DragonnZhang 3cda2d5
refactor(core): share inline media limit
DragonnZhang 811b64c
fix(cli): honor audio target capabilities
DragonnZhang 5bcf6d3
chore: merge main to resolve conflicts
DragonnZhang a7f855e
fix(cli): preserve direct ACP audio blocks for the audio bridge (#8332)
DragonnZhang ce34a75
Merge branch 'dragon/audio-bridge' of https://github.com/DragonnZhang…
qwen-code-dev-bot e4b9a69
Merge branch 'main' into dragon/audio-bridge
qwen-code-dev-bot 9a3e34f
fix(cli): close audio bridge size, routing, and guard gaps (#8332)
qwen-code-dev-bot 2e1d7dc
fix(cli): decode RFC 6052 NAT64 addresses safely
DragonnZhang 2ba71fb
fix(cli): clamp spoofed ACP audio payloads
DragonnZhang 76d1aa8
fix(cli): preserve audio route during vision bridging
DragonnZhang 0fd885f
chore: merge main to resolve conflicts
DragonnZhang fb0e109
fix(cli): preserve audio across vision routing
DragonnZhang 88656cb
test: expose audio bridge limit in core mock
DragonnZhang b7b8332
fix(cli): tighten audio override handling
DragonnZhang e582f1a
fix(cli): honor audio route capabilities
DragonnZhang e374028
fix(cli): preserve valid transcript unicode
DragonnZhang 430e023
merge: sync upstream main
DragonnZhang 6316689
merge: sync upstream main
DragonnZhang 40fdf3a
fix(acp): report unavailable audio routes
DragonnZhang 6ca977c
fix(cli): fail closed on unresolved audio routes
DragonnZhang 36e1847
fix(cli): rebridge drained images after route fallback
DragonnZhang 789134b
fix(cli): keep failed media routes sticky
DragonnZhang 5ba2b44
fix(cli): reconcile media with final model route
DragonnZhang b8867ac
fix(cli): keep media fallback on primary route
DragonnZhang 15b7f1a
fix(cli): reconcile media across model routes
DragonnZhang 68126df
fix(cli): preserve media across route fallback
DragonnZhang af781cf
fix(cli): recover audio after route resolution failures
DragonnZhang 99532e6
Merge upstream main into audio bridge
DragonnZhang a9d0975
Merge remote-tracking branch 'origin/main' into dragon/audio-bridge
DragonnZhang c7d7cf6
fix(cli): address media-routing review criticals
DragonnZhang 0e330b2
Merge remote-tracking branch 'origin/main' into dragon/audio-bridge
DragonnZhang 94483f3
Merge remote-tracking branch 'origin/main' into tmp-merge-8332
DragonnZhang 4e38d79
fix(cli): keep media intact through aborts and bridge failures, clear…
DragonnZhang e35b13b
fix(cli): keep media intact through mid-bridge aborts and route resol…
DragonnZhang f0042dc
fix(cli): keep drained audio retryable and scope exact-route marker t…
DragonnZhang 534c119
test(cli): give marker-scoping regression tests production-faithful p…
DragonnZhang 596c616
fix(cli): deliver failed drained steers once and clamp resolution-fai…
DragonnZhang 40b037f
Merge remote-tracking branch 'origin/main' into pr-8332
DragonnZhang 21a0aab
fix(cli): keep steer recovery single-channel and capability-check ove…
DragonnZhang 8587295
test(cli): cover the accept-settled recovery channel for failed drain…
DragonnZhang ed5afd6
fix(cli): capture pristine images for retry and fail-close them on abort
DragonnZhang e8e2391
Merge remote-tracking branch 'origin/main' into pr-8332
DragonnZhang 81e1549
fix(cli): keep media-routed continuations on the drain-time route and…
DragonnZhang 75a74c9
Merge remote-tracking branch 'origin/main' into pr-8332
DragonnZhang e5b375f
fix(cli): align restored ask_user_question continuation with the mode…
DragonnZhang ba56d83
fix(cli): fail-close nested tool-result media under full-turn selecto…
DragonnZhang 68c0295
fix(cli): keep media fail-closes retryable, exact-routed, and lossles…
DragonnZhang 1911ef0
Merge remote-tracking branch 'origin/main' into pr-8332
DragonnZhang 5709c7d
fix(cli): keep routed media case-insensitive, clamped, probed, and ex…
DragonnZhang 397a54c
Merge remote-tracking branch 'origin/main' into pr-8332
DragonnZhang 91fbcf7
fix(cli): preserve structured tool output when fail-closing nested media
DragonnZhang 8e64e5c
Merge remote-tracking branch 'origin/main' into pr-8332
DragonnZhang 4f270ad
fix(core): sink audio bridge byte limit into utils leaf layer
DragonnZhang 89c1fa2
fix(cli): gate headless tool-result media, preserve verbatim response…
DragonnZhang 96fe03e
fix(cli): recover accepted steers on send failure; fail-closed media …
DragonnZhang ba76096
fix(cli): settle-aware steer recovery; model-facing marker for withhe…
DragonnZhang 2f432a4
fix(cli): police unstamped overrides and keep drain media fail-closed…
DragonnZhang 325dc65
Merge remote-tracking branch 'origin/main' into pr-8332
DragonnZhang cb7f361
fix(cli): address R49 review — stamp core-driven drains, recover stee…
DragonnZhang 61a5983
Merge remote-tracking branch 'upstream/main' into dragon/audio-bridge
DragonnZhang 02897f9
fix(cli): widen the retry gate fallback member so mediaRouted access …
DragonnZhang 58fd18f
fix(cli): close the R49 media-gate holes (foreign MIME, headless stam…
DragonnZhang cb58dc1
Merge remote-tracking branch 'origin/main' into pr-8332
DragonnZhang e1cb25a
Merge remote-tracking branch 'origin/main' into dragon/audio-bridge
DragonnZhang 091b535
fix(cli): address round-51 critical findings on media routing (#8332)
DragonnZhang a459192
Merge remote-tracking branch 'origin/main' into dragon/audio-bridge
DragonnZhang cf53207
Merge remote-tracking branch 'origin/main' into dragon/audio-bridge
DragonnZhang cc84601
fix(cli): fire settlement-carrier hand-back hooks and carry drain rou…
DragonnZhang 153421e
fix(core): compare MIME case-insensitively in Gemini media conversion…
DragonnZhang d416820
fix(cli): fail-close still-raw audio on all vision-bridge abort exits…
DragonnZhang 7014597
fix(cli): fail-close staged tool media at the surviving-override abor…
DragonnZhang d201321
fix(cli): type the R52-33 runAudioBridge test mocks against PartListU…
DragonnZhang 4ac6ac4
Merge remote-tracking branch 'origin/main' into dragon/audio-bridge
DragonnZhang 8c4a61c
fix(cli): strip the steer via a composition-site snapshot, not suffix…
DragonnZhang 11ad92d
fix(cli): defer the Idle teammate drain while a retryable failure is …
DragonnZhang File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| # Audio bridge for user attachments | ||
|
|
||
| ## Context | ||
|
|
||
| Qwen Code already transcribes ACP audio content blocks through the configured | ||
| `voiceModel` when the primary model does not support audio. Interactive and | ||
| headless `@` attachments do not use that path: file processing replaces an | ||
| unsupported audio file with a placeholder before the CLI can transcribe it. | ||
|
|
||
| ## Design | ||
|
|
||
| Extract the ACP-only conversion into a shared CLI audio-bridge service. The | ||
| service accepts normalized prompt parts, keeps audio unchanged when the active | ||
| primary model supports it, and otherwise replaces every audio part with an | ||
| untrusted machine transcript produced by `voiceModel`. Missing configuration, | ||
| oversized audio, empty transcripts, request failures, and cancellation never | ||
| forward raw audio to a text-only primary model. | ||
|
|
||
| Interactive and headless `@` resolution preserve unsupported audio only when a | ||
| batch-capable `voiceModel` is selected, then run the shared bridge before the | ||
| existing vision bridge. ACP direct audio blocks use the same service and keep | ||
| their existing agent-message disclosure. A bridge notice identifies the voice | ||
| model whenever audio left the machine, including failed or empty responses. | ||
|
|
||
| The existing `voiceModel` setting and `/model --voice` command remain the sole | ||
| configuration surface. Voice dictation behavior is unchanged. | ||
|
|
||
| ## Scope | ||
|
|
||
| This change covers user-supplied ACP audio blocks and interactive/headless | ||
| `@audio` attachments. Audio nested in tool results, channel-specific attachment | ||
| plumbing, video, and realtime dictation are unchanged. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.