{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/CLAUDE.md"
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/CLAUDE.md",
"content": "# Server-Kontext\n\n## Projekt-Root\n`\/var\/www\/dev.campus.systemische-tools.de\/`\n\n## Architektur\n```\n\/src\/ # Backend (MVC)\n├── Framework\/ # App, Router, Controller-Base\n├── Controller\/ # HTTP Controller\n├── Domain\/ # Entity, Repository-Interfaces\n├── UseCases\/ # Anwendungsfälle\n├── Infrastructure\/ # DB, External Services\n└── View\/ # Server-Templates\n\n\/app\/ # Frontend (MVP)\n├── Presenter\/ # UI-Logik\n└── View\/ # Passive Views\n```\n\n## Datenbanken\n\n| DB | Zweck |\n|----|-------|\n| `ki_dev` | Infrastruktur: Tasks, Contracts, Docs, Pipeline, Logs |\n| `ki_content` | Content: Chat, Wissen, Entitäten, Taxonomie |\n\n## MCP-Server (Pflicht)\n\n### MCP-DB\nDatenbankzugriff. **Immer statt direkter SQL verwenden.**\n- `db_select(query, database)` - SELECT\n- `db_tables(database)` - Tabellen\n- `db_describe(table, database)` - Struktur\n- `db_insert\/update\/delete()` - Schreiboperationen\n- `db_execute()` - DDL (ALTER, CREATE, DROP)\n\n### MCP-Tasks\nTask-Management.\n- `tasks_list(compact=True)` - Auflisten\n- `tasks_create(title, type)` - Erstellen\n- `tasks_get(id)` - Details\n- `tasks_status(id, status)` - Status ändern\n- `quality_check(path)` - PHP-Prüfung\n\n### MCP-Contracts\nContract-Management.\n- `contracts_list(compact=True)` - Auflisten\n- `contracts_get(id|name)` - Details\n- `contracts_validate(id|name)` - Validieren\n- `contracts_create\/update()` - Ändern\n\n### MCP-Docs\nDokumentations-Management.\n- `docs_list(compact=True)` - Auflisten\n- `docs_get(id|path)` - Abrufen\n- `docs_search(query)` - Suchen\n- `docs_hierarchy()` - Baum\n- `docs_create\/update\/delete()` - Ändern\n\n### MCP-Code\nCode-Analyse. **Vor Refactoring\/Änderungen nutzen!**\n- `code_search(query)` - Klassen\/Interfaces\/Traits suchen\n- `code_class(fqcn)` - Klassen-Details inkl. Dependencies\n- `code_dependencies(fqcn)` - Was nutzt diese Klasse? (outgoing)\n- `code_dependents(fqcn)` - Wer nutzt diese Klasse? (incoming)\n- `code_impact(fqcn)` - Impact-Analyse vor Änderungen\n- `code_stats()` - Projekt-Statistiken\n\n## Scripts\n\n| Script | Zweck |\n|--------|-------|\n| `\/var\/www\/scripts\/php-check.sh` | PHPStan + CS-Fixer + Semgrep + Audit |\n| `\/var\/www\/scripts\/sync-dev-prod.sh` | Deploy dev → prod |\n| `\/var\/www\/scripts\/backup.sh` | Backup |\n\n## HTMX (Pflicht)\n\n**Alle interaktiven UI-Elemente müssen HTMX verwenden. Kein fetch(), kein XMLHttpRequest.**\n\n### Kritische Regeln (Pre-Hook blockiert)\n| Regel | Anforderung |\n|-------|-------------|\n| HTMX-C1 | `hx-post` MUSS `hx-headers` mit CSRF haben |\n| HTMX-C2 | `hx-delete` MUSS `hx-headers` mit CSRF haben |\n| HTMX-C3 | `hx-patch` MUSS `hx-headers` mit CSRF haben |\n| HTMX-C4 | `hx-delete` MUSS `hx-confirm` haben |\n| HTMX-C5 | `hx-put` MUSS `hx-headers` mit CSRF haben |\n\n### Standard-Pattern\n```php\n<button hx-post=\"\/api\/endpoint\"\n hx-headers='{\"X-CSRF-TOKEN\": \"<?= $csrfToken ?>\"}'\n hx-target=\"#result\"\n hx-swap=\"innerHTML\"\n hx-indicator=\"#spinner\"\n hx-disabled-elt=\"this\">\n Aktion\n<\/button>\n```\n\n### Controller-Methoden\n- `$this->htmxSuccess($msg)` - Erfolg-Alert\n- `$this->htmxError($msg)` - Fehler-Alert\n- `$this->htmxRedirect($url)` - Redirect via Header\n- `$this->requireCsrf()` - CSRF validieren\n\n### Dokumentation\nSiehe: `\/docs\/frontend\/htmx` (mcp-docs)\n\n## Constants (Pflicht)\n\n**Keine Magic Numbers! Immer benannte Konstanten verwenden.**\n\n### PHP\n```php\nuse Domain\\Constants;\n\n\/\/ RICHTIG:\n$limit = Constants::DEFAULT_LIMIT;\n$duration = $seconds * Constants::MS_PER_SECOND;\ntimeout: Constants::LLM_TIMEOUT\n\n\/\/ FALSCH (wird blockiert):\n$limit = 100;\n$duration = $seconds * 1000;\ntimeout: 60\n```\n\n### Python (Pipeline)\n```python\nfrom constants import DEFAULT_LIMIT, MS_PER_SECOND, OLLAMA_TIMEOUT\n\n# RICHTIG:\nlimit = DEFAULT_LIMIT\nduration_ms = seconds * MS_PER_SECOND\n\n# FALSCH:\nlimit = 100\nduration_ms = seconds * 1000\n```\n\n### Verfügbare Konstanten\n| Konstante | Wert | Verwendung |\n|-----------|------|------------|\n| `DEFAULT_LIMIT` | 100 | Standard DB-Limit |\n| `BATCH_LIMIT` | 1000 | Batch-Operationen |\n| `MS_PER_SECOND` | 1000 | Zeit-Konvertierung |\n| `SECONDS_PER_MINUTE` | 60 | Zeit-Berechnung |\n| `OLLAMA_TIMEOUT` | 60 | Ollama API Timeout |\n| `LLM_TIMEOUT` | 120 | LLM Request Timeout |\n\nDateien: `src\/Domain\/Constants.php`, `\/var\/www\/scripts\/pipeline\/constants.py`\n\n## Regeln\n\n1. **Kein Git** - Verboten auf diesem Server\n2. **MCP nutzen** - Kein direkter DB-Zugriff\n3. **Dev first** - Entwicklung auf dev, dann sync zu prod\n4. **Quality vor Sync** - `\/var\/www\/scripts\/php-check.sh` muss bestehen\n5. **Task-Pflicht** - Für jede Anforderung `tasks_create()` nutzen\n6. **HTMX-Pflicht** - Kein fetch()\/XHR, nur HTMX mit CSRF\n7. **Constants-Pflicht** - Keine Magic Numbers, immer `Constants::*` oder `constants.*`\n",
"numLines": 165,
"startLine": 1,
"totalLines": 165
}
}
}