@debugai/mcp
Advanced tools
@@ -47,2 +47,11 @@ import type { AuthProvider } from './auth.js'; | ||
| memory_fix_confirmed?: boolean; | ||
| /** | ||
| * Four-valued: 'none' | 'confirmed' | 'unproven' | 'anti_pattern'. Sent by | ||
| * the engine since 2026-08-21. Absent from an older engine, where | ||
| * memory_fix_confirmed is the whole story — and that boolean now goes false | ||
| * on demotion, so the degraded reading is safe rather than wrong. | ||
| */ | ||
| memory_fix_state?: string; | ||
| /** Times a live session watched the error stop after the fix. A click does not count. */ | ||
| memory_verified_count?: number; | ||
| } | ||
@@ -49,0 +58,0 @@ export interface OutcomeRequest { |
@@ -129,5 +129,49 @@ import { z } from 'zod'; | ||
| : 'before in this project'; | ||
| sections.push(result.memory_fix_confirmed | ||
| ? `\n## Seen before\nThis error has been seen ${seen}, and a fix was confirmed working. The confirmed fix led the analysis above.` | ||
| : `\n## Seen before\nThis error has been seen ${seen}. No fix has been confirmed for it yet.`); | ||
| // Four states, not two. Until 2026-08-21 this said "a fix was | ||
| // confirmed working" on the strength of somebody clicking Apply, | ||
| // and a fix that had been tried and FAILED was indistinguishable | ||
| // from one nobody had ever tried — both fell into the else branch | ||
| // and read "no fix has been confirmed yet". An agent reading that | ||
| // will happily re-propose the fix that already did not work, which | ||
| // is the loop this whole change exists to break. | ||
| // | ||
| // memory_fix_state is what the engine sends now. When it is absent | ||
| // (older engine) the boolean still decides, exactly as before. | ||
| const state = typeof result.memory_fix_state === 'string' | ||
| ? result.memory_fix_state | ||
| : (result.memory_fix_confirmed ? 'confirmed' : 'none'); | ||
| const verified = typeof result.memory_verified_count === 'number' | ||
| ? result.memory_verified_count | ||
| : 0; | ||
| let memoryBody; | ||
| if (state === 'confirmed' && verified > 0) { | ||
| memoryBody = | ||
| `This error has been seen ${seen}. A fix for it was VERIFIED BY ` + | ||
| `OBSERVATION ${verified}x: a live session watched the error stop ` + | ||
| `after that fix was applied. It led the analysis above.`; | ||
| } | ||
| else if (state === 'confirmed') { | ||
| memoryBody = | ||
| `This error has been seen ${seen}. A fix for it was applied and ` + | ||
| `accepted by a developer, though nothing has observed it working. ` + | ||
| `It led the analysis above. Treat it as a strong lead, not proof.`; | ||
| } | ||
| else if (state === 'unproven') { | ||
| memoryBody = | ||
| `This error has been seen ${seen}. A fix was applied for it and ` + | ||
| `THE ERROR HAS RECURRED ONCE SINCE, so that fix is unproven. The ` + | ||
| `analysis above was told not to lead with it.`; | ||
| } | ||
| else if (state === 'anti_pattern') { | ||
| memoryBody = | ||
| `This error has been seen ${seen}. A fix was applied for it and ` + | ||
| `THE ERROR KEPT HAPPENING. That fix did not work and the analysis ` + | ||
| `above was told not to propose it again. If you are about to ` + | ||
| `suggest something equivalent, the cause is somewhere it does not ` + | ||
| `touch.`; | ||
| } | ||
| else { | ||
| memoryBody = `This error has been seen ${seen}. No fix has been confirmed for it yet.`; | ||
| } | ||
| sections.push(`\n## Seen before\n${memoryBody}`); | ||
| } | ||
@@ -180,2 +224,3 @@ const badges = []; | ||
| memory_fix_confirmed: result.memory_fix_confirmed ?? false, | ||
| memory_fix_state: result.memory_fix_state ?? null, | ||
| // Which files this server read off disk, if any. Empty when the | ||
@@ -182,0 +227,0 @@ // agent supplied its own snippet or nothing resolved. |
+1
-1
| { | ||
| "name": "@debugai/mcp", | ||
| "version": "2.2.0", | ||
| "version": "2.3.0", | ||
| "mcpName": "io.github.1shizaan/debugai-mcp", | ||
@@ -5,0 +5,0 @@ "description": "DebugAI MCP server. One command sets it up in Claude Desktop, Claude Code, Cursor, Zed, Windsurf, Cline or any MCP client: browser sign-in, no key pasting, no config editing.", |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
130328
2.55%2611
2.11%