{
"tool_response": {
"type": "update",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/View\/content\/partials\/generating.php",
"content": "<?php\n\/**\n * Generating Progress Partial with Live Log (HTMX Polling)\n *\n * @var int $orderId Order ID for polling\n * @var string $log Current log content\n * @var string $step Current step\n *\/\n$log = $log ?? '';\n$step = $step ?? '';\n?>\n<div class=\"generating-container\"\n hx-get=\"\/content\/<?= $orderId ?>\/generation-status\"\n hx-trigger=\"load delay:1s\"\n hx-swap=\"outerHTML\">\n\n <div class=\"generating-header\">\n <div class=\"generating-spinner\">\n <span class=\"generating-dot\"><\/span>\n <span class=\"generating-dot\"><\/span>\n <span class=\"generating-dot\"><\/span>\n <\/div>\n <span class=\"generating-status\">\n <?php\n $stepLabels = [\n 'init' => 'Initialisierung...',\n 'rag' => 'Suche Dokumente...',\n 'sources' => 'Quellen gefunden',\n 'llm' => 'Generiere Content...',\n 'done' => 'Fertig!',\n 'error' => 'Fehler',\n ];\n echo $stepLabels[$step] ?? 'Content wird generiert...';\n ?>\n <\/span>\n <\/div>\n\n <?php if ($log): ?>\n <pre class=\"generating-log\"><?= htmlspecialchars($log) ?><\/pre>\n <?php else: ?>\n <pre class=\"generating-log\">Warte auf Ausgabe...<\/pre>\n <?php endif; ?>\n\n<\/div>\n\n<style>\n.generating-container {\n background: var(--color-bg-muted);\n border: 1px solid var(--color-border);\n border-radius: 8px;\n padding: var(--space-md);\n margin: var(--space-md) 0;\n}\n\n.generating-header {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n margin-bottom: var(--space-sm);\n}\n\n.generating-spinner {\n display: inline-flex;\n gap: 4px;\n}\n\n.generating-dot {\n width: 8px;\n height: 8px;\n background: var(--color-primary);\n border-radius: 50%;\n animation: generating-bounce 1.4s infinite ease-in-out both;\n}\n\n.generating-dot:nth-child(1) { animation-delay: -0.32s; }\n.generating-dot:nth-child(2) { animation-delay: -0.16s; }\n.generating-dot:nth-child(3) { animation-delay: 0s; }\n\n@keyframes generating-bounce {\n 0%, 80%, 100% { transform: scale(0.6); opacity: 0.5; }\n 40% { transform: scale(1); opacity: 1; }\n}\n\n.generating-status {\n font-weight: 500;\n color: var(--color-text);\n}\n\n.generating-log {\n background: var(--color-bg);\n border: 1px solid var(--color-border);\n border-radius: 4px;\n padding: var(--space-sm);\n margin: 0;\n font-family: 'SF Mono', Monaco, monospace;\n font-size: 0.8rem;\n line-height: 1.5;\n max-height: 200px;\n overflow-y: auto;\n color: var(--color-text-muted);\n white-space: pre-wrap;\n word-break: break-word;\n}\n<\/style>\n",
"structuredPatch": [
{
"oldStart": 1,
"oldLines": 33,
"newStart": 1,
"newLines": 64,
"lines": [
" <?php",
" \/**",
"- * Generating Progress Partial (HTMX Polling)",
"+ * Generating Progress Partial with Live Log (HTMX Polling)",
" *",
" * @var int $orderId Order ID for polling",
"+ * @var string $log Current log content",
"+ * @var string $step Current step",
" *\/",
"+$log = $log ?? '';",
"+$step = $step ?? '';",
" ?>",
" <div class=\"generating-container\"",
" hx-get=\"\/content\/<?= $orderId ?>\/generation-status\"",
" hx-trigger=\"load delay:1s\"",
" hx-swap=\"outerHTML\">",
"- <div class=\"generating-spinner\">",
"- <span class=\"generating-dot\"><\/span>",
"- <span class=\"generating-dot\"><\/span>",
"- <span class=\"generating-dot\"><\/span>",
"+",
"+ <div class=\"generating-header\">",
"+ <div class=\"generating-spinner\">",
"+ <span class=\"generating-dot\"><\/span>",
"+ <span class=\"generating-dot\"><\/span>",
"+ <span class=\"generating-dot\"><\/span>",
"+ <\/div>",
"+ <span class=\"generating-status\">",
"+ <?php",
"+ $stepLabels = [",
"+ 'init' => 'Initialisierung...',",
"+ 'rag' => 'Suche Dokumente...',",
"+ 'sources' => 'Quellen gefunden',",
"+ 'llm' => 'Generiere Content...',",
"+ 'done' => 'Fertig!',",
"+ 'error' => 'Fehler',",
"+ ];",
"+ echo $stepLabels[$step] ?? 'Content wird generiert...';",
"+ ?>",
"+ <\/span>",
" <\/div>",
"- <span class=\"generating-text\">Content wird generiert...<\/span>",
"+",
"+ <?php if ($log): ?>",
"+ <pre class=\"generating-log\"><?= htmlspecialchars($log) ?><\/pre>",
"+ <?php else: ?>",
"+ <pre class=\"generating-log\">Warte auf Ausgabe...<\/pre>",
"+ <?php endif; ?>",
"+",
" <\/div>",
" ",
" <style>",
" .generating-container {",
"- display: flex;",
"- align-items: center;",
"- gap: var(--space-sm);",
"- padding: var(--space-md);",
" background: var(--color-bg-muted);",
"+ border: 1px solid var(--color-border);",
" border-radius: 8px;",
"+ padding: var(--space-md);",
" margin: var(--space-md) 0;",
" }",
" ",
"+.generating-header {",
"+ display: flex;",
"+ align-items: center;",
"+ gap: var(--space-sm);",
"+ margin-bottom: var(--space-sm);",
"+}",
"+",
" .generating-spinner {",
" display: inline-flex;",
" gap: 4px;"
]
},
{
"oldStart": 50,
"oldLines": 8,
"newStart": 81,
"newLines": 24,
"lines": [
" 40% { transform: scale(1); opacity: 1; }",
" }",
" ",
"-.generating-text {",
"+.generating-status {",
"+ font-weight: 500;",
"+ color: var(--color-text);",
"+}",
"+",
"+.generating-log {",
"+ background: var(--color-bg);",
"+ border: 1px solid var(--color-border);",
"+ border-radius: 4px;",
"+ padding: var(--space-sm);",
"+ margin: 0;",
"+ font-family: 'SF Mono', Monaco, monospace;",
"+ font-size: 0.8rem;",
"+ line-height: 1.5;",
"+ max-height: 200px;",
"+ overflow-y: auto;",
" color: var(--color-text-muted);",
"- font-size: 0.9rem;",
"+ white-space: pre-wrap;",
"+ word-break: break-word;",
" }",
" <\/style>"
]
}
],
"originalFile": "<?php\n\/**\n * Generating Progress Partial (HTMX Polling)\n *\n * @var int $orderId Order ID for polling\n *\/\n?>\n<div class=\"generating-container\"\n hx-get=\"\/content\/<?= $orderId ?>\/generation-status\"\n hx-trigger=\"load delay:1s\"\n hx-swap=\"outerHTML\">\n <div class=\"generating-spinner\">\n <span class=\"generating-dot\"><\/span>\n <span class=\"generating-dot\"><\/span>\n <span class=\"generating-dot\"><\/span>\n <\/div>\n <span class=\"generating-text\">Content wird generiert...<\/span>\n<\/div>\n\n<style>\n.generating-container {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n background: var(--color-bg-muted);\n border-radius: 8px;\n margin: var(--space-md) 0;\n}\n\n.generating-spinner {\n display: inline-flex;\n gap: 4px;\n}\n\n.generating-dot {\n width: 8px;\n height: 8px;\n background: var(--color-primary);\n border-radius: 50%;\n animation: generating-bounce 1.4s infinite ease-in-out both;\n}\n\n.generating-dot:nth-child(1) { animation-delay: -0.32s; }\n.generating-dot:nth-child(2) { animation-delay: -0.16s; }\n.generating-dot:nth-child(3) { animation-delay: 0s; }\n\n@keyframes generating-bounce {\n 0%, 80%, 100% { transform: scale(0.6); opacity: 0.5; }\n 40% { transform: scale(1); opacity: 1; }\n}\n\n.generating-text {\n color: var(--color-text-muted);\n font-size: 0.9rem;\n}\n<\/style>\n"
}
}