From 9936b35b48208d747559c25eca4df0562a1d5177 Mon Sep 17 00:00:00 2001 From: Jeuner <62662523+Jeuners@users.noreply.github.com> Date: Wed, 26 Aug 2026 19:29:58 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Dezimalkomma=20im=20Rechner,=20Anhang-Vo?= =?UTF-8?q?rschau=20=C3=BCber=20der=20Eingabezeile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beide Fehler zeigten sich beim Durchspielen mit einem Bild in der laufenden Oberfläche: - calculate lehnte "87,50" ab. Das Modell rechnet bei deutschen Beträgen natürlicherweise mit Komma und musste einen Aufruf verschwenden, um sich selbst zu korrigieren — sichtbar als fehlgeschlagener erster Aufruf. Der Tokenizer nimmt Komma jetzt als Dezimaltrenner an, die Beschreibung des Werkzeugs sagt das auch. Danach genügten zwei Aufrufe statt drei. - Die Anhang-Vorschau saß neben der Eingabezeile statt darüber: .composer war bereits eine Flex-Zeile, wodurch .attachments zum Flex-Geschwister wurde. Der Container ist jetzt eine Spalte, .composer-row übernimmt die Zeile. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01S1NXUpHbxTusqQmsjrFfbU --- server/src/tools/calculate.ts | 11 +++++++---- web/src/styles.css | 8 ++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/server/src/tools/calculate.ts b/server/src/tools/calculate.ts index 5882819..6a87c2d 100644 --- a/server/src/tools/calculate.ts +++ b/server/src/tools/calculate.ts @@ -18,10 +18,12 @@ function tokenize(input: string): Token[] { while (i < input.length) { const c = input[i]; if (/\s/.test(c)) { i++; continue; } - if (/[0-9.]/.test(c)) { + if (/[0-9.,]/.test(c)) { let num = ""; - while (i < input.length && /[0-9._]/.test(input[i])) num += input[i++]; - const value = Number(num.replace(/_/g, "")); + while (i < input.length && /[0-9._,]/.test(input[i])) num += input[i++]; + // Das Modell rechnet mit deutschen Beträgen und schreibt "87,50". + // Komma gilt deshalb als Dezimaltrenner. + const value = Number(num.replace(/_/g, "").replace(",", ".")); if (!Number.isFinite(value)) throw new ToolError(`Ungültige Zahl: ${num}`); tokens.push({ kind: "num", value }); continue; @@ -95,7 +97,8 @@ export const calculateTool: Tool = { name: "calculate", description: "Berechnet einen arithmetischen Ausdruck exakt. Nutze dies für jede " + - "Rechnung statt selbst zu rechnen. Erlaubt: + - * / % ^ und Klammern.", + "Rechnung statt selbst zu rechnen. Erlaubt: + - * / % ^ und Klammern. " + + "Dezimaltrenner darf Punkt oder Komma sein (87.50 wie 87,50).", parameters: { type: "object", properties: { diff --git a/web/src/styles.css b/web/src/styles.css index b0bf939..094de12 100644 --- a/web/src/styles.css +++ b/web/src/styles.css @@ -545,6 +545,14 @@ body { outline-offset: -4px; } +/* .composer ist ursprünglich eine Flex-Zeile. Die Anhang-Vorschau gehört + darüber, deshalb wird der Container zur Spalte und .composer-row übernimmt + die frühere Zeilen-Rolle. */ +.composer { + flex-direction: column; + align-items: stretch; +} + .composer-row { display: flex; align-items: flex-end;