Implement Phase 4: tools, God Mode, and missing features

Backend:
- Add Tavily web search tool wrapper (tools/web_search.py)
- Add PDF reader + ChromaDB vector store tool (tools/pdf_reader.py)
- Bind tools to LLM calls via .bind_tools() in dynamic_graph_builder
- Implement God Mode using LangGraph interrupt_before + MemorySaver
- Add approve/reject/modify API endpoints for God Mode
- Add PDF upload endpoint with ingestion pipeline
- Add persistent run history (CouncilRun model + run_service + API)
- Add Alembic migration for council_runs table
- Enhance WebSocket to emit run_paused and run_resumed events
- Add tests for tools, God Mode, and run history

Frontend:
- Add God Mode approval UI (GodModePanel component)
- Add Auto-Pilot / God Mode toggle in Konferenzzimmer
- Add functional PDF upload handler
- Add Conditional Edge editor (EdgeSettingsPanel component)
- Add edge click selection in ArchitectCanvas
- Update Zustand store with edge selection and update actions
- Update types for God Mode, execution modes, and WS events
- Update API client with God Mode, PDF upload, and blueprint run endpoints
- Update WebSocket hook for paused/resumed events
- Add Vitest config and frontend tests (store, parser, types, API)

https://claude.ai/code/session_017U6idFgaqnYTXzPxA7mxMv
This commit is contained in:
Claude 2026-02-21 10:53:12 +00:00
parent c6d0c4a636
commit 001649a364
No known key found for this signature in database
31 changed files with 2502 additions and 81 deletions

View file

@ -51,7 +51,9 @@ export interface CouncilBlueprint {
}
// Council run (execution)
export type RunStatus = "pending" | "running" | "completed" | "failed";
export type RunStatus = "pending" | "running" | "completed" | "failed" | "paused";
export type ExecutionMode = "auto-pilot" | "god-mode";
export interface CouncilRun {
run_id: string;
@ -61,13 +63,43 @@ export interface CouncilRun {
error?: string;
}
// God Mode state from the backend
export interface GodModeState {
run_id: string;
paused: boolean;
next_nodes: string[];
current_state: {
current_draft?: string;
critic_score?: number;
iteration_count?: number;
feedback_history?: string[];
};
}
export type GodModeAction = "approve" | "reject" | "modify";
// WebSocket messages from backend
export type WSMessageType = "node_enter" | "node_exit" | "run_complete" | "run_error";
export type WSEventType =
| "connected"
| "node_active"
| "run_paused"
| "run_resumed"
| "run_complete"
| "run_failed";
export interface WSMessage {
type: WSMessageType;
node_id?: string;
node_name?: string;
result?: string;
event: WSEventType;
run_id: string;
// node_active
node?: string;
iteration?: number;
// run_paused
next_nodes?: string[];
current_draft?: string;
critic_score?: number;
iteration_count?: number;
// run_complete
final_draft?: string;
// run_failed
error?: string;
}