diff --git a/src/mcp/pushChannel.ts b/src/mcp/pushChannel.ts index 0349b95..4bbe910 100644 --- a/src/mcp/pushChannel.ts +++ b/src/mcp/pushChannel.ts @@ -1,4 +1,7 @@ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { writeFileSync, mkdirSync } from 'node:fs'; +import { join } from 'node:path'; +import { homedir } from 'node:os'; import { parseSSEBuffer } from '../cli/commands/watch.js'; import { remoteClient } from '../cli/remoteClient.js'; @@ -79,6 +82,21 @@ export function bindPushChannel(server: McpServer, serverUrl: string, agent: str const state: PushState = { agent: name, names: new Set([name]), stop: () => { stopped = true; } }; active = state; + // DIAGNOSE: Was deklariert der CLI-Host ueberhaupt? `sendLoggingMessage` + // nuetzt nichts, wenn der Client `logging` nicht deklariert — dann verwirft + // seine SDK-Seite die Notification, bevor das Modell sie je sieht. Genau das + // ist der Verdacht, nachdem codex und kimi den Push nicht wahrgenommen haben. + // Wir schreiben es weg, statt zu spekulieren. + try { + const caps = server.server.getClientCapabilities(); + const dir = join(homedir(), '.cache', 'agenthub'); + mkdirSync(dir, { recursive: true }); + writeFileSync( + join(dir, `client-capabilities-${name}.json`), + JSON.stringify({ agent: name, at: new Date().toISOString(), capabilities: caps ?? null }, null, 2), + ); + } catch { /* Diagnose darf den Kanal nie blockieren */ } + void (async () => { // Aliase mitnehmen, damit ein umbenannter Agent seine Events weiter bekommt. try {