Uh oh!
There was an error while loading. Please reload this page.
Add sounds for completed turns and user input requests - #3892
Add sounds for completed turns and user input requests#3892jakeleventhal wants to merge 12 commits into
Conversation
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This change adds a cross-platform audible notification system that runs globally across thread state, introduces platform-specific audio integrations/assets, and extends server/client projection data and settings. Its impact is broader than a small isolated toggle or additive field, so the runtime behavior and multi-platform integration merit human review. You can add or adjust custom eligibility rules. Learn more. |
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Uh oh!
There was an error while loading. Please reload this page.
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:9626d0808d
ℹ️ 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".
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:ac5b546dc8
ℹ️ 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".
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:61cef120a4
ℹ️ 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".
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:163b2edcbc
ℹ️ 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".
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
88fe364 to
37c74dbCompareUh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:37c74db3b1
ℹ️ 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".
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
37c74db to
b4353cfCompareUh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:b4353cf67b
ℹ️ 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".
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:1b1cf11d7a
ℹ️ 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".
Uh oh!
There was an error while loading. Please reload this page.
CTM already deleted this main-era suite in the stranded-main port. The pingdotgg#3892 interaction-sounds port only needed initiatingUserMessageId on the live query path, which remains in ProjectionSnapshotQuery.ts.
pingdotgg#3892 targets main's latestTurn shape. CTM EnvironmentThreadShell exposes latestRun with runId/status timestamps and no initiatingUserMessageId. Drive success cues from completed runs associated with a nearby user message, and keep bloom on pending input/approval edges.
- Add interaction sound cue detection with hydration-safe tests - Play bloom and success cues from the web app
Avoid advancing known thread sound state during settings hydration so turn completion and input cues are not dropped before the preference is ready. Co-authored-by: Cursor <cursoragent@cursor.com>
39c55e7 to
d29f5ddCompareUh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Reviewed the web-side changes for UI consistency. The new General → Completion sound row follows the existing SettingsRow + Switch + searchableSetting + SettingResetButton contract exactly, and the restore-defaults label/patch wiring is consistent, so no primitive, Tailwind, theme, or scroll findings there. Two consistency/robustness points on the new coordinator plumbing are noted inline.
Posted via Macroscope — UI Consistency
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
CTM already deleted this main-era suite in the stranded-main port. The pingdotgg#3892 interaction-sounds port only needed initiatingUserMessageId on the live query path, which remains in ProjectionSnapshotQuery.ts.
pingdotgg#3892 targets main's latestTurn shape. CTM EnvironmentThreadShell exposes latestRun with runId/status timestamps and no initiatingUserMessageId. Drive success cues from completed runs associated with a nearby user message, and keep bloom on pending input/approval edges.
CTM already deleted this main-era suite in the stranded-main port. The pingdotgg#3892 interaction-sounds port only needed initiatingUserMessageId on the live query path, which remains in ProjectionSnapshotQuery.ts.
pingdotgg#3892 targets main's latestTurn shape. CTM EnvironmentThreadShell exposes latestRun with runId/status timestamps and no initiatingUserMessageId. Drive success cues from completed runs associated with a nearby user message, and keep bloom on pending input/approval edges.
Summary
Screen.Recording.2026-07-11.at.6.57.13.PM.mov
successcue when a turn completesbloomcue when a thread begins requesting user inputUser impact
Users receive an audible signal when agent work finishes or pauses for input, including when the affected thread is not currently open.
Validation
vp test apps/web/src/interactionSounds.test.tsvp checkvp run typecheckNote
Medium Risk
Touches orchestration projection queries and latest-turn contract shape; incorrect turn association or hydration gating could cause missed or spurious audio, but behavior is heavily unit-tested.
Overview
Adds interaction sounds across web (via cuelume) and mobile (via expo-audio + generated WAV assets): a success cue when a user-initiated turn completes and a bloom cue when a thread newly needs input or approval. Per-thread coordinators in the app shell watch all thread shells (including background threads) and use shared logic in
@t3tools/client-runtime/interaction-soundsto derive cues while skipping initial hydration, cached startup, and unchanged state;liveEnvironmentIdsAtomgates when environments are treated as live.Introduces
enableCompletionSounds(default on) in client settings with UI on web/desktop General settings andcompletionSoundEnabledon mobile (device-local preferences). Disabling completion sounds leaves input-required bloom cues on.Server/API:
OrchestrationLatestTurn.initiatingUserMessageId(fromprojection_turns.pending_message_id) so clients can distinguish user-started turns from background work, with a legacy time-window fallback when the field is absent.Reviewed by Cursor Bugbot for commit 4afad56. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Add interaction sounds for completed turns and user input requests
successandbloomsound cues from thread state transitions.InteractionSoundCoordinatorcomponents for web (viacuelume) and mobile (viaexpo-audio) to play cues globally.enableCompletionSoundssetting to client settings, persistence, and settings UIs across platforms.ProjectionSnapshotQueryto selectturns.pending_message_idand map it toOrchestrationLatestTurn.initiatingUserMessageIdfor sound association.OrchestrationLatestTurnschema change adds an optionalinitiatingUserMessageIdfield; out-of-tree contract consumers must handle the new field.Macroscope summarized 4afad56.