Protokoll #27908

ID27908
Zeitstempel2025-12-28 12:33:08.389101
Clientroot
IP145.224.72.140
Modellclaude-sonnet-4-20250514
Statuspending
Tokens683 (Input: 683, Output: 0)
Dauer-
Request-Zeit2025-12-28 12:33:08.389101
Response-Zeit-

Request

{
    "event": "PostToolUse",
    "tool_name": "Read",
    "tool_response": {
        "type": "text",
        "file": {
            "filePath": "\/var\/www\/tools\/ki-protokoll\/claude-hook\/log_to_db.py",
            "content": "#!\/usr\/bin\/env python3\n\"\"\"\nClaude Code Hook Logger v3 - Modularisiert\nOrchestriert Parsing, Formatting und Storage von Hook-Events\n\"\"\"\n\nimport json\nimport sys\nfrom typing import Dict, Any, Optional\n\n# Importiere modularisierte Komponenten\nfrom log_parser import (\n    parse_event_data,\n    sanitize_data,\n    get_conversation_pairs_from_session\n)\nfrom log_formatter import (\n    format_request_to_json,\n    format_response_to_json,\n    create_response_data,\n    calculate_tokens,\n    get_client_metadata,\n    get_model_name,\n    format_tool_response,\n    should_suppress_output\n)\nfrom log_storage import (\n    find_matching_request,\n    save_pending_request,\n    insert_log_entry,\n    update_request_with_response,\n    close_pending_user_prompts\n)\n\n\ndef log_to_database(data: Dict[str, Any]) -> Optional[int]:\n    \"\"\"\n    Hauptfunktion: Orchestriert das Logging eines Events\n\n    Args:\n        data: Event-Daten vom Hook\n\n    Returns:\n        Database ID des Log-Eintrags oder None bei Fehler\n    \"\"\"\n    try:\n        event_name = data.get('hook_event_name', 'Unknown')\n        session_id = data.get('session_id', '')\n\n        # Prüfe auf matching Request für Response-Events (PostToolUse)\n        if event_name == 'PostToolUse':\n            matching_request_id = find_matching_request(data)\n            if matching_request_id:\n                # Update existing request mit response\n                tool_response = sanitize_data(data.get('tool_response', {}))\n                response_str = format_tool_response(tool_response)\n                tokens = calculate_tokens('', response_str)\n\n                update_request_with_response(\n                    matching_request_id,\n                    response_str,\n                    tokens['tokens_output']\n                )\n                return matching_request_id\n\n        # Bei Stop-Events: Schließe alle pending UserPrompts\n        if event_name in ['Stop', 'SubagentStop'] and session_id:\n            pairs = get_conversation_pairs_from_session(session_id)\n            close_pending_user_prompts(session_id, pairs)\n\n        # Parse Event-Daten\n        request_data = parse_event_data(data)\n\n        # Erstelle Response-Daten (falls direkt verfügbar)\n        response_data = create_response_data(event_name, data)\n\n        # Formatiere zu JSON\n        request_str = format_request_to_json(request_data)\n        response_str = format_response_to_json(response_data)\n",
            "numLines": 80,
            "startLine": 1,
            "totalLines": 132
        }
    }
}

Response

-
← Vorheriger Zur Liste Nächster →