{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/View\/chat\/index1.php",
"content": "<?php\n\/**\n * Chat Variante 1 - ChatGPT-Stil\n * Minimalistisch, Clean, Fokus auf Content\n *\/\n?>\n<!DOCTYPE html>\n<html lang=\"de\" data-theme=\"light\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title><?= htmlspecialchars($session['title'] ?? 'Chat') ?> - Campus<\/title>\n <link rel=\"icon\" type=\"image\/png\" href=\"https:\/\/campus-am-see.de\/wp-content\/uploads\/menu-logo.png\">\n <link rel=\"stylesheet\" href=\"\/css\/chat1.css\">\n <script src=\"\/js\/htmx.min.js\"><\/script>\n<\/head>\n<body>\n<div class=\"chat1-layout\">\n <!-- Sidebar -->\n <aside class=\"c1-sidebar\" id=\"sidebar\">\n <div class=\"c1-sidebar__header\">\n <a href=\"\/chat1\" class=\"c1-sidebar__new\">+ Neuer Chat<\/a>\n <\/div>\n <div class=\"c1-sidebar__list\">\n <?php foreach ($sessions ?? [] as $s): ?>\n <a href=\"\/chat1\/<?= $s['uuid'] ?>\"\n class=\"c1-session <?= ($session['uuid'] ?? '') === $s['uuid'] ? 'c1-session--active' : '' ?>\">\n <div class=\"c1-session__title\"><?= htmlspecialchars($s['title'] ?? 'Neuer Chat') ?><\/div>\n <div class=\"c1-session__meta\">\n <?= str_starts_with($s['model'] ?? '', 'ollama:') ? 'Lokal' : 'Claude' ?> · <?= $s['message_count'] ?? 0 ?> Nachr.\n <\/div>\n <button class=\"c1-session__delete\"\n hx-delete=\"\/chat\/<?= $s['uuid'] ?>\"\n hx-confirm=\"Session löschen?\"\n onclick=\"event.preventDefault(); event.stopPropagation();\">×<\/button>\n <\/a>\n <?php endforeach; ?>\n <\/div>\n <\/aside>\n\n <div class=\"c1-overlay\" id=\"overlay\"><\/div>\n\n <!-- Main -->\n <main class=\"c1-main\">\n <button class=\"c1-toggle\" id=\"toggle\" title=\"Sidebar\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M3 12h18M3 6h18M3 18h18\"\/>\n <\/svg>\n <\/button>\n\n <button class=\"c1-theme-toggle\" id=\"themeToggle\" title=\"Theme wechseln\">\n <span id=\"themeIcon\">☾<\/span>\n <\/button>\n\n <div class=\"c1-messages\" id=\"messages\">\n <div class=\"c1-messages__inner\">\n <?php if (empty($messages)): ?>\n <div class=\"c1-welcome\">\n <h2>Teamcoaching Assistent<\/h2>\n <p>Stelle eine Frage zu systemischem Teamcoaching<\/p>\n <\/div>\n <?php endif; ?>\n\n <?php foreach ($messages ?? [] as $msg): ?>\n <div class=\"c1-msg c1-msg--<?= $msg['role'] ?>\">\n <div class=\"c1-msg__content\">\n <?php if ($msg['role'] === 'user'): ?>\n <?= htmlspecialchars($msg['content']) ?>\n <?php else: ?>\n <?= nl2br(htmlspecialchars($msg['content'])) ?>\n\n <?php if (!empty($msg['sources'])): ?>\n <?php $sources = json_decode($msg['sources'], true) ?: []; ?>\n <?php if (!empty($sources)): ?>\n <div class=\"c1-sources\" id=\"sources-<?= $msg['id'] ?>\">\n <button type=\"button\" class=\"c1-sources__toggle\" onclick=\"this.parentElement.classList.toggle('c1-sources--open')\">\n <?= count($sources) ?> Quelle<?= count($sources) > 1 ? 'n' : '' ?> ▾\n <\/button>\n <div class=\"c1-sources__list\">\n <?php foreach ($sources as $source): ?>\n <div class=\"c1-source\">\n <span class=\"c1-source__title\"><?= htmlspecialchars($source['title'] ?? 'Unbekannt') ?><\/span>\n <span class=\"c1-source__score\"><?= round(($source['score'] ?? 0) * 100) ?>%<\/span>\n <\/div>\n <?php endforeach; ?>\n <\/div>\n <\/div>\n <?php endif; ?>\n <?php endif; ?>\n\n <div class=\"c1-msg__meta\">\n <?php $isOllama = str_starts_with($msg['model'] ?? '', 'ollama:'); ?>\n <span><?= $isOllama ? substr($msg['model'], 7) : ($msg['model'] ?? 'Claude') ?><\/span>\n <?php if (!$isOllama && ($msg['tokens_input'] ?? 0) > 0): ?>\n <span><?= number_format($msg['tokens_input'] + $msg['tokens_output']) ?> Tokens<\/span>\n <?php elseif ($isOllama): ?>\n <span>Lokal<\/span>\n <?php endif; ?>\n <\/div>\n <?php endif; ?>\n <\/div>\n <\/div>\n <?php endforeach; ?>\n <\/div>\n <\/div>\n\n <div class=\"c1-input-area\">\n <div class=\"c1-input-wrapper\">\n <form class=\"c1-form\"\n hx-post=\"\/chat\/<?= $session['uuid'] ?? '' ?>\/message\"\n hx-target=\"#messages .c1-messages__inner\"\n hx-swap=\"beforeend\"\n id=\"chatForm\">\n\n <div class=\"c1-input-row\">\n <input type=\"text\"\n name=\"message\"\n class=\"c1-input\"\n placeholder=\"Nachricht eingeben...\"\n autocomplete=\"off\"\n required>\n <button type=\"submit\" class=\"c1-send\" id=\"sendBtn\">\n <svg viewBox=\"0 0 24 24\"><path d=\"M2 21l21-9L2 3v7l15 2-15 2v7z\"\/><\/svg>\n <\/button>\n <\/div>\n\n <div class=\"c1-settings c1-settings--hidden\" id=\"settings\">\n <?php $currentModel = $session['model'] ?? $defaultModel ?? 'claude-opus-4-5-20251101'; ?>\n <select name=\"model\" class=\"c1-select\">\n <?php foreach ($models ?? [] as $modelId => $modelLabel): ?>\n <option value=\"<?= htmlspecialchars($modelId) ?>\" <?= $currentModel === $modelId ? 'selected' : '' ?>>\n <?= htmlspecialchars($modelLabel) ?>\n <\/option>\n <?php endforeach; ?>\n <\/select>\n\n <select name=\"context_limit\" class=\"c1-select\">\n <?php $currentLimit = (int) ($session['context_limit'] ?? 5); ?>\n <option value=\"3\" <?= $currentLimit === 3 ? 'selected' : '' ?>>3 Quellen<\/option>\n <option value=\"5\" <?= $currentLimit === 5 ? 'selected' : '' ?>>5 Quellen<\/option>\n <option value=\"10\" <?= $currentLimit === 10 ? 'selected' : '' ?>>10 Quellen<\/option>\n <\/select>\n\n <div class=\"c1-settings__advanced\">\n <?php\n $selected = json_decode($session['collections'] ?? '[\"documents\"]', true) ?: ['documents'];\n ?>\n <label class=\"c1-checkbox\">\n <input type=\"checkbox\" name=\"collections[]\" value=\"documents\" <?= in_array('documents', $selected) ? 'checked' : '' ?>>\n Dokumente\n <\/label>\n <label class=\"c1-checkbox\">\n <input type=\"checkbox\" name=\"collections[]\" value=\"emails\" <?= in_array('emails', $selected) ? 'checked' : '' ?>>\n E-Mails\n <\/label>\n <label class=\"c1-checkbox\">\n <input type=\"checkbox\" name=\"collections[]\" value=\"wiki\" <?= in_array('wiki', $selected) ? 'checked' : '' ?>>\n Dokumentation\n <\/label>\n <\/div>\n\n <button type=\"button\" class=\"c1-settings-toggle\" id=\"settingsToggle\">Einstellungen<\/button>\n <\/div>\n <\/form>\n <\/div>\n <\/div>\n <\/main>\n<\/div>\n\n<script>\n\/\/ Sidebar Toggle\nconst sidebar = document.getElementById('sidebar');\nconst overlay = document.getElementById('overlay');\nconst toggle = document.getElementById('toggle');\n\ntoggle.addEventListener('click', () => {\n sidebar.classList.toggle('c1-sidebar--open');\n sidebar.classList.toggle('c1-sidebar--collapsed');\n});\n\noverlay.addEventListener('click', () => {\n sidebar.classList.remove('c1-sidebar--open');\n});\n\n\/\/ Theme Toggle\nconst themeToggle = document.getElementById('themeToggle');\nconst themeIcon = document.getElementById('themeIcon');\nconst html = document.documentElement;\n\nconst savedTheme = localStorage.getItem('chat1-theme') || 'light';\nhtml.setAttribute('data-theme', savedTheme);\nthemeIcon.textContent = savedTheme === 'dark' ? '☀' : '☽';\n\nthemeToggle.addEventListener('click', () => {\n const current = html.getAttribute('data-theme');\n const next = current === 'dark' ? 'light' : 'dark';\n html.setAttribute('data-theme', next);\n localStorage.setItem('chat1-theme', next);\n themeIcon.textContent = next === 'dark' ? '☀' : '☽';\n});\n\n\/\/ Settings Toggle\nconst settings = document.getElementById('settings');\nconst settingsToggle = document.getElementById('settingsToggle');\n\nsettingsToggle.addEventListener('click', () => {\n settings.classList.toggle('c1-settings--hidden');\n settingsToggle.textContent = settings.classList.contains('c1-settings--hidden') ? 'Einst... [TRUNCATED-5ee605c0df3627a5]"
}
}
{
"tool_response": {
"type": "create",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/View\/chat\/index1.php",
"content": "<?php\n\/**\n * Chat Variante 1 - ChatGPT-Stil\n * Minimalistisch, Clean, Fokus auf Content\n *\/\n?>\n<!DOCTYPE html>\n<html lang=\"de\" data-theme=\"light\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title><?= htmlspecialchars($session['title'] ?? 'Chat') ?> - Campus<\/title>\n <link rel=\"icon\" type=\"image\/png\" href=\"https:\/\/campus-am-see.de\/wp-content\/uploads\/menu-logo.png\">\n <link rel=\"stylesheet\" href=\"\/css\/chat1.css\">\n <script src=\"\/js\/htmx.min.js\"><\/script>\n<\/head>\n<body>\n<div class=\"chat1-layout\">\n <!-- Sidebar -->\n <aside class=\"c1-sidebar\" id=\"sidebar\">\n <div class=\"c1-sidebar__header\">\n <a href=\"\/chat1\" class=\"c1-sidebar__new\">+ Neuer Chat<\/a>\n <\/div>\n <div class=\"c1-sidebar__list\">\n <?php foreach ($sessions ?? [] as $s): ?>\n <a href=\"\/chat1\/<?= $s['uuid'] ?>\"\n class=\"c1-session <?= ($session['uuid'] ?? '') === $s['uuid'] ? 'c1-session--active' : '' ?>\">\n <div class=\"c1-session__title\"><?= htmlspecialchars($s['title'] ?? 'Neuer Chat') ?><\/div>\n <div class=\"c1-session__meta\">\n <?= str_starts_with($s['model'] ?? '', 'ollama:') ? 'Lokal' : 'Claude' ?> · <?= $s['message_count'] ?? 0 ?> Nachr.\n <\/div>\n <button class=\"c1-session__delete\"\n hx-delete=\"\/chat\/<?= $s['uuid'] ?>\"\n hx-confirm=\"Session löschen?\"\n onclick=\"event.preventDefault(); event.stopPropagation();\">×<\/button>\n <\/a>\n <?php endforeach; ?>\n <\/div>\n <\/aside>\n\n <div class=\"c1-overlay\" id=\"overlay\"><\/div>\n\n <!-- Main -->\n <main class=\"c1-main\">\n <button class=\"c1-toggle\" id=\"toggle\" title=\"Sidebar\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M3 12h18M3 6h18M3 18h18\"\/>\n <\/svg>\n <\/button>\n\n <button class=\"c1-theme-toggle\" id=\"themeToggle\" title=\"Theme wechseln\">\n <span id=\"themeIcon\">☾<\/span>\n <\/button>\n\n <div class=\"c1-messages\" id=\"messages\">\n <div class=\"c1-messages__inner\">\n <?php if (empty($messages)): ?>\n <div class=\"c1-welcome\">\n <h2>Teamcoaching Assistent<\/h2>\n <p>Stelle eine Frage zu systemischem Teamcoaching<\/p>\n <\/div>\n <?php endif; ?>\n\n <?php foreach ($messages ?? [] as $msg): ?>\n <div class=\"c1-msg c1-msg--<?= $msg['role'] ?>\">\n <div class=\"c1-msg__content\">\n <?php if ($msg['role'] === 'user'): ?>\n <?= htmlspecialchars($msg['content']) ?>\n <?php else: ?>\n <?= nl2br(htmlspecialchars($msg['content'])) ?>\n\n <?php if (!empty($msg['sources'])): ?>\n <?php $sources = json_decode($msg['sources'], true) ?: []; ?>\n <?php if (!empty($sources)): ?>\n <div class=\"c1-sources\" id=\"sources-<?= $msg['id'] ?>\">\n <button type=\"button\" class=\"c1-sources__toggle\" onclick=\"this.parentElement.classList.toggle('c1-sources--open')\">\n <?= count($sources) ?> Quelle<?= count($sources) > 1 ? 'n' : '' ?> ▾\n <\/button>\n <div class=\"c1-sources__list\">\n <?php foreach ($sources as $source): ?>\n <div class=\"c1-source\">\n <span class=\"c1-source__title\"><?= htmlspecialchars($source['title'] ?? 'Unbekannt') ?><\/span>\n <span class=\"c1-source__score\"><?= round(($source['score'] ?? 0) * 100) ?>%<\/span>\n <\/div>\n <?php endforeach; ?>\n <\/div>\n <\/div>\n <?php endif; ?>\n <?php endif; ?>\n\n <div class=\"c1-msg__meta\">\n <?php $isOllama = str_starts_with($msg['model'] ?? '', 'ollama:'); ?>\n <span><?= $isOllama ? substr($msg['model'], 7) : ($msg['model'] ?? 'Claude') ?><\/span>\n <?php if (!$isOllama && ($msg['tokens_input'] ?? 0) > 0): ?>\n <span><?= number_format($msg['tokens_input'] + $msg['tokens_output']) ?> Tokens<\/span>\n <?php elseif ($isOllama): ?>\n <span>Lokal<\/span>\n <?php endif; ?>\n <\/div>\n <?php endif; ?>\n <\/div>\n <\/div>\n <?php endforeach; ?>\n <\/div>\n <\/div>\n\n <div class=\"c1-input-area\">\n <div class=\"c1-input-wrapper\">\n <form class=\"c1-form\"\n hx-post=\"\/chat\/<?= $session['uuid'] ?? '' ?>\/message\"\n hx-target=\"#messages .c1-messages__inner\"\n hx-swap=\"beforeend\"\n id=\"chatForm\">\n\n <div class=\"c1-input-row\">\n <input type=\"text\"\n name=\"message\"\n class=\"c1-input\"\n placeholder=\"Nachricht eingeben...\"\n autocomplete=\"off\"\n required>\n <button type=\"submit\" class=\"c1-send\" id=\"sendBtn\">\n <svg viewBox=\"0 0 24 24\"><path d=\"M2 21l21-9L2 3v7l15 2-15 2v7z\"\/><\/svg>\n <\/button>\n <\/div>\n\n <div class=\"c1-settings c1-settings--hidden\" id=\"settings\">\n <?php $currentModel = $session['model'] ?? $defaultModel ?? 'claude-opus-4-5-20251101'; ?>\n <select name=\"model\" class=\"c1-select\">\n <?php foreach ($models ?? [] as $modelId => $modelLabel): ?>\n <option value=\"<?= htmlspecialchars($modelId) ?>\" <?= $currentModel === $modelId ? 'selected' : '' ?>>\n <?= htmlspecialchars($modelLabel) ?>\n <\/option>\n <?php endforeach; ?>\n <\/select>\n\n <select name=\"context_limit\" class=\"c1-select\">\n <?php $currentLimit = (int) ($session['context_limit'] ?? 5); ?>\n <option value=\"3\" <?= $currentLimit === 3 ? 'selected' : '' ?>>3 Quellen<\/option>\n <option value=\"5\" <?= $currentLimit === 5 ? 'selected' : '' ?>>5 Quellen<\/option>\n <option value=\"10\" <?= $currentLimit === 10 ? 'selected' : '' ?>>10 Quellen<\/option>\n <\/select>\n\n <div class=\"c1-settings__advanced\">\n <?php\n $selected = json_decode($session['collections'] ?? '[\"documents\"]', true) ?: ['documents'];\n ?>\n <label class=\"c1-checkbox\">\n <input type=\"checkbox\" name=\"collections[]\" value=\"documents\" <?= in_array('documents', $selected) ? 'checked' : '' ?>>\n Dokumente\n <\/label>\n <label class=\"c1-checkbox\">\n <input type=\"checkbox\" name=\"collections[]\" value=\"emails\" <?= in_array('emails', $selected) ? 'checked' : '' ?>>\n E-Mails\n <\/label>\n <label class=\"c1-checkbox\">\n <input type=\"checkbox\" name=\"collections[]\" value=\"wiki\" <?= in_array('wiki', $selected) ? 'checked' : '' ?>>\n Dokumentation\n <\/label>\n <\/div>\n\n <button type=\"button\" class=\"c1-settings-toggle\" id=\"settingsToggle\">Einstellungen<\/button>\n <\/div>\n <\/form>\n <\/div>\n <\/div>\n <\/main>\n<\/div>\n\n<script>\n\/\/ Sidebar Toggle\nconst sidebar = document.getElementById('sidebar');\nconst overlay = document.getElementById('overlay');\nconst toggle = document.getElementById('toggle');\n\ntoggle.addEventListener('click', () => {\n sidebar.classList.toggle('c1-sidebar--open');\n sidebar.classList.toggle('c1-sidebar--collapsed');\n});\n\noverlay.addEventListener('click', () => {\n sidebar.classList.remove('c1-sidebar--open');\n});\n\n\/\/ Theme Toggle\nconst themeToggle = document.getElementById('themeToggle');\nconst themeIcon = document.getElementById('themeIcon');\nconst html = document.documentElement;\n\nconst savedTheme = localStorage.getItem('chat1-theme') || 'light';\nhtml.setAttribute('data-theme', savedTheme);\nthemeIcon.textContent = savedTheme === 'dark' ? '☀' : '☽';\n\nthemeToggle.addEventListener('click', () => {\n const current = html.getAttribute('data-theme');\n const next = current === 'dark' ? 'light' : 'dark';\n html.setAttribute('data-theme', next);\n localStorage.setItem('chat1-theme', next);\n themeIcon.textContent = next === 'dark' ? '☀' : '☽';\n});\n\n\/\/ Settings Toggle\nconst settings = document.getElementById('settings');\nconst settingsToggle = document.getElementById('settingsToggle');\n\nsettingsToggle.addEventListener('click', () => {\n settings.classList.toggle('c1-settings--hidden');\n settingsToggle.textContent = settings.classList.contains('c1-settings--hidden') ? 'Einst... [TRUNCATED-5ee605c0df3627a5]",
"structuredPatch": [],
"originalFile": null
}
}