Add tab notification features and timeout improvements

This commit is contained in:
B Harper
2025-11-01 17:37:01 +11:00
parent fb9251f793
commit ea62ebfbf3
8 changed files with 207 additions and 28 deletions
Vendored
BIN
View File
Binary file not shown.
+3 -2
View File
@@ -1,8 +1,9 @@
# What
This extension provides a `HumanAgent_Chat` MCP tool that forces AI assistants to communicate through a human agent instead of giving direct responses. When an AI uses this tool, it opens a chat session where humans can respond in real-time.
This extension provides VSCode Github Copilot Aagent a `HumanAgent_Chat` MCP tool that forces AI assistants to communicate through a human agent instead of giving direct responses. When an AI uses this tool, it opens a chat session where humans can respond in real-time.
## Why
The AI Agent is encouraged to discuss with you before running off to do its own thing - if its part way through iterating through on a problem it can stop and ask you a question - it reduces requests considerably, helps avoid runaway agent, allows you to manage multiple VSCode agents working in multiple workspaces from one web page. Allows you to append useful reminders to each response.
The AI Agent is encouraged to discuss with you before running off to do its own thing - if its part way through iterating through on a problem it can stop and ask you a question - it reduces requests considerably, helps avoid runaway agent, allows you to manage multiple VSCode agents working in multiple workspaces from one web page. Allows you to append useful reminders to each response.
## How it works
Just install it and its ready to go.
View File
+10
View File
@@ -57,6 +57,11 @@
"command": "humanagent-mcp.restartServer",
"title": "Restart MCP Server",
"icon": "$(debug-restart)"
},
{
"command": "humanagent-mcp.reportIssue",
"title": "Report Issue / Suggestion",
"icon": "$(github)"
}
],
"viewsContainers": {
@@ -109,6 +114,11 @@
"command": "humanagent-mcp.configureMcp",
"when": "view == humanagent-mcp.chatSessions",
"group": "navigation"
},
{
"command": "humanagent-mcp.reportIssue",
"when": "view == humanagent-mcp.chatSessions",
"group": "navigation"
}
]
},
+139
View File
@@ -0,0 +1,139 @@
2025-10-26T07:49:18.344Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761464948033
2025-10-26T07:49:59.917Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761464966618
2025-10-26T08:11:00.236Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761466230989
2025-10-26T08:11:18.528Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761466267040
2025-10-26T08:12:00.250Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761466304326
2025-10-26T08:13:56.309Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761466326170
2025-10-26T08:26:07.026Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761467146049
2025-10-26T08:27:36.491Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761467252427
2025-10-26T08:28:09.158Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761467286148
2025-10-26T08:33:11.032Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761467552778
2025-10-26T08:33:22.023Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761467596772
2025-10-26T08:33:52.256Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761467608599
2025-10-26T08:34:15.410Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761467647417
2025-10-26T08:34:25.019Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761467659576
2025-10-26T08:37:05.862Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761467780335
2025-10-26T08:37:55.983Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761467835070
2025-10-26T08:38:44.800Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761467884334
2025-10-26T08:40:02.021Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761467942756
2025-10-26T08:40:50.019Z - RESPONSE ENDPOINT CALLED - RequestID: 7-1761468012507
2025-10-26T08:43:28.483Z - RESPONSE ENDPOINT CALLED - RequestID: 8-1761468081187
2025-10-26T08:47:24.591Z - RESPONSE ENDPOINT CALLED - RequestID: 9-1761468244847
2025-10-26T08:48:05.020Z - RESPONSE ENDPOINT CALLED - RequestID: 10-1761468482843
2025-10-26T08:51:37.524Z - RESPONSE ENDPOINT CALLED - RequestID: 11-1761468508258
2025-10-26T08:52:25.728Z - RESPONSE ENDPOINT CALLED - RequestID: 12-1761468709089
2025-10-26T08:53:02.931Z - RESPONSE ENDPOINT CALLED - RequestID: 13-1761468766261
2025-10-27T00:10:54.117Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761523819925
2025-10-27T00:11:31.561Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761523862253
2025-10-27T00:11:54.491Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761523898795
2025-10-27T00:13:02.786Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761523922253
2025-10-27T00:17:43.510Z - RESPONSE ENDPOINT CALLED - RequestID: 7-1761523994045
2025-10-27T00:19:25.372Z - RESPONSE ENDPOINT CALLED - RequestID: 8-1761524276979
2025-10-27T22:00:53.290Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761602278383
2025-10-27T22:01:53.672Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761602466179
2025-10-27T22:08:23.192Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761602520990
2025-10-27T22:14:41.232Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761603262389
2025-10-27T22:16:41.443Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761603306811
2025-10-27T22:18:03.880Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761603414140
2025-10-27T22:20:26.540Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761467668933
2025-10-27T22:29:08.803Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761603501106
2025-10-27T22:41:16.394Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761604823177
2025-10-27T22:42:08.602Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761604887974
2025-10-27T22:48:55.763Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761605295442
2025-10-27T22:49:38.593Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761605345034
2025-10-27T22:58:20.212Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761605495336
2025-10-27T23:00:24.133Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761606004477
2025-10-27T23:05:29.355Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761606200895
2025-10-27T23:13:54.806Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761606750076
2025-10-27T23:25:55.659Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761606933258
2025-10-27T23:28:53.759Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761607722451
2025-10-27T23:31:02.884Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761607771955
2025-10-29T22:08:51.550Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761775711055
2025-10-29T22:10:45.713Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761775812472
2025-10-29T22:13:04.243Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761775947542
2025-10-29T23:12:15.875Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761779463670
2025-10-29T23:13:27.617Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761779549127
2025-10-29T23:33:47.313Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761780821752
2025-10-29T23:34:29.979Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761780845474
2025-10-29T23:36:36.815Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761780894871
2025-10-29T23:38:24.677Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761781029563
2025-10-29T23:42:30.453Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761781323718
2025-10-29T23:43:37.433Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761781360699
2025-10-29T23:45:30.702Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761781430386
2025-10-29T23:46:03.796Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761781546760
2025-10-29T23:46:27.952Z - RESPONSE ENDPOINT CALLED - RequestID: 7-1761781582523
2025-10-29T23:47:36.822Z - RESPONSE ENDPOINT CALLED - RequestID: 8-1761781609685
2025-10-29T23:48:05.596Z - RESPONSE ENDPOINT CALLED - RequestID: 9-1761781674964
2025-10-29T23:49:42.434Z - RESPONSE ENDPOINT CALLED - RequestID: 10-1761781720450
2025-10-29T23:56:17.165Z - RESPONSE ENDPOINT CALLED - RequestID: 11-1761781796258
2025-10-30T00:01:09.984Z - RESPONSE ENDPOINT CALLED - RequestID: 7-1761781183448
2025-10-30T00:02:40.733Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761782549653
2025-10-30T00:05:14.179Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761782673032
2025-10-30T00:07:41.932Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761782767355
2025-10-30T00:09:53.261Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761782910460
2025-10-30T00:13:28.972Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761783023538
2025-10-30T00:14:22.217Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761783222739
2025-10-30T00:15:34.149Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761783281577
2025-10-30T00:16:18.949Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761783355796
2025-10-30T00:16:46.857Z - RESPONSE ENDPOINT CALLED - RequestID: 7-1761783397375
2025-10-30T02:15:50.497Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761790528610
2025-10-30T02:19:00.348Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761790562860
2025-10-30T02:20:32.179Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761790754049
2025-10-30T02:21:39.956Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761790843761
2025-10-30T02:22:50.506Z - RESPONSE ENDPOINT CALLED - RequestID: 7-1761790946752
2025-10-30T02:24:22.900Z - RESPONSE ENDPOINT CALLED - RequestID: 8-1761790985682
2025-10-30T02:24:49.820Z - RESPONSE ENDPOINT CALLED - RequestID: 9-1761791076055
2025-10-30T02:28:00.924Z - RESPONSE ENDPOINT CALLED - RequestID: 10-1761791142419
2025-10-30T02:36:13.666Z - RESPONSE ENDPOINT CALLED - RequestID: 11-1761791291422
2025-10-30T02:38:38.942Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761791876595
2025-10-30T02:41:06.782Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761791972951
2025-10-30T02:41:52.950Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761792078907
2025-10-30T02:44:14.777Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761792164512
2025-10-30T02:45:23.000Z - RESPONSE ENDPOINT CALLED - RequestID: 7-1761792265042
2025-10-30T02:45:48.243Z - RESPONSE ENDPOINT CALLED - RequestID: 8-1761792335869
2025-10-30T02:50:59.486Z - RESPONSE ENDPOINT CALLED - RequestID: 9-1761792378519
2025-10-30T02:51:42.071Z - RESPONSE ENDPOINT CALLED - RequestID: 10-1761792670559
2025-10-30T02:58:38.025Z - RESPONSE ENDPOINT CALLED - RequestID: 11-1761792712788
2025-10-30T03:05:58.268Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761793530739
2025-10-30T03:06:05.669Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761793559318
2025-10-30T03:07:18.766Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761793571722
2025-10-30T03:08:09.228Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761793649505
2025-10-30T03:08:47.128Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761793700860
2025-10-30T03:10:03.768Z - RESPONSE ENDPOINT CALLED - RequestID: 7-1761793780508
2025-10-30T03:39:38.041Z - RESPONSE ENDPOINT CALLED - RequestID: 8-1761793817339
2025-10-30T03:41:40.344Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761795682638
2025-10-30T03:42:46.668Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761795762693
2025-10-30T05:55:15.870Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761803701848
2025-10-30T05:56:59.441Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761803750435
2025-10-30T05:58:42.521Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761803904725
2025-10-30T06:01:07.826Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761804045404
2025-10-30T06:03:04.775Z - RESPONSE ENDPOINT CALLED - RequestID: 7-1761804091683
2025-10-30T06:04:24.767Z - RESPONSE ENDPOINT CALLED - RequestID: 8-1761804200588
2025-10-30T06:06:58.423Z - RESPONSE ENDPOINT CALLED - RequestID: 9-1761804413263
2025-10-30T06:08:15.486Z - RESPONSE ENDPOINT CALLED - RequestID: 10-1761804432302
2025-10-30T07:53:40.986Z - RESPONSE ENDPOINT CALLED - RequestID: 11-1761804513257
2025-11-01T05:43:31.326Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761975594153
2025-11-01T05:44:44.593Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761975840128
2025-11-01T05:46:02.578Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761975893720
2025-11-01T05:47:37.974Z - RESPONSE ENDPOINT CALLED - RequestID: 6-1761975979159
2025-11-01T05:50:07.604Z - RESPONSE ENDPOINT CALLED - RequestID: 7-1761976084383
2025-11-01T05:50:33.266Z - RESPONSE ENDPOINT CALLED - RequestID: 8-1761976220601
2025-11-01T05:52:01.162Z - RESPONSE ENDPOINT CALLED - RequestID: 9-1761976255666
2025-11-01T05:52:26.671Z - RESPONSE ENDPOINT CALLED - RequestID: 10-1761976331258
2025-11-01T05:54:50.299Z - RESPONSE ENDPOINT CALLED - RequestID: 11-1761976401710
2025-11-01T05:55:50.730Z - RESPONSE ENDPOINT CALLED - RequestID: 12-1761976536259
2025-11-01T05:59:28.737Z - RESPONSE ENDPOINT CALLED - RequestID: 13-1761976601581
2025-11-01T06:02:55.748Z - RESPONSE ENDPOINT CALLED - RequestID: 14-1761976783362
2025-11-01T06:05:12.686Z - RESPONSE ENDPOINT CALLED - RequestID: 15-1761976992302
2025-11-01T06:06:43.466Z - RESPONSE ENDPOINT CALLED - RequestID: 16-1761977126251
2025-11-01T06:07:09.303Z - RESPONSE ENDPOINT CALLED - RequestID: 17-1761977217241
2025-11-01T06:14:01.310Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761810848278
2025-11-01T06:16:20.555Z - RESPONSE ENDPOINT CALLED - RequestID: 18-1761977721440
2025-11-01T06:19:04.852Z - RESPONSE ENDPOINT CALLED - RequestID: 19-1761977834967
2025-11-01T06:21:41.067Z - RESPONSE ENDPOINT CALLED - RequestID: 20-1761978045835
2025-11-01T06:23:52.033Z - RESPONSE ENDPOINT CALLED - RequestID: 21-1761978196631
2025-11-01T06:30:21.617Z - RESPONSE ENDPOINT CALLED - RequestID: 22-1761978302689
2025-11-01T06:31:20.292Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761978674936
2025-11-01T06:33:25.208Z - RESPONSE ENDPOINT CALLED - RequestID: 4-1761978797111
2025-11-01T06:33:43.539Z - RESPONSE ENDPOINT CALLED - RequestID: 5-1761978813120
2025-11-01T06:36:51.786Z - RESPONSE ENDPOINT CALLED - RequestID: 3-1761978865123
+17 -6
View File
@@ -57,17 +57,22 @@ function getWorkspaceSessionId(context: vscode.ExtensionContext): string {
const workspaceRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath;
const workspaceKey = workspaceRoot ? `workspace-${crypto.createHash('md5').update(workspaceRoot).digest('hex')}` : 'no-workspace';
// Check if running in Extension Development Host
const isDevHost = context.extensionMode === vscode.ExtensionMode.Development;
const devSuffix = isDevHost ? '-dev' : '';
const stateKey = `sessionId-${workspaceKey}${devSuffix}`;
// Try to get existing session ID from global state
let sessionId = context.globalState.get<string>(`sessionId-${workspaceKey}`);
let sessionId = context.globalState.get<string>(stateKey);
if (!sessionId) {
// Generate new UUID-based session ID
sessionId = `session-${crypto.randomUUID()}`;
sessionId = `session-${crypto.randomUUID()}${devSuffix}`;
// Store it persistently
context.globalState.update(`sessionId-${workspaceKey}`, sessionId);
console.log(`Generated new workspace session ID: ${sessionId} for ${workspaceKey}`);
context.globalState.update(stateKey, sessionId);
console.log(`Generated new workspace session ID: ${sessionId} for ${workspaceKey}${isDevHost ? ' (dev host)' : ''}`);
} else {
console.log(`Retrieved existing workspace session ID: ${sessionId} for ${workspaceKey}`);
console.log(`Retrieved existing workspace session ID: ${sessionId} for ${workspaceKey}${isDevHost ? ' (dev host)' : ''}`);
}
return sessionId;
@@ -328,6 +333,11 @@ export async function activate(context: vscode.ExtensionContext) {
}
});
// Register report issue command
const reportIssueCommand = vscode.commands.registerCommand('humanagent-mcp.reportIssue', () => {
vscode.env.openExternal(vscode.Uri.parse('https://github.com/benharper/HumanAgent-MCP/issues'));
});
// Add all disposables to context
context.subscriptions.push(
treeView,
@@ -338,7 +348,8 @@ export async function activate(context: vscode.ExtensionContext) {
startServerCommand,
stopServerCommand,
restartServerCommand,
configureMcpCommand
configureMcpCommand,
reportIssueCommand
);
// Show welcome message
+33 -2
View File
@@ -301,8 +301,8 @@ export class McpServer extends EventEmitter {
},
timeout: {
type: 'number',
description: 'Timeout in seconds to wait for human response (default: 300)',
default: 300
description: 'Timeout in seconds to wait for human response (default: 600)',
default: 600
}
},
required: ['message']
@@ -1230,6 +1230,18 @@ export class McpServer extends EventEmitter {
border-bottom: 2px solid var(--vscode-button-background);
}
.tab.has-new-message {
background-color: var(--vscode-button-background);
color: var(--vscode-button-foreground);
position: relative;
}
.tab.has-new-message::after {
content: '💬';
margin-left: 6px;
font-size: 12px;
}
.content {
flex: 1;
display: flex;
@@ -1403,6 +1415,10 @@ export class McpServer extends EventEmitter {
// Update active tab
document.querySelectorAll('.tab').forEach(tab => {
tab.classList.toggle('active', tab.dataset.session === sessionId);
// Remove new message indicator when switching to that tab
if (tab.dataset.session === sessionId) {
tab.classList.remove('has-new-message');
}
});
// Update active chat container
@@ -1412,6 +1428,17 @@ export class McpServer extends EventEmitter {
activeSessionId = sessionId;
}
// Function to highlight tabs with new messages
function highlightTabWithNewMessage(sessionId) {
// Only highlight if it's not the currently active session
if (sessionId !== activeSessionId) {
const tab = document.querySelector(\`[data-session="\${sessionId}"].tab\`);
if (tab && !tab.classList.contains('active')) {
tab.classList.add('has-new-message');
}
}
}
// Message sending
document.addEventListener('click', (e) => {
@@ -1706,8 +1733,12 @@ export class McpServer extends EventEmitter {
// Handle different types of updates
if (data.type === 'chat_message' && data.sessionId && data.message) {
addMessageToUI(data.sessionId, data.message.sender, data.message.content, data.message.source, data.message.timestamp);
// Highlight tab if not currently active
highlightTabWithNewMessage(data.sessionId);
} else if (data.type === 'message' && data.sessionId) {
addMessageToUI(data.sessionId, data.role || 'assistant', data.content, null, null);
// Highlight tab if not currently active
highlightTabWithNewMessage(data.sessionId);
} else if (data.type === 'request-state-change' && data.data) {
// Handle request state changes for input control
console.log('Web interface received request-state-change:', data.data);
+5 -18
View File
@@ -82,11 +82,6 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider {
// AI messages are now handled by SSE events - no need to store locally
this.updateWebview();
// Play notification sound if enabled
if (this.notificationSettings.enableSound) {
await this.playNotificationSound();
}
// Trigger flashing animation if enabled
if (this.notificationSettings.enableFlashing) {
this.triggerFlashingBorder();
@@ -153,10 +148,7 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider {
vscode.commands.executeCommand('humanagent-mcp.showStatus');
break;
case 'playNotificationSound':
// Play sound from extension side (Node.js) when webview requests it
if (this.notificationSettings.enableSound) {
await this.playNotificationSound();
}
// Sound removed - only play on AI tool calls
break;
case 'sessionNameUpdated':
// Handle session name update from SSE event
@@ -896,9 +888,8 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider {
document.body.classList.remove('flashing');
}, 2000);
} else if (message.type === 'playSound') {
// Play notification sound
console.log('Playing notification sound...');
playNotificationBeep();
// Sound removed - only play on AI tool calls
console.log('Sound trigger removed - only playing on AI tool calls');
} else if (message.command === 'updateOverrideFileExists') {
// Update override file existence and refresh cog menu
window.overrideFileExists = message.exists;
@@ -1053,8 +1044,7 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider {
}
}
// Play notification
playNotificationBeep();
// Sound removed - only play on AI tool calls
// Flash border
document.body.classList.add('flashing');
@@ -1097,10 +1087,7 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider {
// Use unified addMessageToUI function
addMessageToUI(message);
// Play notification for assistant messages
if (message.sender === 'agent') {
playNotificationBeep();
}
// Sound removed - only play on AI tool calls
}
}