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
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:
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
| Parametr | Typ | Opis |
|---|---|---|
name | string | Wymagany. Wyświetlana nazwa workera |
path | string | Wymagany. Ścieżka do katalogu projektu (dla lokalnego wykonania) |
tags | array | Wymagany. Tagi identyfikujące workera (używane w Docker) |
docker_compose_path | string | Opcjonalne. Ścieżka do katalogu z docker-compose.yml |
git_repository | string | Opcjonalne. URL repozytorium Git (dla Docker executor) |
git_branch | string | Opcjonalne. Gałąź Git do sklonowania |
mcp.check | array | Opcjonalne. Komendy sprawdzające zależności |
mcp.servers | array | Opcjonalne. Serwery MCP do konfiguracji |
Multi-worker support
Chat może pracować z wieloma workerami jednocześnie:
{
"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:
executors:
claude:
path: "/Users/user/.local/bin/claude"
config_path: "/Users/user/.claude.json"
use_skip_permissions: trueParametry executora
| Parametr | Typ | Opis |
|---|---|---|
path | string | Wymagany. Ścieżka do CLI Claude |
config_path | string | Wymagany. Ścieżka do pliku konfiguracji .claude.json |
use_skip_permissions | boolean | Opcjonalne. 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:
server:
chat:
dir: "/path/to/.chat"
webhook_url: "https://webhook.url"Parametry
| Parametr | Typ | Opis |
|---|---|---|
dir | string | Wymagany. Katalog sesji chat |
webhook_url | string | Opcjonalne. 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 LLMAuthor Mapping
System mapowania autorów pozwala łączyć różne identyfikatory użytkownika:
Konfiguracja
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
| Pole | Opis |
|---|---|
real_name | Pełne imię i nazwisko |
initials | Inicjały (używane w UI) |
task | ID w systemie Task Manager |
git | Nazwa użytkownika GitHub |
chat | ID Discord lub nazwa użytkownika chat |
URL Patterns
Wzorce URL dla różnych kontekstów:
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:
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.shdocker-compose.yml
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:
- .envZmienne środowiskowe Docker
| Zmienna | Opis |
|---|---|
SESSION_UUID | UUID sesji chat |
WORKER_REPOS | Lista repozytoriów (rozdzielone przecinkami) |
WORKER_BRANCHES | Lista gałęzi (rozdzielone przecinkami) |
SSH_AUTH_SOCK | Socket SSH agent |
CHAT_SESSION_DIR | Katalog sesji (.chat/{uuid}) |
CLAUDE_CODE_RESOURCES | Katalog z zasobami Claude Code |
start.sh
Skrypt startowy kontenera:
#!/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/nullWspólne skrypty
Skrypty w embedded/resources/docker/scripts/:
init_dependencies.sh- Instalacja podstawowych pakietów (git, curl, jq)claude_install.sh- Instalacja Claude CLIssh_setup.sh- Konfiguracja SSH agent i kluczyproject_repositories_multi.sh- Klonowanie repozytoriów
Przykładowa konfiguracja
Pełna konfiguracja chat
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
curl http://localhost:8080/api/workersSprawdzenie executorów
# Lokalnie
/path/to/claude --version
# Docker
docker exec container-name claude --versionSprawdzenie author mapping
curl http://localhost:8080/api/chat/sessions/{uuid}/metadataOdpowiedź zawiera author_mapping:
{
"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": ""
}
}
}