From 531f841cfa12fbc6f7c28268eb0e6640c13a86b6 Mon Sep 17 00:00:00 2001 From: Type Int04 Date: Tue, 8 Sep 2026 05:56:18 +0700 Subject: [PATCH] Sync approval sounds and lock global dialogs --- chatgpt-extension/approval-bridge.js | 10 ++++-- chatgpt-extension/background.js | 1 + .../content-chatgpt-approval-ui.js | 29 ++++++------------ chatgpt-extension/manifest.json | 3 ++ chatgpt-extension/sounds/sound_exe.mp3 | Bin 0 -> 81084 bytes web/src/App.tsx | 1 + web/src/chatgptBridge.ts | 14 +++++++-- web/src/pages/SettingsPage.tsx | 2 ++ .../tasks/GlobalConversationApprovalQueue.tsx | 2 +- web/src/tasks/GlobalPlanQuestionQueue.tsx | 14 ++++++++- 10 files changed, 51 insertions(+), 25 deletions(-) create mode 100644 chatgpt-extension/sounds/sound_exe.mp3 diff --git a/chatgpt-extension/approval-bridge.js b/chatgpt-extension/approval-bridge.js index 9a1ebf23..71000b98 100644 --- a/chatgpt-extension/approval-bridge.js +++ b/chatgpt-extension/approval-bridge.js @@ -6,6 +6,7 @@ let approvalSocket = null; let approvalReconnectTimer = null; let approvalReconnectAttempt = 0; let approvalConnectionGeneration = 0; +let approvalSoundEnabled = true; async function startApprovalBridge() { const stored = await chrome.storage.local.get(APPROVAL_BASE_URL_KEY); @@ -171,8 +172,13 @@ async function resyncApprovalQueue() { } } +function configureApprovalSound(enabled) { + approvalSoundEnabled = enabled !== false; + void broadcastApprovalState(); +} + async function approvalBridgeState() { - return { items: sortedApprovalItems(), baseUrl: approvalBaseUrl, connected: Boolean(approvalSocket && approvalSocket.readyState === WebSocket.OPEN) }; + return { items: sortedApprovalItems(), baseUrl: approvalBaseUrl, connected: Boolean(approvalSocket && approvalSocket.readyState === WebSocket.OPEN), soundEnabled: approvalSoundEnabled }; } async function resolveGlobalApproval(message) { @@ -219,7 +225,7 @@ async function resolveGlobalApproval(message) { } async function broadcastApprovalState() { - const payload = { type: 'chatcmd-global-approval-state', items: sortedApprovalItems() }; + const payload = { type: 'chatcmd-global-approval-state', items: sortedApprovalItems(), soundEnabled: approvalSoundEnabled }; const tabs = await chatGptTabs(); await Promise.all(tabs.filter((tab) => tab.id).map(async (tab) => { try { await sendToChatGpt(tab.id, payload, { quiet: true }); } catch { /* tab can still be loading */ } diff --git a/chatgpt-extension/background.js b/chatgpt-extension/background.js index 80e76f67..5a1ac88c 100644 --- a/chatgpt-extension/background.js +++ b/chatgpt-extension/background.js @@ -28,6 +28,7 @@ chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { } if (message.type === 'chatcmd-local-command') { if (message.localBaseUrl) void configureApprovalBridge(message.localBaseUrl).catch(() => undefined); + if (typeof message.approvalSoundEnabled === 'boolean') configureApprovalSound(message.approvalSoundEnabled); if (message.action === 'ping') { void chatGptTabStatus(message.conversationUrl, sender.tab?.id) .then((status) => sendResponse({ ok: true, extensionVersion: chrome.runtime.getManifest().version, ...status })) diff --git a/chatgpt-extension/content-chatgpt-approval-ui.js b/chatgpt-extension/content-chatgpt-approval-ui.js index 8f529bf3..98882458 100644 --- a/chatgpt-extension/content-chatgpt-approval-ui.js +++ b/chatgpt-extension/content-chatgpt-approval-ui.js @@ -8,6 +8,8 @@ let rejecting = false; let reason = ''; let lastSoundKey = null; + let approvalSoundEnabled = true; + let approvalAudio = null; let previousTitle = null; let countdownTimer = null; @@ -22,7 +24,8 @@ return shadow; } - function render(nextItems) { + function render(nextItems, soundEnabled = approvalSoundEnabled) { + approvalSoundEnabled = soundEnabled !== false; items = Array.isArray(nextItems) ? nextItems : []; const current = items[0]; const shadow = ensureRoot(); @@ -176,23 +179,11 @@ } function playApprovalSound() { + if (!approvalSoundEnabled) return; try { - const AudioContextCtor = globalThis.AudioContext || globalThis.webkitAudioContext; - if (!AudioContextCtor) return; - const context = new AudioContextCtor(); - const now = context.currentTime; - for (const [offset, frequency] of [[0, 660], [.13, 880]]) { - const oscillator = context.createOscillator(); - const gain = context.createGain(); - oscillator.frequency.value = frequency; - gain.gain.setValueAtTime(0.0001, now + offset); - gain.gain.exponentialRampToValueAtTime(0.08, now + offset + .015); - gain.gain.exponentialRampToValueAtTime(0.0001, now + offset + .11); - oscillator.connect(gain).connect(context.destination); - oscillator.start(now + offset); - oscillator.stop(now + offset + .12); - } - setTimeout(() => void context.close(), 500); + approvalAudio ??= new Audio(chrome.runtime.getURL('sounds/sound_exe.mp3')); + approvalAudio.currentTime = 0; + void approvalAudio.play().catch(() => undefined); } catch { /* Browser autoplay policy can block audio until user interaction. */ } } @@ -208,13 +199,13 @@ chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => { if (message?.type !== 'chatcmd-global-approval-state') return false; - render(message.items); + render(message.items, message.soundEnabled); sendResponse({ ok: true }); return false; }); void globalThis.ChatCmdRuntime.sendMessage({ type: 'chatcmd-approval-state-request' }, (response) => { - if (response?.ok) render(response.items); + if (response?.ok) render(response.items, response.soundEnabled); }); globalThis.ChatCmdGlobalApprovalUi = Object.freeze({ render }); diff --git a/chatgpt-extension/manifest.json b/chatgpt-extension/manifest.json index a32eae30..1e3e2077 100644 --- a/chatgpt-extension/manifest.json +++ b/chatgpt-extension/manifest.json @@ -6,6 +6,9 @@ "permissions": ["tabs", "storage", "scripting", "alarms"], "host_permissions": ["https://chatgpt.com/*", "http://localhost/*", "http://127.0.0.1/*"], "background": { "service_worker": "background.js" }, + "web_accessible_resources": [ + { "resources": ["sounds/sound_exe.mp3"], "matches": ["https://chatgpt.com/*"] } + ], "content_scripts": [ { "matches": ["https://chatgpt.com/*"], diff --git a/chatgpt-extension/sounds/sound_exe.mp3 b/chatgpt-extension/sounds/sound_exe.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4987f3a8799d989fc56d3c20aee27e0c5d6db16a GIT binary patch literal 81084 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 { const payload = event.payload && typeof event.payload === 'object' && !Array.isArray(event.payload) ? event.payload as Record : {}; if (isNewConversationEvent(event, payload)) soundNotifications.playNewAgent(); + if (event.type === 'approval.pending' || event.type === 'subagent.approval_pending') soundNotifications.playApproval(); if (isFinalResponseEvent(event, payload)) soundNotifications.playFinishedTask(); }, []); useRealtime(onEvent); diff --git a/web/src/chatgptBridge.ts b/web/src/chatgptBridge.ts index 30c4ebbe..0e0a8a4a 100644 --- a/web/src/chatgptBridge.ts +++ b/web/src/chatgptBridge.ts @@ -7,7 +7,7 @@ export const REQUIRED_CHATGPT_EXTENSION_VERSION = '0.1.9'; type BridgeCommand = | { action: 'compact-resume'; nonce: string; jobId: string; taskId: string; localBaseUrl: string } - | { action: 'ping'; nonce: string; conversationUrl?: string } + | { action: 'ping'; nonce: string; conversationUrl?: string; approvalSoundEnabled: boolean } | { action: 'prepare-tab'; nonce: string; newConversationUrl?: string } | { action: 'open-tab'; nonce: string; conversationUrl: string } | { action: 'focus-tab'; nonce: string; conversationUrl: string } @@ -27,7 +27,7 @@ export type ChatGptExtensionStatus = { ready: boolean; extensionVersion?: string export async function chatGptExtensionStatus(conversationUrl?: string): Promise { try { - const response = await bridge({ action: 'ping', nonce: nonce(), conversationUrl }, 1_500); + const response = await bridge({ action: 'ping', nonce: nonce(), conversationUrl, approvalSoundEnabled: approvalSoundPreference() }, 1_500); return { ready: true, extensionVersion: response.extensionVersion, @@ -122,4 +122,14 @@ function isResponse(value: unknown): value is BridgeResponse & { type: string } return record.type === RESPONSE_TYPE && typeof record.nonce === 'string' && typeof record.ok === 'boolean'; } +function approvalSoundPreference() { + try { + const value = JSON.parse(localStorage.getItem('chatcmd.preferences') ?? '{}') as Record; + if (typeof value.newAgentSound === 'boolean') return value.newAgentSound; + return value.sound !== false; + } catch { + return true; + } +} + function nonce() { return crypto.randomUUID(); } diff --git a/web/src/pages/SettingsPage.tsx b/web/src/pages/SettingsPage.tsx index 679aae01..78952e73 100644 --- a/web/src/pages/SettingsPage.tsx +++ b/web/src/pages/SettingsPage.tsx @@ -3,6 +3,7 @@ import { AlertTriangle, Database, Download, Info, LockKeyhole, MonitorCog, Save, import { FormEvent, useEffect, useState } from 'react'; import { useSearchParams } from 'react-router-dom'; import { api } from '../api'; +import { chatGptExtensionStatus } from '../chatgptBridge'; import { ErrorState, Loading, Modal, PageHeading, ProblemBanner, StatusBadge } from '../components'; import { applyAppFont, applyTaskFontScale, GOOGLE_FONT_PRESETS, normalizeFontFamily, normalizeTaskFontScale, TASK_FONT_SCALE_PRESETS } from '../fontPreferences'; import { getAppLanguage, setAppLanguage, tr, translatedStatus } from '../i18n'; @@ -62,6 +63,7 @@ export function SettingsPage() { result.setData(next); setValue(next); localStorage.setItem('chatcmd.preferences', JSON.stringify({ theme: next.theme, fontFamily: next.fontFamily, taskFontScale: next.taskFontScale, language: next.language, sound: next.sound, newAgentSound: next.newAgentSound, finishedTaskSound: next.finishedTaskSound })); + void chatGptExtensionStatus(); document.documentElement.dataset.theme = next.theme; applyAppFont(next.fontFamily); applyTaskFontScale(next.taskFontScale); diff --git a/web/src/tasks/GlobalConversationApprovalQueue.tsx b/web/src/tasks/GlobalConversationApprovalQueue.tsx index 66cd3745..7af0eae1 100644 --- a/web/src/tasks/GlobalConversationApprovalQueue.tsx +++ b/web/src/tasks/GlobalConversationApprovalQueue.tsx @@ -102,7 +102,7 @@ export function GlobalConversationApprovalQueue() { if (!current) return null; - return void decide(false)} dangerous> + return {}} dismissible={false} dangerous>

{tr('{count} conversation(s) waiting. Requests are shown one at a time so none are missed.', { count: queue.length })}

{tr('Approval expires in {seconds} seconds.', { seconds: remaining })}

{current.title?.trim() || current.id}

diff --git a/web/src/tasks/GlobalPlanQuestionQueue.tsx b/web/src/tasks/GlobalPlanQuestionQueue.tsx index 56c00382..c6250bf2 100644 --- a/web/src/tasks/GlobalPlanQuestionQueue.tsx +++ b/web/src/tasks/GlobalPlanQuestionQueue.tsx @@ -1,9 +1,10 @@ import { Ban, Check, Clock3, ListChecks, LoaderCircle, MessageSquareMore, ShieldCheck, Sparkles } from 'lucide-react'; -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { ApiError, api } from '../api'; import { Modal } from '../components'; import { tr } from '../i18n'; import { useRealtime } from '../realtime'; +import { soundNotifications } from '../soundNotifications'; import type { PlanQuestion, PlanQuestionAnswer, TimelineEvent } from '../types'; function sortQueue(items: PlanQuestion[]) { @@ -24,6 +25,7 @@ export function GlobalPlanQuestionQueue() { const [customAnswer, setCustomAnswer] = useState(''); const [remaining, setRemaining] = useState(0); const current = queue[0]; + const activeSoundQuestion = useRef(null); const reload = useCallback(async () => { try { @@ -51,6 +53,16 @@ export function GlobalPlanQuestionQueue() { setCustomAnswer(''); }, [current?.id]); + useEffect(() => { + if (!current) { + activeSoundQuestion.current = null; + return; + } + if (activeSoundQuestion.current === current.id) return; + activeSoundQuestion.current = current.id; + soundNotifications.playApproval(); + }, [current]); + const deadline = current?.deadlineAtMs ?? 0; useEffect(() => { if (!current) { setRemaining(0); return; }