Backend (Mini-Backend 1-2h): - Migration 016: ai_prompts.graph_data JSONB column - workflow_executor: graph_data parameter support (backward-compatible) - prompt_executor: execute_workflow_prompt uses graph_data Frontend (Main effort 25-35h): - WorkflowCanvas: React Flow wrapper component - 5 Custom Nodes: Start, End, Analysis, Logic, Join - 4 Config Panels: QuestionAugmentation, LogicExpression, Fallback, Join - workflowValidation: Structural + logical validation - workflowSerializer: Canvas ↔ JSONB conversion - WorkflowEditorPage: Main orchestration (420 LOC) - Route: /workflow-editor/:id - CSS: workflowEditor.css (300 LOC) Architecture: - Option B: ai_prompts.type='workflow' (not separate table) - panels/ subdirectory for clean separation - WorkflowCanvas reusable component - User GUI identical (Workflows = Prompts) - Backward-compatible (type='pipeline' unchanged) Version: v0.9m → v0.9n (Phase 5 complete) Module: workflow 0.5.0 → 0.6.0 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
36 lines
1.4 KiB
SQL
36 lines
1.4 KiB
SQL
-- Migration 016: Workflow Support in ai_prompts (Phase 5)
|
|
-- Erweitert ai_prompts für type='workflow' (Option B - Backward-kompatibel)
|
|
|
|
-- Neue Spalte für Workflow-Graphen
|
|
ALTER TABLE ai_prompts ADD COLUMN graph_data JSONB;
|
|
|
|
-- Index für Workflow-Queries
|
|
CREATE INDEX IF NOT EXISTS idx_ai_prompts_type ON ai_prompts(type);
|
|
CREATE INDEX IF NOT EXISTS idx_ai_prompts_graph_data ON ai_prompts USING GIN (graph_data);
|
|
|
|
-- Kommentar
|
|
COMMENT ON COLUMN ai_prompts.graph_data IS 'Workflow-Graph (nur für type=workflow): {nodes: [...], edges: [...], metadata: {...}}';
|
|
|
|
-- Beispiel-Struktur (Dokumentation):
|
|
-- {
|
|
-- "nodes": [
|
|
-- {"id": "start", "type": "start", "label": "Start", "position": {"x": 100, "y": 100}},
|
|
-- {"id": "analysis_1", "type": "analysis", "prompt_id": 5, "questions": [...], ...},
|
|
-- {"id": "logic_1", "type": "logic", "condition": {...}, ...},
|
|
-- {"id": "join_1", "type": "join", "join_strategy": "wait_all", ...},
|
|
-- {"id": "end", "type": "end", "label": "Ende", "position": {"x": 500, "y": 300}}
|
|
-- ],
|
|
-- "edges": [
|
|
-- {"id": "e1", "source": "start", "target": "analysis_1"},
|
|
-- {"id": "e2", "source": "analysis_1", "target": "logic_1"},
|
|
-- {"id": "e3", "source": "logic_1", "target": "join_1"},
|
|
-- {"id": "e4", "source": "join_1", "target": "end"}
|
|
-- ],
|
|
-- "metadata": {
|
|
-- "created_at": "2026-04-04T12:00:00Z",
|
|
-- "version": "1.0"
|
|
-- }
|
|
-- }
|
|
|
|
-- Migration erfolgreich
|