From b19c189e2e4b1a2851b6122b4de99eeb3b32c328 Mon Sep 17 00:00:00 2001 From: dschlueter Date: Wed, 20 May 2026 02:08:09 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20prominente=20Abschluss-Notifications=20?= =?UTF-8?q?+=20Widget-Update=20f=C3=BCr=20/optimize=20und=20/shipit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pi-coder-judge-extension.ts | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/pi-coder-judge-extension.ts b/pi-coder-judge-extension.ts index 7323e49..6c91bb5 100644 --- a/pi-coder-judge-extension.ts +++ b/pi-coder-judge-extension.ts @@ -456,6 +456,28 @@ async function runUpdateDoku(pi: ExtensionAPI, ctx: ExtensionCommandContext): Pr ctx.ui.notify("Dokumentations-Phase abgeschlossen. Commit angelegt.", "info"); } +// Prominente Abschluss-Notification + Widget-Update mit Uhrzeit und Ergebnis. +function finalNotify( + ctx: ExtensionCommandContext, + verdict: string, + detail: string +): void { + const timestamp = new Date().toLocaleTimeString("de-DE", { hour: "2-digit", minute: "2-digit" }); + const level = verdict.includes("SHIP") && !verdict.includes("NO-SHIP") ? "warning" + : verdict.includes("NO-SHIP") ? "error" + : verdict.includes("⚠") ? "warning" + : "info"; + ctx.ui.notify(`${verdict}: ${detail}`, level); + ctx.ui.setWidget("coder-judge", [ + `Letzter Lauf: ${verdict} — ${detail} (${timestamp})`, + "─────────────────────────────────────────", + "Workflow: /coder | /judge | /fix | /shipit", + "Auto-Loop: /optimize [--rounds N] [--with-doku] [--continue]", + "Kleine Änderung: /patch <änderung> → /quick_check [was]", + "Finale Doku: /update_doku | Neues Projekt: /new_project ", + ]); +} + // ── Extension ──────────────────────────────────────────────────────────────── export default function (pi: ExtensionAPI) { @@ -540,6 +562,7 @@ export default function (pi: ExtensionAPI) { description: "Finale Freigabe gegen TASK.md + git log → qwen3.5-judge (:8002).", handler: async function (args: string, ctx: ExtensionCommandContext) { await switchModel(pi, ctx, "llama-cpp-judge", "qwen3.5-judge"); + ctx.ui.notify("Judge prüft finale Freigabe — Ergebnis erscheint im Chat (SHIP / NO-SHIP)", "info"); pi.sendUserMessage(shipitPrompt(args || "")); } }); @@ -593,7 +616,6 @@ export default function (pi: ExtensionAPI) { if (verdict === "PASS" || verdict === "PASS WITH CONCERNS") { await tickTaskMdStatus(pi, ctx, "Review bestanden (PASS)"); ctx.ui.setStatus("optimize", `✓ ${verdict} nach Runde ${round}`); - ctx.ui.notify(`Optimierung abgeschlossen: ${verdict} nach ${round} Runde(n)`, "info"); break; } @@ -601,17 +623,14 @@ export default function (pi: ExtensionAPI) { const currentBlockers = parseBlockers(judgeText); if (currentBlockers && currentBlockers === lastBlockers) { ctx.ui.setStatus("optimize", "⚠ Schleife: gleicher Blocker – manuelle Intervention nötig"); - ctx.ui.notify( - "Derselbe Blocker tritt erneut auf – Schleife abgebrochen. Bitte manuell prüfen.", - "warning" - ); + finalNotify(ctx, "⚠ Schleife", "Gleicher Blocker zweimal – manuelle Intervention nötig"); return; } lastBlockers = currentBlockers; if (round === maxRounds) { ctx.ui.setStatus("optimize", `⚠ Max. ${maxRounds} Runden ohne PASS`); - ctx.ui.notify(`${maxRounds} Runden durchlaufen ohne PASS. Bitte manuell prüfen.`, "warning"); + finalNotify(ctx, "⚠ Kein PASS", `${maxRounds} Runden ohne PASS – bitte /judge und /fix manuell`); return; } @@ -632,6 +651,7 @@ export default function (pi: ExtensionAPI) { if (shipVerdict === "SHIP") { ctx.ui.setStatus("optimize", "🚀 SHIP – produktionsreif"); + finalNotify(ctx, "🚀 SHIP", "Programm ist produktionsreif"); if (withDoku) { await runUpdateDoku(pi, ctx); } else { @@ -639,8 +659,10 @@ export default function (pi: ExtensionAPI) { } } else if (shipVerdict === "NO-SHIP") { ctx.ui.setStatus("optimize", "⛔ NO-SHIP – noch nicht bereit"); + finalNotify(ctx, "⛔ NO-SHIP", "Noch Blocker offen – bitte /judge und /fix manuell"); } else { ctx.ui.setStatus("optimize", "ShipIt abgeschlossen"); + finalNotify(ctx, "ShipIt", "Kein klares Urteil – Antwort im Chat prüfen"); } } }