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

@ -5,6 +5,7 @@ import { Save, Download } from "lucide-react";
import { ArchitectCanvas } from "@/app/components/ArchitectCanvas";
import { NodeSidebar } from "@/app/components/panels/NodeSidebar";
import { NodeSettingsPanel } from "@/app/components/panels/NodeSettingsPanel";
import { EdgeSettingsPanel } from "@/app/components/panels/EdgeSettingsPanel";
import { useCouncilStore } from "@/app/store/council-store";
import { parseGraphToBlueprint } from "@/app/utils/blueprint-parser";
import { councilApi } from "@/app/utils/api-client";
@ -14,6 +15,8 @@ export default function RatArchitektPage() {
const edges = useCouncilStore((s) => s.edges);
const councilName = useCouncilStore((s) => s.councilName);
const setCouncilName = useCouncilStore((s) => s.setCouncilName);
const selectedNodeId = useCouncilStore((s) => s.selectedNodeId);
const selectedEdgeId = useCouncilStore((s) => s.selectedEdgeId);
const handleSave = async () => {
const blueprint = parseGraphToBlueprint(nodes, edges, councilName);
@ -73,7 +76,8 @@ export default function RatArchitektPage() {
<ReactFlowProvider>
<NodeSidebar />
<ArchitectCanvas />
<NodeSettingsPanel />
{selectedNodeId && <NodeSettingsPanel />}
{selectedEdgeId && <EdgeSettingsPanel />}
</ReactFlowProvider>
</div>
</div>