Add system notifications + sounds - #1131

Closed
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications
Closed

Add system notifications + sounds#1131
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications

Conversation

@ThallesP

@ThallesPThallesP commented Mar 16, 2026

Copy link
Copy Markdown

as the title suggests, it adds notifications when agents terminates to run. it also does push notifications (no idea on what those are called on the desktop side).

the sound is a copyright free one (new notification - 3 from https://pixabay.com/sound-effects/search/notification/).

Note

Add system notifications and completion sounds for agent turn settlement

  • Adds a notification pipeline in __root.tsx that detects newly settled agent turns (success/error/interrupted), deduplicates across snapshot syncs, and dispatches system notifications and/or audio when the app is backgrounded.
  • Adds notification and sound settings to the Settings page (_chat.settings.tsx): toggle system notifications (with permission request), choose Off/Default/Custom completion sound, upload/validate custom audio, test playback, and restore defaults.
  • Stores custom notification sounds in IndexedDB via notificationSoundStorage.ts, with object URL caching and cleanup.
  • Extends AppSettingsSchema with five new notification fields (enableSystemNotifications, enableCompletionSound, notificationSoundSelection, etc.), with backward-compatible defaults so existing persisted settings are unaffected.
  • Behavioral Change: notifications and sounds only fire while the app is backgrounded (document hidden or window unfocused); historical turns at load time are seeded into the dedupe state and suppressed.

Macroscope summarized d49ae01.

- add browser notifications for settled agent turns (success, error, interrupted)
- add completion sound playback with default/custom sound support and storage
- add settings UI, schema defaults/hydration, and coverage in unit/browser tests
@coderabbitai

coderabbitaiBot commented Mar 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 38eb08b8-1412-426b-9794-83a71ab32fe8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Mar 16, 2026
@ThallesPThallesP changed the title [codex] Add agent completion notifications with configurable sound settingsAdd system notifications + soundsMar 16, 2026
Comment threadapps/web/src/agentCompletionNotifications.ts
@ThallesP
ThallesP marked this pull request as ready for review March 16, 2026 05:50

if (file.size > MAX_CUSTOM_NOTIFICATION_SOUND_BYTES) {
setSoundSelectionError(
`Custom sounds must be ${Math.floor(MAX_CUSTOM_NOTIFICATION_SOUND_BYTES / (1024 * 1024))}MB or smaller.`,

@ThallesPThallesPMar 16, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no idea if a limit is necessary, dont want to blow up user's IndexedDB (even if he really wants to). Life would be so much easier if I could just read a path at runtime but unfortunately browsers thinks thats a security nightmare (wdym I can't read a .env path on your local file system??!?)

- treat only `src: null` as an explicit no-play signal
- add test to ensure disabled playback does not trigger default audio
@ThallesP

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@UtkarshUsername

Copy link
Copy Markdown
Contributor

#976 is being worked on with comments from Julius

@ThallesP

Copy link
Copy Markdown
Author

thanks missed that somehow

@ThallesP

ThallesP commented Mar 16, 2026

Copy link
Copy Markdown
Author

#976 is being worked on with comments from Julius

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

@UtkarshUsername

Copy link
Copy Markdown
Contributor

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

I am not sure if that's something the maintainers want, but you can try and see after that one is merged

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ThallesP@UtkarshUsername
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add system notifications + sounds - #1131

Closed
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications
Closed

Add system notifications + sounds#1131
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications

Conversation

@ThallesP

@ThallesPThallesP commented Mar 16, 2026

Copy link
Copy Markdown

as the title suggests, it adds notifications when agents terminates to run. it also does push notifications (no idea on what those are called on the desktop side).

the sound is a copyright free one (new notification - 3 from https://pixabay.com/sound-effects/search/notification/).

Note

Add system notifications and completion sounds for agent turn settlement

  • Adds a notification pipeline in __root.tsx that detects newly settled agent turns (success/error/interrupted), deduplicates across snapshot syncs, and dispatches system notifications and/or audio when the app is backgrounded.
  • Adds notification and sound settings to the Settings page (_chat.settings.tsx): toggle system notifications (with permission request), choose Off/Default/Custom completion sound, upload/validate custom audio, test playback, and restore defaults.
  • Stores custom notification sounds in IndexedDB via notificationSoundStorage.ts, with object URL caching and cleanup.
  • Extends AppSettingsSchema with five new notification fields (enableSystemNotifications, enableCompletionSound, notificationSoundSelection, etc.), with backward-compatible defaults so existing persisted settings are unaffected.
  • Behavioral Change: notifications and sounds only fire while the app is backgrounded (document hidden or window unfocused); historical turns at load time are seeded into the dedupe state and suppressed.

Macroscope summarized d49ae01.

- add browser notifications for settled agent turns (success, error, interrupted)
- add completion sound playback with default/custom sound support and storage
- add settings UI, schema defaults/hydration, and coverage in unit/browser tests
@coderabbitai

coderabbitaiBot commented Mar 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 38eb08b8-1412-426b-9794-83a71ab32fe8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Mar 16, 2026
@ThallesPThallesP changed the title [codex] Add agent completion notifications with configurable sound settingsAdd system notifications + soundsMar 16, 2026
Comment threadapps/web/src/agentCompletionNotifications.ts
@ThallesP
ThallesP marked this pull request as ready for review March 16, 2026 05:50

if (file.size > MAX_CUSTOM_NOTIFICATION_SOUND_BYTES) {
setSoundSelectionError(
`Custom sounds must be ${Math.floor(MAX_CUSTOM_NOTIFICATION_SOUND_BYTES / (1024 * 1024))}MB or smaller.`,

@ThallesPThallesPMar 16, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no idea if a limit is necessary, dont want to blow up user's IndexedDB (even if he really wants to). Life would be so much easier if I could just read a path at runtime but unfortunately browsers thinks thats a security nightmare (wdym I can't read a .env path on your local file system??!?)

- treat only `src: null` as an explicit no-play signal
- add test to ensure disabled playback does not trigger default audio
@ThallesP

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@UtkarshUsername

Copy link
Copy Markdown
Contributor

#976 is being worked on with comments from Julius

@ThallesP

Copy link
Copy Markdown
Author

thanks missed that somehow

@ThallesP

ThallesP commented Mar 16, 2026

Copy link
Copy Markdown
Author

#976 is being worked on with comments from Julius

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

@UtkarshUsername

Copy link
Copy Markdown
Contributor

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

I am not sure if that's something the maintainers want, but you can try and see after that one is merged

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ThallesP@UtkarshUsername
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add system notifications + sounds - #1131

Closed
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications
Closed

Add system notifications + sounds#1131
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications

Conversation

@ThallesP

@ThallesPThallesP commented Mar 16, 2026

Copy link
Copy Markdown

as the title suggests, it adds notifications when agents terminates to run. it also does push notifications (no idea on what those are called on the desktop side).

the sound is a copyright free one (new notification - 3 from https://pixabay.com/sound-effects/search/notification/).

Note

Add system notifications and completion sounds for agent turn settlement

  • Adds a notification pipeline in __root.tsx that detects newly settled agent turns (success/error/interrupted), deduplicates across snapshot syncs, and dispatches system notifications and/or audio when the app is backgrounded.
  • Adds notification and sound settings to the Settings page (_chat.settings.tsx): toggle system notifications (with permission request), choose Off/Default/Custom completion sound, upload/validate custom audio, test playback, and restore defaults.
  • Stores custom notification sounds in IndexedDB via notificationSoundStorage.ts, with object URL caching and cleanup.
  • Extends AppSettingsSchema with five new notification fields (enableSystemNotifications, enableCompletionSound, notificationSoundSelection, etc.), with backward-compatible defaults so existing persisted settings are unaffected.
  • Behavioral Change: notifications and sounds only fire while the app is backgrounded (document hidden or window unfocused); historical turns at load time are seeded into the dedupe state and suppressed.

Macroscope summarized d49ae01.

- add browser notifications for settled agent turns (success, error, interrupted)
- add completion sound playback with default/custom sound support and storage
- add settings UI, schema defaults/hydration, and coverage in unit/browser tests
@coderabbitai

coderabbitaiBot commented Mar 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 38eb08b8-1412-426b-9794-83a71ab32fe8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Mar 16, 2026
@ThallesPThallesP changed the title [codex] Add agent completion notifications with configurable sound settingsAdd system notifications + soundsMar 16, 2026
Comment threadapps/web/src/agentCompletionNotifications.ts
@ThallesP
ThallesP marked this pull request as ready for review March 16, 2026 05:50

if (file.size > MAX_CUSTOM_NOTIFICATION_SOUND_BYTES) {
setSoundSelectionError(
`Custom sounds must be ${Math.floor(MAX_CUSTOM_NOTIFICATION_SOUND_BYTES / (1024 * 1024))}MB or smaller.`,

@ThallesPThallesPMar 16, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no idea if a limit is necessary, dont want to blow up user's IndexedDB (even if he really wants to). Life would be so much easier if I could just read a path at runtime but unfortunately browsers thinks thats a security nightmare (wdym I can't read a .env path on your local file system??!?)

- treat only `src: null` as an explicit no-play signal
- add test to ensure disabled playback does not trigger default audio
@ThallesP

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@UtkarshUsername

Copy link
Copy Markdown
Contributor

#976 is being worked on with comments from Julius

@ThallesP

Copy link
Copy Markdown
Author

thanks missed that somehow

@ThallesP

ThallesP commented Mar 16, 2026

Copy link
Copy Markdown
Author

#976 is being worked on with comments from Julius

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

@UtkarshUsername

Copy link
Copy Markdown
Contributor

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

I am not sure if that's something the maintainers want, but you can try and see after that one is merged

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ThallesP@UtkarshUsername
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add system notifications + sounds - #1131

Closed
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications
Closed

Add system notifications + sounds#1131
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications

Conversation

@ThallesP

@ThallesPThallesP commented Mar 16, 2026

Copy link
Copy Markdown

as the title suggests, it adds notifications when agents terminates to run. it also does push notifications (no idea on what those are called on the desktop side).

the sound is a copyright free one (new notification - 3 from https://pixabay.com/sound-effects/search/notification/).

Note

Add system notifications and completion sounds for agent turn settlement

  • Adds a notification pipeline in __root.tsx that detects newly settled agent turns (success/error/interrupted), deduplicates across snapshot syncs, and dispatches system notifications and/or audio when the app is backgrounded.
  • Adds notification and sound settings to the Settings page (_chat.settings.tsx): toggle system notifications (with permission request), choose Off/Default/Custom completion sound, upload/validate custom audio, test playback, and restore defaults.
  • Stores custom notification sounds in IndexedDB via notificationSoundStorage.ts, with object URL caching and cleanup.
  • Extends AppSettingsSchema with five new notification fields (enableSystemNotifications, enableCompletionSound, notificationSoundSelection, etc.), with backward-compatible defaults so existing persisted settings are unaffected.
  • Behavioral Change: notifications and sounds only fire while the app is backgrounded (document hidden or window unfocused); historical turns at load time are seeded into the dedupe state and suppressed.

Macroscope summarized d49ae01.

- add browser notifications for settled agent turns (success, error, interrupted)
- add completion sound playback with default/custom sound support and storage
- add settings UI, schema defaults/hydration, and coverage in unit/browser tests
@coderabbitai

coderabbitaiBot commented Mar 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 38eb08b8-1412-426b-9794-83a71ab32fe8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Mar 16, 2026
@ThallesPThallesP changed the title [codex] Add agent completion notifications with configurable sound settingsAdd system notifications + soundsMar 16, 2026
Comment threadapps/web/src/agentCompletionNotifications.ts
@ThallesP
ThallesP marked this pull request as ready for review March 16, 2026 05:50

if (file.size > MAX_CUSTOM_NOTIFICATION_SOUND_BYTES) {
setSoundSelectionError(
`Custom sounds must be ${Math.floor(MAX_CUSTOM_NOTIFICATION_SOUND_BYTES / (1024 * 1024))}MB or smaller.`,

@ThallesPThallesPMar 16, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no idea if a limit is necessary, dont want to blow up user's IndexedDB (even if he really wants to). Life would be so much easier if I could just read a path at runtime but unfortunately browsers thinks thats a security nightmare (wdym I can't read a .env path on your local file system??!?)

- treat only `src: null` as an explicit no-play signal
- add test to ensure disabled playback does not trigger default audio
@ThallesP

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@UtkarshUsername

Copy link
Copy Markdown
Contributor

#976 is being worked on with comments from Julius

@ThallesP

Copy link
Copy Markdown
Author

thanks missed that somehow

@ThallesP

ThallesP commented Mar 16, 2026

Copy link
Copy Markdown
Author

#976 is being worked on with comments from Julius

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

@UtkarshUsername

Copy link
Copy Markdown
Contributor

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

I am not sure if that's something the maintainers want, but you can try and see after that one is merged

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ThallesP@UtkarshUsername
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add system notifications + sounds - #1131

Closed
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications
Closed

Add system notifications + sounds#1131
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications

Conversation

@ThallesP

@ThallesPThallesP commented Mar 16, 2026

Copy link
Copy Markdown

as the title suggests, it adds notifications when agents terminates to run. it also does push notifications (no idea on what those are called on the desktop side).

the sound is a copyright free one (new notification - 3 from https://pixabay.com/sound-effects/search/notification/).

Note

Add system notifications and completion sounds for agent turn settlement

  • Adds a notification pipeline in __root.tsx that detects newly settled agent turns (success/error/interrupted), deduplicates across snapshot syncs, and dispatches system notifications and/or audio when the app is backgrounded.
  • Adds notification and sound settings to the Settings page (_chat.settings.tsx): toggle system notifications (with permission request), choose Off/Default/Custom completion sound, upload/validate custom audio, test playback, and restore defaults.
  • Stores custom notification sounds in IndexedDB via notificationSoundStorage.ts, with object URL caching and cleanup.
  • Extends AppSettingsSchema with five new notification fields (enableSystemNotifications, enableCompletionSound, notificationSoundSelection, etc.), with backward-compatible defaults so existing persisted settings are unaffected.
  • Behavioral Change: notifications and sounds only fire while the app is backgrounded (document hidden or window unfocused); historical turns at load time are seeded into the dedupe state and suppressed.

Macroscope summarized d49ae01.

- add browser notifications for settled agent turns (success, error, interrupted)
- add completion sound playback with default/custom sound support and storage
- add settings UI, schema defaults/hydration, and coverage in unit/browser tests
@coderabbitai

coderabbitaiBot commented Mar 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 38eb08b8-1412-426b-9794-83a71ab32fe8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Mar 16, 2026
@ThallesPThallesP changed the title [codex] Add agent completion notifications with configurable sound settingsAdd system notifications + soundsMar 16, 2026
Comment threadapps/web/src/agentCompletionNotifications.ts
@ThallesP
ThallesP marked this pull request as ready for review March 16, 2026 05:50

if (file.size > MAX_CUSTOM_NOTIFICATION_SOUND_BYTES) {
setSoundSelectionError(
`Custom sounds must be ${Math.floor(MAX_CUSTOM_NOTIFICATION_SOUND_BYTES / (1024 * 1024))}MB or smaller.`,

@ThallesPThallesPMar 16, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no idea if a limit is necessary, dont want to blow up user's IndexedDB (even if he really wants to). Life would be so much easier if I could just read a path at runtime but unfortunately browsers thinks thats a security nightmare (wdym I can't read a .env path on your local file system??!?)

- treat only `src: null` as an explicit no-play signal
- add test to ensure disabled playback does not trigger default audio
@ThallesP

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@UtkarshUsername

Copy link
Copy Markdown
Contributor

#976 is being worked on with comments from Julius

@ThallesP

Copy link
Copy Markdown
Author

thanks missed that somehow

@ThallesP

ThallesP commented Mar 16, 2026

Copy link
Copy Markdown
Author

#976 is being worked on with comments from Julius

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

@UtkarshUsername

Copy link
Copy Markdown
Contributor

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

I am not sure if that's something the maintainers want, but you can try and see after that one is merged

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ThallesP@UtkarshUsername
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add system notifications + sounds - #1131

Closed
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications
Closed

Add system notifications + sounds#1131
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications

Conversation

@ThallesP

@ThallesPThallesP commented Mar 16, 2026

Copy link
Copy Markdown

as the title suggests, it adds notifications when agents terminates to run. it also does push notifications (no idea on what those are called on the desktop side).

the sound is a copyright free one (new notification - 3 from https://pixabay.com/sound-effects/search/notification/).

Note

Add system notifications and completion sounds for agent turn settlement

  • Adds a notification pipeline in __root.tsx that detects newly settled agent turns (success/error/interrupted), deduplicates across snapshot syncs, and dispatches system notifications and/or audio when the app is backgrounded.
  • Adds notification and sound settings to the Settings page (_chat.settings.tsx): toggle system notifications (with permission request), choose Off/Default/Custom completion sound, upload/validate custom audio, test playback, and restore defaults.
  • Stores custom notification sounds in IndexedDB via notificationSoundStorage.ts, with object URL caching and cleanup.
  • Extends AppSettingsSchema with five new notification fields (enableSystemNotifications, enableCompletionSound, notificationSoundSelection, etc.), with backward-compatible defaults so existing persisted settings are unaffected.
  • Behavioral Change: notifications and sounds only fire while the app is backgrounded (document hidden or window unfocused); historical turns at load time are seeded into the dedupe state and suppressed.

Macroscope summarized d49ae01.

- add browser notifications for settled agent turns (success, error, interrupted)
- add completion sound playback with default/custom sound support and storage
- add settings UI, schema defaults/hydration, and coverage in unit/browser tests
@coderabbitai

coderabbitaiBot commented Mar 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 38eb08b8-1412-426b-9794-83a71ab32fe8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Mar 16, 2026
@ThallesPThallesP changed the title [codex] Add agent completion notifications with configurable sound settingsAdd system notifications + soundsMar 16, 2026
Comment threadapps/web/src/agentCompletionNotifications.ts
@ThallesP
ThallesP marked this pull request as ready for review March 16, 2026 05:50

if (file.size > MAX_CUSTOM_NOTIFICATION_SOUND_BYTES) {
setSoundSelectionError(
`Custom sounds must be ${Math.floor(MAX_CUSTOM_NOTIFICATION_SOUND_BYTES / (1024 * 1024))}MB or smaller.`,

@ThallesPThallesPMar 16, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no idea if a limit is necessary, dont want to blow up user's IndexedDB (even if he really wants to). Life would be so much easier if I could just read a path at runtime but unfortunately browsers thinks thats a security nightmare (wdym I can't read a .env path on your local file system??!?)

- treat only `src: null` as an explicit no-play signal
- add test to ensure disabled playback does not trigger default audio
@ThallesP

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@UtkarshUsername

Copy link
Copy Markdown
Contributor

#976 is being worked on with comments from Julius

@ThallesP

Copy link
Copy Markdown
Author

thanks missed that somehow

@ThallesP

ThallesP commented Mar 16, 2026

Copy link
Copy Markdown
Author

#976 is being worked on with comments from Julius

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

@UtkarshUsername

Copy link
Copy Markdown
Contributor

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

I am not sure if that's something the maintainers want, but you can try and see after that one is merged

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ThallesP@UtkarshUsername
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add system notifications + sounds - #1131

Closed
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications
Closed

Add system notifications + sounds#1131
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications

Conversation

@ThallesP

@ThallesPThallesP commented Mar 16, 2026

Copy link
Copy Markdown

as the title suggests, it adds notifications when agents terminates to run. it also does push notifications (no idea on what those are called on the desktop side).

the sound is a copyright free one (new notification - 3 from https://pixabay.com/sound-effects/search/notification/).

Note

Add system notifications and completion sounds for agent turn settlement

  • Adds a notification pipeline in __root.tsx that detects newly settled agent turns (success/error/interrupted), deduplicates across snapshot syncs, and dispatches system notifications and/or audio when the app is backgrounded.
  • Adds notification and sound settings to the Settings page (_chat.settings.tsx): toggle system notifications (with permission request), choose Off/Default/Custom completion sound, upload/validate custom audio, test playback, and restore defaults.
  • Stores custom notification sounds in IndexedDB via notificationSoundStorage.ts, with object URL caching and cleanup.
  • Extends AppSettingsSchema with five new notification fields (enableSystemNotifications, enableCompletionSound, notificationSoundSelection, etc.), with backward-compatible defaults so existing persisted settings are unaffected.
  • Behavioral Change: notifications and sounds only fire while the app is backgrounded (document hidden or window unfocused); historical turns at load time are seeded into the dedupe state and suppressed.

Macroscope summarized d49ae01.

- add browser notifications for settled agent turns (success, error, interrupted)
- add completion sound playback with default/custom sound support and storage
- add settings UI, schema defaults/hydration, and coverage in unit/browser tests
@coderabbitai

coderabbitaiBot commented Mar 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 38eb08b8-1412-426b-9794-83a71ab32fe8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Mar 16, 2026
@ThallesPThallesP changed the title [codex] Add agent completion notifications with configurable sound settingsAdd system notifications + soundsMar 16, 2026
Comment threadapps/web/src/agentCompletionNotifications.ts
@ThallesP
ThallesP marked this pull request as ready for review March 16, 2026 05:50

if (file.size > MAX_CUSTOM_NOTIFICATION_SOUND_BYTES) {
setSoundSelectionError(
`Custom sounds must be ${Math.floor(MAX_CUSTOM_NOTIFICATION_SOUND_BYTES / (1024 * 1024))}MB or smaller.`,

@ThallesPThallesPMar 16, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no idea if a limit is necessary, dont want to blow up user's IndexedDB (even if he really wants to). Life would be so much easier if I could just read a path at runtime but unfortunately browsers thinks thats a security nightmare (wdym I can't read a .env path on your local file system??!?)

- treat only `src: null` as an explicit no-play signal
- add test to ensure disabled playback does not trigger default audio
@ThallesP

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@UtkarshUsername

Copy link
Copy Markdown
Contributor

#976 is being worked on with comments from Julius

@ThallesP

Copy link
Copy Markdown
Author

thanks missed that somehow

@ThallesP

ThallesP commented Mar 16, 2026

Copy link
Copy Markdown
Author

#976 is being worked on with comments from Julius

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

@UtkarshUsername

Copy link
Copy Markdown
Contributor

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

I am not sure if that's something the maintainers want, but you can try and see after that one is merged

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ThallesP@UtkarshUsername
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add system notifications + sounds - #1131

Closed
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications
Closed

Add system notifications + sounds#1131
ThallesP wants to merge 3 commits into
pingdotgg:mainfrom
ThallesP:feature/web/agent-completion-notifications

Conversation

@ThallesP

@ThallesPThallesP commented Mar 16, 2026

Copy link
Copy Markdown

as the title suggests, it adds notifications when agents terminates to run. it also does push notifications (no idea on what those are called on the desktop side).

the sound is a copyright free one (new notification - 3 from https://pixabay.com/sound-effects/search/notification/).

Note

Add system notifications and completion sounds for agent turn settlement

  • Adds a notification pipeline in __root.tsx that detects newly settled agent turns (success/error/interrupted), deduplicates across snapshot syncs, and dispatches system notifications and/or audio when the app is backgrounded.
  • Adds notification and sound settings to the Settings page (_chat.settings.tsx): toggle system notifications (with permission request), choose Off/Default/Custom completion sound, upload/validate custom audio, test playback, and restore defaults.
  • Stores custom notification sounds in IndexedDB via notificationSoundStorage.ts, with object URL caching and cleanup.
  • Extends AppSettingsSchema with five new notification fields (enableSystemNotifications, enableCompletionSound, notificationSoundSelection, etc.), with backward-compatible defaults so existing persisted settings are unaffected.
  • Behavioral Change: notifications and sounds only fire while the app is backgrounded (document hidden or window unfocused); historical turns at load time are seeded into the dedupe state and suppressed.

Macroscope summarized d49ae01.

- add browser notifications for settled agent turns (success, error, interrupted)
- add completion sound playback with default/custom sound support and storage
- add settings UI, schema defaults/hydration, and coverage in unit/browser tests
@coderabbitai

coderabbitaiBot commented Mar 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 38eb08b8-1412-426b-9794-83a71ab32fe8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Mar 16, 2026
@ThallesPThallesP changed the title [codex] Add agent completion notifications with configurable sound settingsAdd system notifications + soundsMar 16, 2026
Comment threadapps/web/src/agentCompletionNotifications.ts
@ThallesP
ThallesP marked this pull request as ready for review March 16, 2026 05:50

if (file.size > MAX_CUSTOM_NOTIFICATION_SOUND_BYTES) {
setSoundSelectionError(
`Custom sounds must be ${Math.floor(MAX_CUSTOM_NOTIFICATION_SOUND_BYTES / (1024 * 1024))}MB or smaller.`,

@ThallesPThallesPMar 16, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no idea if a limit is necessary, dont want to blow up user's IndexedDB (even if he really wants to). Life would be so much easier if I could just read a path at runtime but unfortunately browsers thinks thats a security nightmare (wdym I can't read a .env path on your local file system??!?)

- treat only `src: null` as an explicit no-play signal
- add test to ensure disabled playback does not trigger default audio
@ThallesP

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@UtkarshUsername

Copy link
Copy Markdown
Contributor

#976 is being worked on with comments from Julius

@ThallesP

Copy link
Copy Markdown
Author

thanks missed that somehow

@ThallesP

ThallesP commented Mar 16, 2026

Copy link
Copy Markdown
Author

#976 is being worked on with comments from Julius

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

@UtkarshUsername

Copy link
Copy Markdown
Contributor

@UtkarshUsername I see no sound notification though, maybe I can focus on sound only after that's merged? Is that something desired?

I am not sure if that's something the maintainers want, but you can try and see after that one is merged

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ThallesP@UtkarshUsername