Skip to content

Chat API Reference

Kompletna dokumentacja endpointów API modułu Chat.

Base URL

http://localhost:8080

Endpoints

1. Get Chat Page

Zwraca stronę główną Chat z listą workerów.

Endpoint: GET /chat

Response: HTML page

Przykład:

bash
curl http://localhost:8080/chat

2. Get Chat Session Page

Zwraca stronę szczegółów sesji.

Endpoint: GET /chat/{uuid}

Parameters:

  • uuid (path) - UUID sesji

Response: HTML page

Przykład:

bash
curl http://localhost:8080/chat/abc123-def456-...

3. Get Workers

Zwraca listę dostępnych workerów.

Endpoint: GET /api/chat/workers

Response:

json
[
  {
    "name": "SemBot Frontend (angular)",
    "path": "/Users/user/Projects/sembot-angular",
    "tags": ["sbf"],
    "docker_compose_path": "/path/to/docker/sembot-angular",
    "git_repository": "[email protected]:org/sembot-angular.git",
    "git_branch": "master",
    "mcp": {
      "check": ["node --version"],
      "servers": [...]
    }
  }
]

Przykład:

bash
curl http://localhost:8080/api/chat/workers

4. Create Session

Tworzy nową sesję chat dla wybranego workera.

Endpoint: POST /api/chat/sessions

Request Body:

json
{
  "worker_id": "SemBot Frontend (angular)"
}

Response:

json
{
  "session": {
    "uuid": "abc123-def456-...",
    "worker": {
      "name": "SemBot Frontend (angular)",
      ...
    },
    "messages": [],
    "created_at": "2025-10-06T10:30:00Z",
    "updated_at": "2025-10-06T10:30:00Z",
    "is_active": true,
    "message_count": 0,
    "preferred_executor": "claude",
    "model": ""
  },
  "redirect_url": "/chat/abc123-def456-..."
}

Przykład:

bash
curl -X POST http://localhost:8080/api/chat/sessions \
  -H "Content-Type: application/json" \
  -d '{"worker_id":"SemBot Frontend (angular)"}'

5. Get Session

Zwraca szczegóły sesji z pełną historią wiadomości.

Endpoint: GET /api/chat/sessions/{uuid}

Parameters:

  • uuid (path) - UUID sesji

Response:

json
{
  "uuid": "abc123-def456-...",
  "worker": {
    "name": "SemBot Frontend (angular)",
    ...
  },
  "messages": [
    {
      "id": "msg-001",
      "timestamp": "2025-10-06T12:04:03Z",
      "question": {
        "content": "która jest godzina?",
        "role": "user",
        "timestamp": "2025-10-06T12:04:03Z"
      },
      "answer": {
        "content": "Aktualna godzina to 12:04.",
        "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"
      }
    }
  ],
  "metadata": {
    "session_id": "abc123-def456-...",
    "task_id": "TASK-001",
    "task_link": "https://github.com/org/repo/issues/123",
    "title": "Implementacja modułu...",
    "description": "Opis konwersacji...",
    "author": "712020:499ddb09-7cab-4147-910d-d38e7b2fa575",
    "workers": ["SemBot Frontend (angular)"],
    "executor": "claude",
    "model": "claude-sonnet-4-5-20250929",
    "docker_worker": "sbf",
    "created_at": "2025-10-06T10:30:00Z",
    "updated_at": "2025-10-06T12:16:00Z",
    "is_active": true,
    "message_count": 15,
    "author_mapping": {
      "task": {
        "name": "712020:499ddb09-7cab-4147-910d-d38e7b2fa575",
        "url": "[email protected]:712020:499ddb09-7cab-4147-910d-d38e7b2fa575"
      },
      "git": {
        "name": "tkowalski29",
        "url": "[email protected]:tkowalski29"
      },
      "chat": {
        "name": "tkowalski",
        "url": "https://discord.com/users/tkowalski"
      },
      "realname": {
        "name": "Tomasz Kowalski",
        "url": ""
      }
    }
  },
  "created_at": "2025-10-06T10:30:00Z",
  "updated_at": "2025-10-06T12:16:00Z",
  "is_active": true,
  "message_count": 15,
  "preferred_executor": "claude",
  "model": "claude-sonnet-4-5-20250929"
}

Przykład:

bash
curl http://localhost:8080/api/chat/sessions/abc123-def456-...

6. List Sessions

Zwraca listę wszystkich aktywnych sesji.

Endpoint: GET /api/chat/sessions

Response:

json
[
  {
    "uuid": "abc123-def456-...",
    "worker": {...},
    "messages": [...],
    "created_at": "2025-10-06T10:30:00Z",
    "updated_at": "2025-10-06T12:16:00Z",
    "is_active": true,
    "message_count": 15
  }
]

Przykład:

bash
curl http://localhost:8080/api/chat/sessions

7. Recent Sessions

Zwraca listę ostatnich sesji posortowaną po updated_at.

Endpoint: GET /api/chat/recent-sessions

Response:

json
[
  {
    "uuid": "abc123-def456-...",
    "worker_name": "SemBot Frontend (angular)",
    "last_message": "2025-10-06T12:16:00Z"
  }
]

Przykład:

bash
curl http://localhost:8080/api/chat/recent-sessions

8. Send Message

Wysyła wiadomość do workera w ramach sesji.

Endpoint: POST /api/chat/sessions/{uuid}/messages

Parameters:

  • uuid (path) - UUID sesji

Request Body:

json
{
  "message": "która jest godzina?"
}

Response:

json
{
  "id": "msg-001",
  "timestamp": "2025-10-06T12:04:08Z",
  "question": {
    "content": "która jest godzina?",
    "role": "user",
    "timestamp": "2025-10-06T12:04:03Z"
  },
  "answer": {
    "content": "Aktualna godzina to 12:04.",
    "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"
  }
}

Przykład:

bash
curl -X POST http://localhost:8080/api/chat/sessions/abc123-def456-.../messages \
  -H "Content-Type: application/json" \
  -d '{"message":"która jest godzina?"}'

9. Get Session Status

Zwraca aktualny status sesji.

Endpoint: GET /api/chat/sessions/{uuid}/status

Parameters:

  • uuid (path) - UUID sesji

Response:

json
{
  "is_active": true,
  "message_count": 15,
  "last_activity": "2025-10-06T12:16:00Z",
  "executor": "claude",
  "model": "claude-sonnet-4-5-20250929"
}

Przykład:

bash
curl http://localhost:8080/api/chat/sessions/abc123-def456-.../status

10. Close Session

Zamyka sesję (ustawia is_active: false).

Endpoint: POST /api/chat/sessions/{uuid}/close

Parameters:

  • uuid (path) - UUID sesji

Response:

json
{
  "message": "Session closed successfully"
}

Przykład:

bash
curl -X POST http://localhost:8080/api/chat/sessions/abc123-def456-.../close

11. Update Preferred Executor

Aktualizuje preferowany executor dla sesji.

Endpoint: PUT /api/chat/sessions/{uuid}/executor

Parameters:

  • uuid (path) - UUID sesji

Request Body:

json
{
  "executor": "claude"
}

Response:

json
{
  "message": "Executor preference updated successfully"
}

Przykład:

bash
curl -X PUT http://localhost:8080/api/chat/sessions/abc123-def456-.../executor \
  -H "Content-Type: application/json" \
  -d '{"executor":"claude"}'

12. Update Model

Aktualizuje model AI dla sesji.

Endpoint: PUT /api/chat/sessions/{uuid}/model

Parameters:

  • uuid (path) - UUID sesji

Request Body:

json
{
  "model": "claude-sonnet-4-5-20250929"
}

Response:

json
{
  "message": "Model preference updated successfully"
}

Przykład:

bash
curl -X PUT http://localhost:8080/api/chat/sessions/abc123-def456-.../model \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-sonnet-4-5-20250929"}'

13. Get Chat Metadata

Zwraca plik chat.json z metadanymi sesji.

Endpoint: GET /api/chat/sessions/{uuid}/metadata

Parameters:

  • uuid (path) - UUID sesji

Response:

json
{
  "session_id": "abc123-def456-...",
  "task_id": "TASK-001",
  "task_link": "https://github.com/org/repo/issues/123",
  "title": "Implementacja modułu...",
  "description": "Opis konwersacji...",
  "author": "712020:499ddb09-7cab-4147-910d-d38e7b2fa575",
  "workers": ["SemBot Frontend (angular)"],
  "executor": "claude",
  "model": "claude-sonnet-4-5-20250929",
  "docker_worker": "sbf",
  "created_at": "2025-10-06T10:30:00Z",
  "updated_at": "2025-10-06T12:16:00Z",
  "is_active": true,
  "message_count": 15,
  "author_mapping": {
    "task": {...},
    "git": {...},
    "chat": {...},
    "realname": {...}
  }
}

Przykład:

bash
curl http://localhost:8080/api/chat/sessions/abc123-def456-.../metadata

14. Get LLM Outputs

Zwraca listę plików output LLM dla sesji.

Endpoint: GET /api/chat/sessions/{uuid}/outputs

Parameters:

  • uuid (path) - UUID sesji

Response:

json
[
  {
    "filename": "claude_20251006_120403.json",
    "path": "/path/to/.chat/abc123.../llm_outputs/claude_20251006_120403.json",
    "size": 4231
  },
  {
    "filename": "claude_20251006_120510.json",
    "path": "/path/to/.chat/abc123.../llm_outputs/claude_20251006_120510.json",
    "size": 3847
  }
]

Przykład:

bash
curl http://localhost:8080/api/chat/sessions/abc123-def456-.../outputs

15. Get LLM Output File

Zwraca zawartość konkretnego pliku output LLM.

Endpoint: GET /api/chat/sessions/{uuid}/outputs/{filename}

Parameters:

  • uuid (path) - UUID sesji
  • filename (path) - Nazwa pliku (np. claude_20251006_120403.json)

Response:

json
{
  "filename": "claude_20251006_120403.json",
  "path": "/path/to/.chat/abc123.../llm_outputs/claude_20251006_120403.json",
  "raw_output": "{\"type\":\"system\",\"subtype\":\"init\",...}\n{\"type\":\"assistant\",...}\n{\"type\":\"result\",...}",
  "size": 4231
}

Przykład:

bash
curl http://localhost:8080/api/chat/sessions/abc123-def456-.../outputs/claude_20251006_120403.json

16. Render LLM Output

Renderuje output LLM jako sformatowany HTML.

Endpoint: GET /api/chat/sessions/{uuid}/outputs/{filename}/render

Parameters:

  • uuid (path) - UUID sesji
  • filename (path) - Nazwa pliku

Response: HTML (text/html)

Przykład:

bash
curl http://localhost:8080/api/chat/sessions/abc123-def456-.../outputs/claude_20251006_120403.json/render

Output (sformatowany HTML):

html
<div class="claude-output">
  <div class="system-message">
    <strong>System:</strong> Session initialized
  </div>
  <div class="assistant-message">
    <strong>Assistant:</strong> Aktualna godzina to 12:04.
  </div>
  <div class="result-message">
    <strong>Result:</strong> Success (4231ms, $0.038)
  </div>
</div>

Docker Management Endpoints

17. Get Docker Status

Sprawdza status kontenera Docker dla sesji.

Endpoint: GET /api/chat/sessions/{uuid}/docker/status

Parameters:

  • uuid (path) - UUID sesji

Response:

json
{
  "running": true,
  "worker_tag": "sbf",
  "container_name": "chat-abc123-def456-..."
}

Przykład:

bash
curl http://localhost:8080/api/chat/sessions/abc123-def456-.../docker/status

18. Start Docker Container

Uruchamia kontener Docker dla sesji.

Endpoint: POST /api/chat/sessions/{uuid}/docker/start

Parameters:

  • uuid (path) - UUID sesji

Response:

json
{
  "success": true,
  "message": "Docker container started"
}

Przykład:

bash
curl -X POST http://localhost:8080/api/chat/sessions/abc123-def456-.../docker/start

19. Restart Docker Container

Restartuje kontener Docker dla sesji.

Endpoint: POST /api/chat/sessions/{uuid}/docker/restart

Parameters:

  • uuid (path) - UUID sesji

Response:

json
{
  "success": true,
  "message": "Docker container restarted"
}

Przykład:

bash
curl -X POST http://localhost:8080/api/chat/sessions/abc123-def456-.../docker/restart

20. Stop Docker Container

Zatrzymuje kontener Docker dla sesji.

Endpoint: POST /api/chat/sessions/{uuid}/docker/stop

Parameters:

  • uuid (path) - UUID sesji

Response:

json
{
  "success": true,
  "message": "Docker container stopped"
}

Przykład:

bash
curl -X POST http://localhost:8080/api/chat/sessions/abc123-def456-.../docker/stop

21. Get Docker Logs

Pobiera logi z kontenera Docker.

Endpoint: GET /api/chat/sessions/{uuid}/docker/logs

Parameters:

  • uuid (path) - UUID sesji

Response: Plain text (text/plain)

[2025-10-06 12:04:03] 📦 Installing dependencies...
[2025-10-06 12:04:05] ✅ git installed
[2025-10-06 12:04:06] ⬇️ Installing Claude CLI...
[2025-10-06 12:04:10] ✅ Claude CLI installed
[2025-10-06 12:04:11] 🔑 Setting up SSH...
[2025-10-06 12:04:12] 📂 Cloning repositories...
[2025-10-06 12:04:20] ✅ Cloned: sembot-angular
[2025-10-06 12:04:21] ✅ Container ready

Przykład:

bash
curl http://localhost:8080/api/chat/sessions/abc123-def456-.../docker/logs

Error Responses

Wszystkie endpointy mogą zwrócić następujące błędy:

400 Bad Request

json
{
  "error": "Invalid request body"
}

Przyczyny:

  • Nieprawidłowy JSON w request body
  • Brak wymaganych pól
  • Nieprawidłowe wartości parametrów

404 Not Found

json
{
  "error": "Session not found"
}

Przyczyny:

  • Sesja o podanym UUID nie istnieje
  • Plik został usunięty
  • Worker nie istnieje

500 Internal Server Error

json
{
  "error": "Failed to start Docker: ..."
}

Przyczyny:

  • Błąd serwera
  • Problem z Docker
  • Błąd zapisu do pliku
  • Błąd wykonania Claude CLI

Rate Limiting

API nie ma obecnie limitów, ale zaleca się:

  • Maksymalnie 10 request/s na sesję
  • Timeout dla długich operacji (np. Docker start): 120s

Webhook Notifications

Chat może wysyłać powiadomienia przez webhook:

Konfiguracja:

yaml
server:
  chat:
    webhook_url: "https://webhook.url"

Payload:

json
{
  "event": "message_sent",
  "session_id": "abc123-def456-...",
  "message_id": "msg-001",
  "timestamp": "2025-10-06T12:04:08Z",
  "question": "która jest godzina?",
  "answer": "Aktualna godzina to 12:04."
}

Events:

  • session_created - nowa sesja utworzona
  • message_sent - nowa wiadomość wysłana
  • session_closed - sesja zamknięta
  • docker_started - kontener Docker uruchomiony
  • docker_stopped - kontener Docker zatrzymany

Przykłady użycia

Complete workflow: Utworzenie sesji i wysłanie wiadomości

bash
# 1. Pobierz listę workerów
curl http://localhost:8080/api/chat/workers

# 2. Utwórz sesję
SESSION_RESPONSE=$(curl -X POST http://localhost:8080/api/chat/sessions \
  -H "Content-Type: application/json" \
  -d '{"worker_id":"SemBot Frontend (angular)"}')

SESSION_UUID=$(echo $SESSION_RESPONSE | jq -r '.session.uuid')

# 3. Wyślij wiadomość
curl -X POST http://localhost:8080/api/chat/sessions/$SESSION_UUID/messages \
  -H "Content-Type: application/json" \
  -d '{"message":"która jest godzina?"}'

# 4. Pobierz szczegóły sesji
curl http://localhost:8080/api/chat/sessions/$SESSION_UUID

# 5. Pobierz metadata
curl http://localhost:8080/api/chat/sessions/$SESSION_UUID/metadata

# 6. Zamknij sesję
curl -X POST http://localhost:8080/api/chat/sessions/$SESSION_UUID/close

Praca z Docker

bash
# 1. Sprawdź status
curl http://localhost:8080/api/chat/sessions/$SESSION_UUID/docker/status

# 2. Uruchom kontener (jeśli nie działa)
curl -X POST http://localhost:8080/api/chat/sessions/$SESSION_UUID/docker/start

# 3. Sprawdź logi
curl http://localhost:8080/api/chat/sessions/$SESSION_UUID/docker/logs

# 4. Zatrzymaj kontener
curl -X POST http://localhost:8080/api/chat/sessions/$SESSION_UUID/docker/stop

Następne kroki