Skip to content

Konfiguracja modułu Chat

Moduł Chat wymaga odpowiedniej konfiguracji workerów, executorów i mapowania autorów. Wszystkie ustawienia znajdują się w pliku config.yml.

Struktura konfiguracji

yaml
workers:
  - name: "Worker Name"
    path: "/path/to/worker"
    tags: ["tag"]
    docker_compose_path: "/path/to/docker"
    git_repository: "[email protected]:org/repo.git"
    git_branch: "main"

executors:
  claude:
    path: "/path/to/claude"
    config_path: "/path/to/.claude.json"
    use_skip_permissions: true

server:
  chat:
    dir: "/path/to/.chat"
    webhook_url: "https://webhook.url"

github:
  author_mapping:
    "author-id":
      real_name: "John Doe"
      initials: "JD"
      task: "task-id"
      git: "github-username"
      chat: "discord-id"
  url_patterns:
    task: "[email protected]:{USER_NAME}"
    git: "[email protected]:{USER_NAME}"
    chat: "https://discord.com/users/{USER_NAME}"

Workers (Workery)

Konfiguracja workera

Każdy worker reprezentuje projekt, w którym może działać Chat:

yaml
workers:
  - 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:
        - name: "memory"
          command: "claude mcp add memory npx -- [email protected]"

Parametry workera

ParametrTypOpis
namestringWymagany. Wyświetlana nazwa workera
pathstringWymagany. Ścieżka do katalogu projektu (dla lokalnego wykonania)
tagsarrayWymagany. Tagi identyfikujące workera (używane w Docker)
docker_compose_pathstringOpcjonalne. Ścieżka do katalogu z docker-compose.yml
git_repositorystringOpcjonalne. URL repozytorium Git (dla Docker executor)
git_branchstringOpcjonalne. Gałąź Git do sklonowania
mcp.checkarrayOpcjonalne. Komendy sprawdzające zależności
mcp.serversarrayOpcjonalne. Serwery MCP do konfiguracji

Multi-worker support

Chat może pracować z wieloma workerami jednocześnie:

json
{
  "workers": [
    "SemBot Frontend (angular)",
    "SemBot Backend (laravel)"
  ]
}

W trybie Docker pierwszy worker z listy jest używany jako główny kontekst.

Executors (Executory)

Claude Executor

Główny executor dla modułu Chat:

yaml
executors:
  claude:
    path: "/Users/user/.local/bin/claude"
    config_path: "/Users/user/.claude.json"
    use_skip_permissions: true

Parametry executora

ParametrTypOpis
pathstringWymagany. Ścieżka do CLI Claude
config_pathstringWymagany. Ścieżka do pliku konfiguracji .claude.json
use_skip_permissionsbooleanOpcjonalne. Czy używać --skip-permissions flag

Docker executor

Dla trybu Docker executor działa w kontenerze z:

  • Claude CLI zainstalowanym przez claude_install.sh
  • Konfiguracją montowaną z hosta (/root/.claude.json)
  • Kluczami SSH montowanymi z hosta
  • Pełnym kontekstem projektu

Server configuration

Chat directory

Katalog, w którym przechowywane są sesje:

yaml
server:
  chat:
    dir: "/path/to/.chat"
    webhook_url: "https://webhook.url"

Parametry

ParametrTypOpis
dirstringWymagany. Katalog sesji chat
webhook_urlstringOpcjonalne. URL webhook Discord dla powiadomień

Struktura katalogu

.chat/
└── {session-uuid}/
    ├── chat.json              # Metadata sesji
    ├── container.log          # Logi Docker (opcjonalne)
    ├── messages/
    │   └── msg_*.json         # Pary Q&A
    └── llm_outputs/
        └── *.json             # Raw output LLM

Author Mapping

System mapowania autorów pozwala łączyć różne identyfikatory użytkownika:

Konfiguracja

yaml
github:
  author_mapping:
    "712020:499ddb09-7cab-4147-910d-d38e7b2fa575":
      real_name: "Tomasz Kowalski"
      initials: "TK"
      task: "712020:499ddb09-7cab-4147-910d-d38e7b2fa575"
      git: "tkowalski29"
      chat: "tkowalski"

    "tkowalski29":
      real_name: "Tomasz Kowalski"
      initials: "TK"
      task: "tkowalski29"
      git: "tkowalski29"
      chat: "759808230162694204"

Pola author mapping

PoleOpis
real_namePełne imię i nazwisko
initialsInicjały (używane w UI)
taskID w systemie Task Manager
gitNazwa użytkownika GitHub
chatID Discord lub nazwa użytkownika chat

URL Patterns

Wzorce URL dla różnych kontekstów:

yaml
github:
  url_patterns:
    task: "[email protected]:{USER_NAME}"
    git: "[email protected]:{USER_NAME}"
    chat: "https://discord.com/users/{USER_NAME}"

Wzorzec {USER_NAME} jest zastępowany wartością z odpowiedniego pola (git, task, chat).

Przykład w UI

Autor w headerze chat:

👤 Tomasz Kowalski
   📋 Task | 🐙 GitHub | 💬 Chat
  • Task → Link do [email protected]:712020:499ddb09-7cab-4147-910d-d38e7b2fa575
  • GitHub → Link do [email protected]:tkowalski29
  • Chat → Link do https://discord.com/users/tkowalski

Docker configuration

Docker worker setup

Dla workerów z docker_compose_path:

yaml
workers:
  - name: "SemBot Chat"
    tags: ["sb"]
    docker_compose_path: "/path/to/docker/sembot-chat"

Struktura katalogu Docker

docker/sembot-chat/
├── docker-compose.yml
├── Dockerfile
└── start.sh

docker-compose.yml

yaml
version: '3.8'

services:
  sembot-chat:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: sembot-chat-${SESSION_UUID}
    working_dir: /app/worker
    environment:
      - WORKER_REPOS=${WORKER_REPOS}
      - WORKER_BRANCHES=${WORKER_BRANCHES}
    volumes:
      - ${SSH_AUTH_SOCK}:/ssh-agent
      - ~/.ssh:/root/.ssh:ro
      - ~/.claude.json:/root/.claude.json:ro
      - ${CHAT_SESSION_DIR}:/app/session
      - ${CLAUDE_CODE_RESOURCES}:/app/worker/.claude:rw
    env_file:
      - .env

Zmienne środowiskowe Docker

ZmiennaOpis
SESSION_UUIDUUID sesji chat
WORKER_REPOSLista repozytoriów (rozdzielone przecinkami)
WORKER_BRANCHESLista gałęzi (rozdzielone przecinkami)
SSH_AUTH_SOCKSocket SSH agent
CHAT_SESSION_DIRKatalog sesji (.chat/{uuid})
CLAUDE_CODE_RESOURCESKatalog z zasobami Claude Code

start.sh

Skrypt startowy kontenera:

bash
#!/bin/sh
set -e

SCRIPTS_DIR="/app/scripts"

# 1. Install dependencies
sh ${SCRIPTS_DIR}/init_dependencies.sh

# 2. Install Claude CLI
sh ${SCRIPTS_DIR}/claude_install.sh

# 3. Setup SSH
sh ${SCRIPTS_DIR}/ssh_setup.sh

# 4. Clone repositories
sh ${SCRIPTS_DIR}/project_repositories_multi.sh

# 5. Keep container running
tail -f /dev/null

Wspólne skrypty

Skrypty w embedded/resources/docker/scripts/:

  • init_dependencies.sh - Instalacja podstawowych pakietów (git, curl, jq)
  • claude_install.sh - Instalacja Claude CLI
  • ssh_setup.sh - Konfiguracja SSH agent i kluczy
  • project_repositories_multi.sh - Klonowanie repozytoriów

Przykładowa konfiguracja

Pełna konfiguracja chat

yaml
workers:
  - name: "SemBot Frontend (angular)"
    path: "/Users/user/Projects/sembot-angular"
    tags: ["sbf"]
    docker_compose_path: "/path/to/docker/sembot-angular"
    git_repository: "[email protected]:sembot-io/sembot-angular.git"
    git_branch: "master"

executors:
  claude:
    path: "/Users/user/.local/bin/claude"
    config_path: "/Users/user/.claude.json"
    use_skip_permissions: true

server:
  chat:
    dir: "/Users/user/Projects/code-gen-manager/.chat"
    webhook_url: "https://webhook.url"

github:
  author_mapping:
    "user-id":
      real_name: "John Doe"
      initials: "JD"
      task: "task-id"
      git: "johndoe"
      chat: "123456789"
  url_patterns:
    task: "[email protected]:{USER_NAME}"
    git: "[email protected]:{USER_NAME}"
    chat: "https://discord.com/users/{USER_NAME}"

Weryfikacja konfiguracji

Sprawdzenie workerów

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

Sprawdzenie executorów

bash
# Lokalnie
/path/to/claude --version

# Docker
docker exec container-name claude --version

Sprawdzenie author mapping

bash
curl http://localhost:8080/api/chat/sessions/{uuid}/metadata

Odpowiedź zawiera author_mapping:

json
{
  "author": "user-id",
  "author_mapping": {
    "task": {
      "name": "task-id",
      "url": "[email protected]:task-id"
    },
    "git": {
      "name": "johndoe",
      "url": "[email protected]:johndoe"
    },
    "chat": {
      "name": "123456789",
      "url": "https://discord.com/users/123456789"
    },
    "realname": {
      "name": "John Doe",
      "url": ""
    }
  }
}

Następne kroki