Skip to content

Przegląd modułu Chat

Moduł Chat umożliwia prowadzenie interaktywnych sesji konwersacyjnych z AI (Claude) w kontekście wybranych workerów. Każda sesja jest przechowywana jako para pytanie-odpowiedź (Q&A) w dedykowanym katalogu.

Architektura

Struktura katalogów

.chat/
└── {session-uuid}/
    ├── chat.json                      # Metadata sesji
    ├── container.log                  # Logi kontenera Docker (opcjonalne)
    ├── messages/
    │   └── msg_{timestamp}_{id}.json  # Para Q&A
    └── llm_outputs/
        └── {executor}_{timestamp}.json  # Pełny output LLM

Przykład struktury

.chat/
└── example-session-uuid-123/
    ├── chat.json
    ├── container.log
    ├── messages/
    │   ├── msg_20251006_120403_25255520-1652-4309-89cd-c36da0740d36.json
    │   └── msg_20251006_120510_a1b2c3d4-5678-90ab-cdef-123456789abc.json
    └── llm_outputs/
        ├── claude_20251006_120403.json
        └── claude_20251006_120510.json

Formaty plików

chat.json (Metadata sesji)

Plik zawiera wszystkie metadane sesji:

json
{
  "session_id": "example-session-uuid-123",
  "task_id": "TASK-001",
  "task_link": "https://github.com/org/repo/issues/123",
  "title": "Implementacja modułu zarządzania użytkownikami",
  "description": "Konwersacja dotycząca implementacji nowej funkcjonalności...",
  "author": "712020:499ddb09-7cab-4147-910d-d38e7b2fa575",
  "workers": [
    "SemBot Frontend (angular)",
    "SemBot Backend (laravel)"
  ],
  "executor": "claude",
  "model": "claude-sonnet-4-5-20250929",
  "docker_worker": "sb",
  "created_at": "2025-10-02T10:30:00Z",
  "updated_at": "2025-10-06T12:16:00Z",
  "is_active": true,
  "message_count": 9
}

Pola metadata

PoleTypOpis
session_idstringUUID sesji
task_idstringID powiązanego taska (opcjonalne)
task_linkstringLink do zewnętrznego taska (opcjonalne)
titlestringTytuł sesji
descriptionstringOpis konwersacji
authorstringID autora (mapowane na real name, GitHub, etc.)
workersarrayLista workerów używanych w sesji
executorstringExecutor LLM (claude lub gemini)
modelstringKonkretny model AI
docker_workerstringTag workera Docker (opcjonalne)
created_atdatetimeData utworzenia
updated_atdatetimeData ostatniej aktualizacji
is_activebooleanStatus aktywności
message_countintegerLiczba wiadomości

messages/msg_*.json (Para Q&A)

Każda wiadomość to para pytanie-odpowiedź w jednym pliku:

json
{
  "id": "25255520-1652-4309-89cd-c36da0740d36",
  "timestamp": "2025-10-06T12:04:03Z",
  "question": {
    "content": "która jest godzina?",
    "role": "user",
    "timestamp": "2025-10-06T12:04:03Z"
  },
  "answer": {
    "content": "Odpowiedź asystenta...",
    "role": "claude",
    "worker_name": "SemBot Frontend (angular)",
    "executor": "claude",
    "model": "claude-sonnet-4-5-20250929",
    "output_path": "/path/to/llm_outputs/claude_20251006_120403.json",
    "timestamp": "2025-10-06T12:04:08Z"
  }
}

Struktura Q&A

  • question - Część pytania użytkownika

    • content - treść pytania
    • role - zawsze "user"
    • timestamp - kiedy zadano pytanie
  • answer - Część odpowiedzi asystenta

    • content - treść odpowiedzi
    • role - executor (np. "claude")
    • worker_name - nazwa workera
    • executor - typ executora
    • model - użyty model
    • output_path - ścieżka do pełnego outputu LLM
    • timestamp - kiedy udzielono odpowiedzi

llm_outputs/*.json (Raw output LLM)

Pełny output z Claude CLI w formacie JSON Lines:

json
{"type":"system","subtype":"init","cwd":"/app/worker","session_id":"4d79af58-ef37-49f8-bb9e-cfeed2898aa6","model":"claude-sonnet-4-5-20250929"}
{"type":"assistant","message":{"id":"msg_018XwvgLh4edXPRubt5fdYqa","type":"message","role":"assistant","content":[{"type":"text","text":"Odpowiedź..."}]}}
{"type":"result","subtype":"success","duration_ms":4231,"total_cost_usd":0.038044}

Format JSON Lines:

  • Każda linia to osobny obiekt JSON
  • Typy: system, assistant, tool_use, result
  • Renderowany przez utils.FormatClaudeOutput() - ten sam parser co w tasks

Sesje Claude Code CLI

Moduł Chat wykorzystuje funkcję session z Claude Code CLI:

bash
claude --session {session-uuid} --output /path/output.json "Pytanie..."

Zalety sesji

Historia zachowana automatycznie

  • Claude "pamięta" poprzednie pytania i odpowiedzi
  • Nie trzeba ręcznie przekazywać kontekstu
  • Każde pytanie ma dostęp do całej historii sesji

Jeden wątek konwersacji

  • Wszystkie wiadomości należą do jednego wątku
  • Spójna numeracja i kolejność
  • Claude CLI zarządza stanem

Identyfikacja przez UUID

  • Każda sesja ma unikalny identyfikator
  • Możliwość wznowienia sesji później
  • Bezpieczne rozdzielenie różnych konwersacji

Ograniczenia

⚠️ Timeout sesji

  • Claude CLI może mieć limit czasu nieaktywności
  • System monitoruje czas sesji (domyślnie 5 minut przed timeout)
  • Automatyczne zamykanie nieaktywnych sesji

⚠️ Kompatybilność wersji

  • Parametr --session dostępny od określonej wersji Claude CLI
  • Docker może używać starszej wersji niż lokalnie
  • Sprawdź wersję: claude --version

Workflow

1. Utworzenie sesji

2. Wysyłanie wiadomości

3. Ładowanie sesji

Następne kroki