Fix: Auto-Session erscheint sofort in Session-Liste

- ChatPanel: emit('session-created') nach Auto-Session-Erstellung
- SessionList: listen('session-created') + loadSessions() Refresh
- TEST-ROADMAP: Experten-Modus + Session-Fix verifiziert

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Eddy 2026-04-15 13:08:53 +02:00
parent a203589eda
commit 48fd61fd01
3 changed files with 51 additions and 23 deletions

View file

@ -1,6 +1,6 @@
# Claude Desktop — Test-Roadmap (Fortsetzung)
**Stand:** 14.04.2026 · Session-Ende nahe Token-Limit
**Stand:** 15.04.2026
## Was bereits getestet & funktioniert
- ✅ Hooks-Panel: 5 Built-in Hooks sichtbar & toggelbar
@ -13,34 +13,30 @@
- ✅ Filter-Dropdown im Monitor-Panel sichtbar
- ✅ Copy-Button in Chat-Nachrichten
- ✅ Error-Banner mit kopierbarem Text im Programme-Panel
- ✅ **Date-Panic in Wissensbasis GEFIXT** (15.04.2026, Commit a203589)
- ✅ **Chat-Antwort bei komplexen Flows VERIFIZIERT** (15.04.2026)
- ✅ **VSCodium-Extension Verbindung OK** (15.04.2026)
- ✅ **Auto-Session erscheint in Liste** (15.04.2026, session-created Event)
- ✅ **Experten-Modus funktioniert** (15.04.2026, Research-Agent + Architekturanalyse)
## Offene Bugs (Reihenfolge der Priorität)
## Erledigte Bugs
### 1. Chat-Antwort bei komplexen Flows fehlt (HALB GEFIXT)
**Symptom:** Bei Handlanger-Chats mit Sub-Agent wird die finale Antwort nicht im Chat angezeigt.
**Ursache:** Streaming-Text-Events kommen nicht, nur `result.text` am Ende.
**Fix (drin):** Fallback in `events.ts` auf `result.text` wenn `content` leer.
**Zu verifizieren:** Nächster Chat im Handlanger-Modus — erscheint jetzt die Antwort?
### ~~1. Chat-Antwort bei komplexen Flows fehlt~~ ✅ GEFIXT
**Verifiziert:** 15.04.2026 — Handlanger-Modus mit Sub-Agent zeigt finale Antwort korrekt an.
### 2. Date-Panic in Wissensbasis
**Symptom:** `Couldn't convert Row... Date(...) to String` bei jeder Wissens-Suche / Tool-Hints.
**Ursache:** MySQL liefert TIMESTAMP als `Value::Date`, Tupel erwartet `String`.
**Fix:** 7 SELECTs in [knowledge.rs](src-tauri/src/knowledge.rs) einzeln auf `chrono::NaiveDateTime` umstellen.
**Nicht:** `replace_all` auf "created_at, updated_at" — das zerstört Rust-Tupel-Identifier (schon 1× passiert).
### ~~2. Date-Panic in Wissensbasis~~ ✅ GEFIXT
**Commit:** a203589
**Fix:** 7 SELECTs in knowledge.rs auf `chrono::NaiveDateTime` umgestellt, mysql_async mit chrono-Feature.
### 3. VSCodium-Extension nicht getestet
**Was zu tun:**
- `cd vscode-extension && npm run compile` (bereits OK)
- VSCodium öffnen, Extension via F5 in Dev-Host laden
- App: Programme → 🧩 VSCodium → Port 7890 → Verbinden
- Ping-Test, Datei öffnen
### ~~3. VSCodium-Extension nicht getestet~~ ✅ GETESTET
**Status:** Extension kompiliert, VSIX erstellt, Verbindung auf Port 7890 funktioniert.
### 4. Xvfb-Screenshot fehlt Tool
**Status:** Xvfb-Start funktioniert, Screenshot braucht `imagemagick` (scrot/ffmpeg-x11 fehlen in NixOS-Build).
**Fix:** `imagemagick` in `/etc/nixos/configuration.nix``nixos-rebuild switch`.
### 5. Experten-Modus nicht getestet
**Analog zu Handlanger:** neue Session, Experten-Modus, Aufgabe mit Research/Implement-Charakter.
### ~~5. Experten-Modus nicht getestet~~ ✅ GETESTET
**Verifiziert:** 15.04.2026 — Research-Agent analysiert Projekt, erstellt Architektur-Übersicht.
### 6. Haiku-Kostenersparnis funktioniert nicht
**Status:** Sub-Agents laufen auf Opus (inherit vom Main). Custom `agents`-Option in SDK scheint ignoriert zu werden bzw. spawnt Agents ohne Tools (halluziniert).
@ -51,7 +47,8 @@
- `src-tauri/src/claude.rs` — claude_session_id nur 1× setzen, generic event emit
- `src-tauri/src/knowledge.rs` — IP+PW korrekt (155.11/8715)
- `src/lib/stores/events.ts` — mode-changed Listener, result.text Fallback, addAgent({id})
- `src/lib/components/ChatPanel.svelte` — Copy-Button, Typing-Dots in Bubble (kein Doppel-Header)
- `src/lib/components/ChatPanel.svelte` — Copy-Button, Typing-Dots, Auto-Session + session-created Event
- `src/lib/components/SessionList.svelte` — session-created Listener für Auto-Refresh
- `src/lib/components/AgentView.svelte` — Nur-aktive-Toggle, Delegations-Badge, Tool-Count hidden bei 0
- `src/lib/components/ProgramsPanel.svelte` — Error-Banner mit Copy
- `src/lib/components/MonitorPanel.svelte` — Filter-Dropdown Styling

View file

@ -1,5 +1,6 @@
<script lang="ts">
import { invoke } from '@tauri-apps/api/core';
import { emit } from '@tauri-apps/api/event';
import { messages, currentInput, isProcessing, addMessage, currentSessionId, messageToDb, type Message } from '$lib/stores/app';
import { marked, type Tokens } from 'marked';
import { tick, onDestroy, onMount } from 'svelte';
@ -394,6 +395,24 @@
const text = $currentInput.trim();
if (!text || $isProcessing) return;
// Auto-Session erstellen falls keine aktiv
let sessionId = get(currentSessionId);
if (!sessionId) {
try {
const title = `Session ${new Date().toLocaleDateString('de-DE')} ${new Date().toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' })}`;
const newSession = await invoke<{ id: string }>('create_session', { title });
sessionId = newSession.id;
$currentSessionId = sessionId;
console.log('📂 Auto-Session erstellt:', title);
// SessionList benachrichtigen
await emit('session-created', { id: sessionId });
} catch (err) {
console.error('Session-Erstellung fehlgeschlagen:', err);
addMessage('system', `Fehler: Konnte keine Session erstellen - ${err}`);
return;
}
}
// Nachricht hinzufügen (wird durch den Store-Subscriber gespeichert)
const msgId = crypto.randomUUID();
const msg: Message = {

View file

@ -1,6 +1,7 @@
<script lang="ts">
import { onMount } from 'svelte';
import { onMount, onDestroy } from 'svelte';
import { invoke } from '@tauri-apps/api/core';
import { listen, type UnlistenFn } from '@tauri-apps/api/event';
import { messages, clearAll, isProcessing, currentSessionId, setMessagesFromDb, type DbMessage } from '$lib/stores/app';
interface Session {
@ -51,8 +52,19 @@
}
}
onMount(() => {
let sessionCreatedListener: UnlistenFn | null = null;
onMount(async () => {
loadSessions();
// Auf Auto-Session-Erstellung vom ChatPanel hören
sessionCreatedListener = await listen('session-created', () => {
console.log('📂 Session erstellt, Liste aktualisieren');
loadSessions();
});
});
onDestroy(() => {
sessionCreatedListener?.();
});
async function createSession() {