fix: Dezimalkomma im Rechner, Anhang-Vorschau über der Eingabezeile

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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S1NXUpHbxTusqQmsjrFfbU
This commit is contained in:
Jeuner 2026-08-26 19:29:58 +02:00
parent 33125e1420
commit 9936b35b48
2 changed files with 15 additions and 4 deletions

View file

@ -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: {

View file

@ -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;