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:
parent
a203589eda
commit
48fd61fd01
3 changed files with 51 additions and 23 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue