Repository navigation
Conversation
Muse reports AXButton for its composer. Use Reliable Paste when the immutable external destination matches live app and PID, while rejecting missing focus, self, secure fields, and destination drift. Recheck queued paste and prevent replay after unsafe partial direct delivery.
Preserve configured insertion mode for safe unknown roles, avoid redundant accessibility reads, and cover the direct refusal latch without changing captured AXButton paste behavior.
Match the existing backup ownership policy before retaining a refused queued transcript. A newer explicit user copy must win over the transcript backup preference. Add a regression covering an active lease, queued delivery, destination change, and intervening clipboard copy.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b81dffce75
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b538a09e6f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f35b88f6f6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8fd3aa3e19
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // Once direct typing starts, a role change alone must not replay a partly typed transcript. | ||
| guard isOutputValid() else { return false } | ||
| return directState.canContinue( | ||
| Self.assessDeliveryFocus(observation: observation, capturedTarget: deliveryTarget, preferredTargetPID: preferredTargetPID, expectedFrontmostPID: deliveryFrontmostPID).decision | ||
| ) |
There was a problem hiding this comment.
Treat a pre-chunk AXButton transition as fallback
When a web composer is initially .editable but reports AXButton on the next focus read, canContinue leaves wasRefused false and returns true for .reliablePasteFallback. insertTextDirectly invokes this predicate in attemptDirectInsertion and again in postUnicodeChunks before the first event is posted, so this transition can occur with no partial text to protect; the code then posts the direct path, which reports success without knowing whether the editor accepted it, instead of taking the new clipboard fallback. Track whether a chunk has actually been posted and route this preflight case to the paste fallback.
Useful? React with 👍 / 👎.
| window: window, | ||
| element: element | ||
| element: element, | ||
| isSecureTextField: DeliveryTargetAssessment.isSecureTextField(element) |
There was a problem hiding this comment.
Defer secure-field AX reads until capture has stopped
When the focused app has a slow or hung accessibility provider, this call performs the newly added role and subrole queries synchronously on the stop path. ContentView.captureDictationStopSnapshot calls captureRecordingTargetContext() before asr.stop(...), so releasing the dictation hotkey now waits on those remote queries, keeping the microphone running and freezing the stop UI until the AX call times out; retain the element at stop and resolve its secure status off-main after audio capture is stopped, before delivery.
Useful? React with 👍 / 👎.
|
This pull request has been marked stale because it has had no activity for 5 days. It will be closed in 2 days if there is no further activity. Add the |
Description
Fix shared macOS dictation delivery after failures observed in Muse and ChatGPT desktop (Codex chat), without an app-specific allowlist.
Allow Reliable Paste for editors reporting
AXButtonwhile requiring the captured field and app to remain unchanged. Preserve secure-field, self, missing-focus, and clipboard ownership safeguards.Type of Change
Related Issue or Discussion
Fixes #1109
Testing
FluidVoice 1.6.12-beta.1, macOS 27.0 (26A5406e), Apple M1 Max, Xcode 27.0.
Reproduce: click Muse's composer, dictate, then stop. Before: insertion refused. Patched earlier builds inserted successfully. ChatGPT desktop (Codex chat) insertion was verified on
f35b88f6after refreshing permissions. GUI was not repeated after the latest review fixes.Regressions failed before the fixes and passed afterward. Debug app/test-target compilation and optimized Release build passed. Tests use fake focus/clipboard/command dependencies. Full app-hosted tests were not rerun due a prior isolation failure; additional GUI checks remain untested.
Screenshots / Video
Earlier validation screenshot; Muse log from the refactored build:
Notes
Codex assisted with implementation, tests, and independent review. I tested Muse and ChatGPT desktop on the revisions above. Existing compiler warnings remain; earlier release-highlights and full-file formatting failures were not rerun.