docs: Dokumentation aktualisieren (Telegram Bots, OpenClaw Import, Public-Flags)
ARCHITECTURE.md: - Telegram-Integration komplett umgeschrieben (Bots als eigenständige Entität) - Neuer Abschnitt: OpenClaw Import (Funktionsweise, sort_key, Frontend) - Entity-Relationship: TelegramBot hinzugefügt - Tabellen: telegram_links → telegram_bots, Sessions/Agents/Messages aktualisiert - Frontend-Routing: telegram-bot-page hinzugefügt - Projektstruktur: neue Dateien (TelegramBotRecord, OpenClawEndpoint, telegram-bot-page) - Agent-System: IsPublic Property dokumentiert - Card-Builder: buildTelegramBotCard dokumentiert - API-Endpunkte: Telegram + OpenClaw aktualisiert ARCHITECTURE_QUICK.md: - Datenmodell: TelegramBot-Relation, telegram_bots statt telegram_links - Sessions/Agents/Messages Felder aktualisiert - API-Tabelle: Telegram + OpenClaw Endpoints - Frontend-Routing: telegram-bot Page - Auth: Webhook-Pfad auf botId aktualisiert README.md: - Telegram-Feature-Beschreibung aktualisiert - OpenClaw Import als Feature hinzugefügt
This commit is contained in:
1 parent
4f847bd33d
commit
677b227200
3 files changed
+106
-44
No files matched your search
+92
-34
@@ -111,6 +111,7 @@ gott/
|
||||
│ ├── CronjobRecord.cs
|
||||
│ ├── KreaImageRecord.cs
|
||||
│ ├── SharedMessageRecord.cs # Geteilte Nachrichten (Share-Token)
|
||||
│ ├── TelegramBotRecord.cs # Telegram Bot Entität
|
||||
│ ├── ChatModels.cs # ChatMessage, ChatRequest, AttachmentInfo/Block
|
||||
│ └── ChatContext.cs # Runtime-Kontext für einen Chat + ReviewContext
|
||||
│
|
||||
@@ -137,7 +138,8 @@ gott/
|
||||
│ ├── SessionEndpoint.cs # CRUD + SystemPrompt, Exec, Git-Status
|
||||
│ ├── AgentEndpoint.cs # CRUD
|
||||
│ ├── WorkspaceEndpoint.cs # File-Tree, File-Read/Write, Browse, Agent-Files
|
||||
│ ├── TelegramEndpoint.cs # Webhook, Config, Registration
|
||||
│ ├── TelegramEndpoint.cs # Bot-CRUD, Webhook, Session-Config, Registration
|
||||
│ ├── OpenClawEndpoint.cs # OpenClaw Session Import
|
||||
│ ├── CronjobEndpoint.cs # CRUD + Toggle, Manual Run
|
||||
│ ├── KreaEndpoint.cs # Generate, List, File-Serve
|
||||
│ ├── SkillEndpoint.cs # List, Agent-Skill-Mapping, Output-Files
|
||||
@@ -210,6 +212,7 @@ gott/
|
||||
│ │ │ ├── dashboard.js # Dashboard / Home
|
||||
│ │ │ ├── session-page.js # Session-Einstellungen
|
||||
│ │ │ ├── agent-page.js # Agent-Editor
|
||||
│ │ │ ├── telegram-bot-page.js # Telegram-Bot-Editor
|
||||
│ │ │ ├── cronjob-page.js # Cronjob-Verwaltung
|
||||
│ │ │ ├── profile-page.js # Profil-Bearbeitung
|
||||
│ │ │ ├── admin-page.js # Admin: Benutzerverwaltung
|
||||
@@ -272,6 +275,8 @@ Session (1) ─── (*) Cronjob
|
||||
User (1) ─── (*) Cronjob
|
||||
User (1) ─── (*) SharedMessage
|
||||
Message (1) ─── (*) SharedMessage
|
||||
User (1) ─── (*) TelegramBot
|
||||
TelegramBot (1) ─── (*) Session (via telegram_bot_id)
|
||||
```
|
||||
|
||||
### Tabellen
|
||||
@@ -280,16 +285,16 @@ Message (1) ─── (*) SharedMessage
|
||||
|-------------------|-----------------------------------------------------|
|
||||
| `users` | Benutzer (username, password_hash, display_name, is_admin, persona, settings, default_path) |
|
||||
| `tokens` | Auth-Tokens (token → user_id) |
|
||||
| `agents` | AI-Agenten (model, tool_choice, custom_commands, auto_commit, use_soul/identity/user_info/memory, use_web_search, web_search_version, allow_user_choice, task_instruction, avatar_scale/offset, avatar_small) |
|
||||
| `sessions` | Chat-Sessions (description, image, image_small, workspace, context, custom_commands, telegram-config, telegram_allowed_chat_ids, avatar_scale/offset, preparer_agent_id, review_agent_id, max_review_iterations, finalizer_agent_id) |
|
||||
| `agents` | AI-Agenten (model, tool_choice, custom_commands, auto_commit, use_soul/identity/user_info/memory, use_web_search, web_search_version, allow_user_choice, task_instruction, avatar_scale/offset, avatar_small, is_public) |
|
||||
| `sessions` | Chat-Sessions (description, image, image_small, workspace, context, custom_commands, telegram_bot_id, telegram_chat_id, avatar_scale/offset, preparer_agent_id, review_agent_id, max_review_iterations, finalizer_agent_id) |
|
||||
| `chains` | Request-Chains (model, tokens, iterations, timing, tool_choice, tool_names, stream_error_info, plan_mode, archive_id) |
|
||||
| `messages` | Einzelne Nachrichten (text, tool_use, tool_result, error, web_search_result), Tag für Sub-Agent-Markierung |
|
||||
| `messages` | Einzelne Nachrichten (text, tool_use, tool_result, error, web_search_result), Tag für Sub-Agent-Markierung oder Import-Herkunft (`openclaw-import`), SortKey für korrekte Reihenfolge |
|
||||
| `attachments` | Datei-Anhänge (base64, image/document) |
|
||||
| `archives` | Archivierte Chain-Gruppen |
|
||||
| `agent_skills` | Agent ↔ Skill Zuordnung |
|
||||
| `cronjobs` | Geplante Tasks (cron expression, prompt, notify_session_id, is_enabled, last_run, next_run) |
|
||||
| `shared_messages` | Geteilte Nachrichten (Share-Token, Ablaufdatum) |
|
||||
| `telegram_links` | Telegram Chat ↔ Session Verknüpfung |
|
||||
| `telegram_bots` | Telegram Bots (bot_token, webhook_secret, name, is_public) – eigenständige Entität |
|
||||
|
||||
### Zentrale Records
|
||||
|
||||
@@ -318,13 +323,13 @@ Message (1) ─── (*) SharedMessage
|
||||
- `Iteration` – Welche Tool-Loop-Iteration
|
||||
- `AttachmentCount` – Anzahl angehängter Dateien
|
||||
- `AttachmentNames` – JSON-Array mit Dateinamen
|
||||
- `Tag` – Sub-Agent-Markierung (`null` = normal, `"preparer"/"review"/"finalizer"` = Sub-Agent-Message, wird aus API-History gefiltert)
|
||||
- `Tag` – Markierung (`null` = normal, `"preparer"/"review"/"finalizer"` = Sub-Agent-Message (wird aus API-History gefiltert), `"openclaw-import"` = importierte Nachricht (wird immer in History einbezogen))
|
||||
- `IsMarked` – Als wichtig markierte Nachricht (wird in System-Prompt aufgenommen)
|
||||
- `DeletedOn` – Soft-Delete Zeitstempel
|
||||
|
||||
**SessionWithStats** – Erweitertes Session-Objekt für Listen-Endpunkt:
|
||||
- Enthält alle `SessionRecord`-Felder + `MessageCount`, `ArchiveMessageCount`, `TotalMessageCount`
|
||||
- `TelegramConfigured`, `TelegramLinked` – Telegram-Status
|
||||
- `TelegramConfigured`, `TelegramLinked` – Telegram-Status (Bot zugewiesen / Chat-ID verknüpft)
|
||||
- `GitStatus` – Inline Git-Status-Summary (`Add`, `Edit`, `Delete`, `Outgoing`) oder `null` wenn kein Workspace (wird im Endpoint hinzugefügt, nicht Teil des Records)
|
||||
- `Image` wird durch `ImageSmall` ersetzt (Thumbnail für Dashboard-Performance)
|
||||
|
||||
@@ -388,7 +393,8 @@ Alle Endpoints folgen dem **Minimal API**-Pattern mit Extension Methods (`MapXxx
|
||||
| **Agents** | `/api/agents/` | CRUD (Liste inkl. inline Skills + Thumbnail) |
|
||||
| **Admin** | `/api/admin/` | `GET users`, `POST users`, `PUT users/{id}`, `PUT users/{id}/password`, `DELETE users/{id}`, `POST users/{id}/impersonate`, `POST users/{id}/login-link` (Admin-only) |
|
||||
| **Workspace** | `/api/workspace/` | `GET tree`, `GET/PUT file`, `GET browse`, `POST mkdir`, `DELETE dir`, `POST browse/mkdir`, `GET agent/tree`, `GET/PUT agent/file`, `POST agent/mkdir`, `GET raw` |
|
||||
| **Telegram** | `/api/telegram/` | `POST webhook/{sessionId}` (unauthenticated), Session-Config CRUD, Webhook-Management |
|
||||
| **Telegram** | `/api/telegram/` | Bot-CRUD (`/bots`, `/bots/available`), `POST webhook/{botId}` (unauthenticated), Session-Config, Webhook-Management |
|
||||
| **OpenClaw** | `/api/openclaw/` | `GET sessions` (Liste importierbarer Sessions), `POST import` (Import in bestehende Session) |
|
||||
| **Cronjobs** | `/api/cronjobs/` | CRUD + `POST toggle`, `POST run` |
|
||||
| **Krea** | `/api/images/` | `POST generate`, `GET list`, `GET file/{name}`, `GET file/{name}/thumb`, `GET status` |
|
||||
| **Skills** | `/api/skills` | `GET list`, `GET/PUT agent skills`, Output-Files + Thumbnails |
|
||||
@@ -407,7 +413,7 @@ Ausnahmen (kein Auth nötig):
|
||||
- Statische Dateien (nicht `/api/`)
|
||||
- `POST /api/auth/login`
|
||||
- `GET /api/auth/autologin` (Token-basierter Autologin via Link)
|
||||
- `POST /api/telegram/webhook/{sessionId}` (authentifiziert via Secret-Header)
|
||||
- `POST /api/telegram/webhook/{botId}` (authentifiziert via Secret-Header)
|
||||
- `GET /api/shared/{token}` (öffentlicher Zugriff auf geteilte Nachrichten)
|
||||
- `GET /api/images/file/*` (Krea-Bilder und Thumbnails, öffentlich)
|
||||
|
||||
@@ -450,6 +456,7 @@ Das Frontend ist eine **Single-Page Application** ohne Build-Step, komplett in V
|
||||
| `#/chat/{sessionId}` | `chat-page.js` | Chat-Ansicht |
|
||||
| `#/session/{sessionId}` | `session-page.js` | Session-Einstellungen |
|
||||
| `#/agent/{agentId}` | `agent-page.js` | Agent-Editor |
|
||||
| `#/telegram-bot/{botId}` | `telegram-bot-page.js` | Telegram-Bot-Editor |
|
||||
| `#/cronjobs` | `cronjob-page.js` | Cronjob-Verwaltung |
|
||||
| `#/profile` | `profile-page.js` | Profil |
|
||||
| `#/settings` | `settings-page.js` | App-Einstellungen |
|
||||
@@ -464,7 +471,7 @@ Das Frontend ist eine **Single-Page Application** ohne Build-Step, komplett in V
|
||||
- **api.js** – Zentraler API-Client mit `fetch()`-Wrapper, Auth-Redirect bei 401
|
||||
- **ui-helpers.js** – DOM-Helpers (`$`, `esc`, `truncate`), Toast-System, ScrollDown, Meta-Bar, Button-Builder
|
||||
- **markdown.js** – Markdown-Rendering (`renderMarkdown`), LaTeX/Code-Schutz, Krea-Gallery-Wrapping
|
||||
- **cards.js** – Card-Builder (`buildAgentCard()`, `buildSessionCard()`)
|
||||
- **cards.js** – Card-Builder (`buildAgentCard()`, `buildSessionCard()`, `buildTelegramBotCard()`)
|
||||
- **msg-actions.js** – Nachrichten-Aktionen (Delete, Mark, Share, Reply-Button, Timestamp)
|
||||
- **tool-ui.js** – Tool-Boxes (Diffs, Todos, File-Content), Visibility-Logik
|
||||
- **modals.js** – Modale Dialoge (System-Prompt, Command-Output, Krea-Image)
|
||||
@@ -482,8 +489,9 @@ Das Frontend ist eine **Single-Page Application** ohne Build-Step, komplett in V
|
||||
|
||||
### Wiederverwendbare Card-Builder (cards.js)
|
||||
|
||||
- **`buildAgentCard(agent)`** – Erzeugt ein `.card` DOM-Element für einen Agent (Avatar, Name, Model-Badge, Feature-Badges: toolChoice, autoCommit, useSoul, useIdentity, useUserInfo, useMemory, webSearch, Skills). Skills werden inline vom API-Endpunkt mitgeliefert. Wird im Dashboard und im Agent-Picker-Modal (Session-Formular) verwendet.
|
||||
- **`buildAgentCard(agent)`** – Erzeugt ein `.card` DOM-Element für einen Agent (Avatar, Name, Model-Badge, Feature-Badges: toolChoice, autoCommit, useSoul, useIdentity, useUserInfo, useMemory, webSearch, Skills, Public/Fremd). Skills werden inline vom API-Endpunkt mitgeliefert. Wird im Dashboard und im Agent-Picker-Modal (Session-Formular) verwendet.
|
||||
- **`buildSessionCard(session, agent)`** – Erzeugt ein `.card` DOM-Element für eine Session (Avatar, Name, Badges: Agent, Kontext, Telegram, Meta: Nachrichten/Archiv/Workspace, Git-Status). Git-Status wird inline vom API-Endpunkt mitgeliefert. Wird im Dashboard und im Session-Picker-Modal (Cronjob-Formular) verwendet.
|
||||
- **`buildTelegramBotCard(bot)`** – Erzeugt ein `.card` DOM-Element für einen Telegram Bot (Name, maskierter Token, Session-Count, Public/Fremd-Badges). Wird im Dashboard und im Bot-Picker-Modal (Session-Formular) verwendet.
|
||||
- **Picker-Modals** – Agent- und Session-Auswahl in Formularen (Session-/Cronjob-Seiten) erfolgt über modale Dialoge mit den Card-Buildern statt über Dropdowns.
|
||||
- **emoji.js** – Emoji-Picker mit Kategorien und Suche
|
||||
- **tooltip.js** – Tooltip-System für Hover-Infos
|
||||
@@ -666,6 +674,7 @@ Ein **Agent** definiert die Persönlichkeit und Fähigkeiten der AI:
|
||||
| `WebSearchVersion`| Web-Suche aktivieren (z.B. `web_search_20260209`) |
|
||||
| `AllowUserChoice` | `ask_user_choice`-Tool verfügbar (Default: true) |
|
||||
| `TaskInstruction` | Aufgabe/Anweisung – optionaler Text, wird als `## Anweisungen`-Block in System-Prompt eingefügt |
|
||||
| `IsPublic` | Andere User können den Agent in ihren Sessions verwenden (aber nicht bearbeiten) |
|
||||
|
||||
### Model-Auflösung
|
||||
|
||||
@@ -780,47 +789,61 @@ Wenn ein Agent Skills hat aber kein Workspace konfiguriert ist, wird automatisch
|
||||
|
||||
## Telegram-Integration
|
||||
|
||||
Sessions können mit einem **Telegram Bot** verbunden werden:
|
||||
Telegram Bots sind **eigenständige Entitäten** mit einer eigenen Tabelle (`telegram_bots`), die am Dashboard verwaltet werden (wie Agents, Sessions, Cronjobs). Ein Bot kann **mehreren Sessions** zugewiesen werden – jede Session hat ihren eigenen Chat-Kontext.
|
||||
|
||||
### Konfiguration
|
||||
### Datenmodell
|
||||
|
||||
Pro Session werden gespeichert:
|
||||
- `TelegramBotToken` – Bot-Token von @BotFather
|
||||
- `TelegramWebhookSecret` – Geheimer Token für Webhook-Verifizierung
|
||||
- `TelegramChatId` – Verknüpfte Chat-ID (Owner)
|
||||
- `TelegramAllowedChatIds` – Kommagetrennte Chat-ID-Whitelist für Zugriffskontrolle
|
||||
**Telegram Bot** (`telegram_bots`):
|
||||
- `BotId` – UUID
|
||||
- `UserId` – Owner
|
||||
- `Name` – Anzeigename
|
||||
- `BotToken` – Bot-Token von @BotFather
|
||||
- `WebhookSecret` – Einmalig generierter Token für Webhook-Verifizierung
|
||||
- `IsPublic` – Andere User können den Bot in ihren Sessions verwenden (aber nicht bearbeiten)
|
||||
|
||||
**Session-Felder:**
|
||||
- `TelegramBotId` – Verweis auf den zugewiesenen Bot (wie `AgentId`)
|
||||
- `TelegramChatId` – Verknüpfte Chat-ID (1 Session = max. 1 Telegram-Chat)
|
||||
|
||||
### Webhook-Flow
|
||||
|
||||
```
|
||||
1. User konfiguriert Bot-Token in Session-Settings
|
||||
2. User registriert Webhook (POST .../telegram/register-webhook)
|
||||
→ Setzt Webhook-URL: {baseUrl}/api/telegram/webhook/{sessionId}
|
||||
3. Telegram sendet Updates an Webhook
|
||||
4. AuthMiddleware lässt Webhook-Requests durch (kein Cookie nötig)
|
||||
5. TelegramEndpoint prüft X-Telegram-Bot-Api-Secret-Token Header
|
||||
6. TelegramService verarbeitet Update:
|
||||
- /start → Session verknüpfen (nur wenn noch kein Owner ODER Whitelist-Match)
|
||||
1. User erstellt Telegram Bot im Dashboard (Name + Token)
|
||||
2. User registriert Webhook auf der Bot-Page
|
||||
→ Setzt Webhook-URL: {baseUrl}/api/telegram/webhook/{botId}
|
||||
3. User weist Bot einer Session zu (Session-Settings, Bot-Picker)
|
||||
4. Telegram sendet Updates an Webhook
|
||||
5. AuthMiddleware lässt Webhook-Requests durch (kein Cookie nötig)
|
||||
6. TelegramEndpoint prüft X-Telegram-Bot-Api-Secret-Token Header
|
||||
7. TelegramService verarbeitet Update:
|
||||
- Bot laden via botId
|
||||
- Chat-ID extrahieren
|
||||
- Session suchen: telegram_bot_id = botId AND telegram_chat_id = chatId
|
||||
- /start → Auto-Link (wenn genau 1 unverknüpfte Session) oder Chat-ID anzeigen
|
||||
- /clear → History archivieren
|
||||
- /status → Session-Info anzeigen
|
||||
- /unlink → Verknüpfung aufheben
|
||||
- Text → An Claude weiterleiten (Non-Streaming)
|
||||
```
|
||||
|
||||
### Zugriffskontrolle (Chat-ID-Whitelist)
|
||||
### Auto-Link-Logik
|
||||
|
||||
Nicht jeder Telegram-User darf den Bot nutzen:
|
||||
Bei `/start` oder einer normalen Nachricht, wenn keine Session für den Chat verknüpft ist:
|
||||
1. Suche Sessions mit diesem Bot, die **noch keine Chat-ID** haben
|
||||
2. **Genau 1 gefunden** → Automatisch verknüpfen + Bestätigungsnachricht
|
||||
3. **0 oder mehrere gefunden** → "Deine Chat-ID ist X, bitte im Web-UI zuweisen"
|
||||
|
||||
1. **Erster `/start`**: Kein Owner → User wird automatisch Owner (`TelegramChatId` gesetzt)
|
||||
2. **Fremder `/start`**: User bekommt `🔒 Zugriff verweigert` + seine Chat-ID angezeigt
|
||||
3. **Owner-Benachrichtigung**: Owner erhält `🔔 Zugriffsanfrage` mit Username + Chat-ID
|
||||
4. **Freigabe**: Owner/Admin trägt Chat-ID in Session-Settings ein (`TelegramAllowedChatIds`)
|
||||
5. **Prüfung**: Alle Commands + Nachrichten prüfen via `IsChatIdAllowed()` (Owner + Whitelist)
|
||||
Unlink ist **nur über das Web-UI** möglich (kein Telegram-Befehl).
|
||||
|
||||
### Non-Streaming Chat
|
||||
|
||||
Telegram-Nachrichten werden über `AnthropicService.ChatNonStreaming()` verarbeitet. Die History wird genauso aus der DB aufgebaut wie beim Web-Chat. Antworten über 4096 Zeichen werden automatisch in Chunks aufgeteilt.
|
||||
|
||||
### Dashboard & Frontend
|
||||
|
||||
- **Dashboard**: Telegram-Bots-Section mit Cards (Name, maskierter Token, Session-Count)
|
||||
- **Bot-Page** (`#/telegram-bot/{botId}`): Name, Token, Webhook-Secret (readonly), Webhook-Verwaltung (registrieren/status/entfernen), Public-Checkbox, Löschen
|
||||
- **Session-Page**: Bot-Picker (wie Agent-Picker), readonly Chat-ID mit Unlink-Button
|
||||
|
||||
---
|
||||
|
||||
## Cronjob-System
|
||||
@@ -1500,6 +1523,41 @@ Im `WindowsApp/`-Ordner liegt ein minimaler **WPF WebView2 Client**:
|
||||
|
||||
---
|
||||
|
||||
## OpenClaw Import
|
||||
|
||||
Sessions können mit Chatverlauf aus einer **OpenClaw-Instanz** befüllt werden. Die Import-Quelle ist eine SQLite-Datenbank (`publish/data/openclaw-sessions.db`).
|
||||
|
||||
### Funktionsweise
|
||||
|
||||
- **`GET /api/openclaw/sessions`** – Listet alle Sessions aus der OpenClaw-DB mit Metadaten (Message-Count, Model, Summary, Preview-Messages)
|
||||
- **`POST /api/openclaw/import`** – Importiert eine OpenClaw-Session in eine bestehende Gott-Session
|
||||
|
||||
### Import-Logik
|
||||
|
||||
1. Liest alle `message`-Entries aus der OpenClaw-DB, gruppiert nach `chainId`
|
||||
2. **Nur Text-Nachrichten** werden importiert – Tool-Use/Tool-Result werden übersprungen
|
||||
3. **User-Message-Bereinigung**: Webchat-Prefixe (`[Direct 1:1 webchat ...]`, `[Current message ...]`, `[cron:...]`), `Conversation info`-Blöcke werden entfernt
|
||||
4. Pro Chain wird ein `ChainRecord` + `MessageRecords` erstellt, alle mit `tag = 'openclaw-import'`
|
||||
5. Timestamps werden aus OpenClaw übernommen (`created_at`)
|
||||
6. **Re-Import = Update**: Vorherige Import-Chains (erkennbar am Tag) werden gelöscht und neu importiert. Bestehende Compactions werden ebenfalls gelöscht.
|
||||
|
||||
### Sortierung (sort_key)
|
||||
|
||||
Importierte Messages werden **immer vor** normalen Messages einsortiert, da sie historisch älter sind:
|
||||
|
||||
```sql
|
||||
sort_key = CASE WHEN tag = 'openclaw-import' THEN id - 10000000000 ELSE id END
|
||||
```
|
||||
|
||||
Alle History-Queries (initial load, before/after-Paging, Polling) sortieren nach `sort_key`. OpenClaw-Messages bekommen negative sort_keys → erscheinen immer ganz oben. Innerhalb jeder Gruppe (OpenClaw / normal) wird nach `id` sortiert.
|
||||
|
||||
### Frontend
|
||||
|
||||
- **Dashboard**: Session-Menü → „OpenClaw Import" → Modal mit Session-Auswahl + Preview
|
||||
- **Chat**: Importierte Nachrichten zeigen ein blaues „OC"-Badge
|
||||
|
||||
---
|
||||
|
||||
## Deployment
|
||||
|
||||
### deploy.sh
|
||||
|
||||
+12
-9
@@ -27,7 +27,7 @@ gott/
|
||||
│ ├── js/api.js # fetch()-Wrapper
|
||||
│ ├── js/ui-helpers.js # DOM-Helpers ($, esc, truncate), Toast, ScrollDown
|
||||
│ ├── js/markdown.js # Markdown-Rendering (renderMarkdown, LaTeX-Schutz)
|
||||
│ ├── js/cards.js # Card-Builder (buildSessionCard, buildAgentCard)
|
||||
│ ├── js/cards.js # Card-Builder (buildSessionCard, buildAgentCard, buildTelegramBotCard)
|
||||
│ ├── js/msg-actions.js # Nachrichten-Aktionen (Delete, Mark, Share, Reply)
|
||||
│ ├── js/tool-ui.js # Tool-Boxes, Diffs, Visibility-Logik
|
||||
│ ├── js/modals.js # Modale Dialoge (System-Prompt, Command-Output)
|
||||
@@ -38,7 +38,7 @@ gott/
|
||||
│ ├── js/archive.js # Archiv-Loading
|
||||
│ ├── js/reply.js # Reply/Quote-Handling
|
||||
│ ├── js/files.js # File-Upload, Workspace-Refs
|
||||
│ ├── js/pages/ # Seiten-Komponenten
|
||||
│ ├── js/pages/ # Seiten-Komponenten (inkl. telegram-bot-page.js)
|
||||
│ └── css/ # Styles (theme.css = CSS Variables)
|
||||
├── WindowsApp/ # WPF + WebView2 Desktop Client
|
||||
└── publish/ # ⛔ NICHT editieren!
|
||||
@@ -59,22 +59,23 @@ User 1──* Agent 1──* Session 1──* Chain 1──* Message 1──* At
|
||||
Session 1──* Cronjob
|
||||
Session 1──* Archive
|
||||
User 1──* SharedMessage ──1 Message
|
||||
User 1──* TelegramBot 1──* Session (via telegram_bot_id)
|
||||
```
|
||||
|
||||
| Tabelle | Zweck |
|
||||
|---------|-------|
|
||||
| `users` | Login, DisplayName, IsAdmin, Persona, Settings (JSON), DefaultPath |
|
||||
| `tokens` | Auth-Tokens → User |
|
||||
| `agents` | AI-Agenten (Model, ToolChoice, CustomCommands, AutoCommit, UseSoul/Identity/UserInfo/Memory, WebSearch, AllowUserChoice, TaskInstruction, AvatarScale/Offset, AvatarSmall) |
|
||||
| `sessions` | Chat-Sessions (Description, Image, ImageSmall, Workspace, Context, CustomCommands, Telegram, AvatarScale/Offset, AllowedChatIds, PreparerAgentId, ReviewAgentId, MaxReviewIterations, FinalizerAgentId) |
|
||||
| `agents` | AI-Agenten (Model, ToolChoice, CustomCommands, AutoCommit, UseSoul/Identity/UserInfo/Memory, WebSearch, AllowUserChoice, TaskInstruction, AvatarScale/Offset, AvatarSmall, IsPublic) |
|
||||
| `sessions` | Chat-Sessions (Description, Image, ImageSmall, Workspace, Context, CustomCommands, TelegramBotId, TelegramChatId, AvatarScale/Offset, PreparerAgentId, ReviewAgentId, MaxReviewIterations, FinalizerAgentId) |
|
||||
| `chains` | Ein Request-Response-Zyklus (Tokens, Timing, Iterations, PlanMode, ToolChoice, ToolNames, StreamErrorInfo, ArchiveId) |
|
||||
| `messages` | Einzelne Nachrichten (text / tool_use / tool_result / error / web_search_result), Tag für Sub-Agent-Markierung |
|
||||
| `messages` | Einzelne Nachrichten (text / tool_use / tool_result / error / web_search_result), Tag für Sub-Agent-Markierung oder Import-Herkunft (`openclaw-import`) |
|
||||
| `attachments` | Base64-Anhänge (Bilder, Dokumente) |
|
||||
| `archives` | Archivierte Chain-Gruppen |
|
||||
| `cronjobs` | Geplante Tasks (Cron-Expression + Prompt) |
|
||||
| `agent_skills` | N:M Agent ↔ Skill |
|
||||
| `shared_messages` | Geteilte Nachrichten (öffentliche Links via Share-Token) |
|
||||
| `telegram_links` | Telegram Chat-ID ↔ Session |
|
||||
| `telegram_bots` | Telegram Bots (BotToken, WebhookSecret, Name, IsPublic) – eigenständige Entität, 1 Bot → N Sessions |
|
||||
|
||||
---
|
||||
|
||||
@@ -89,7 +90,8 @@ User 1──* Agent 1──* Session 1──* Chain 1──* Message 1──* At
|
||||
| Agents | `/api/agents/` | CRUD (Liste inkl. inline Skills) |
|
||||
| Admin | `/api/admin/` | User CRUD, impersonate, login-link (Admin-only) |
|
||||
| Workspace | `/api/workspace/` | tree, file read/write, mkdir, rmdir, browse, agent-files |
|
||||
| Telegram | `/api/telegram/` | webhook (unauth), config, registration |
|
||||
| Telegram | `/api/telegram/` | Bot-CRUD, webhook/{botId} (unauth), session-config, registration |
|
||||
| OpenClaw | `/api/openclaw/` | Import von OpenClaw-Sessions (sessions, import) |
|
||||
| Cronjobs | `/api/cronjobs/` | CRUD + toggle, manual run |
|
||||
| Krea | `/api/images/` | generate, list, file-serve, thumb, status (file/* ohne Auth) |
|
||||
| Skills | `/api/skills` | list, agent-mapping, output-files |
|
||||
@@ -115,7 +117,7 @@ User 1──* Agent 1──* Session 1──* Chain 1──* Message 1──* At
|
||||
| **SystemPromptBuilder** | System-Prompt aus modularen Blöcken zusammenbauen (static) |
|
||||
| **MemoryService** | Agent-Gedächtnis auf Dateisystem |
|
||||
| **SkillService** | Skill-Discovery aus Dateisystem |
|
||||
| **TelegramService** | Telegram Bot API |
|
||||
| **TelegramService** | Telegram Bot API (Bot-basiert, Multi-Session-Routing) |
|
||||
| **CronjobService** | BackgroundService, minütlicher Cron-Check |
|
||||
| **KreaService** | Krea API Bildgenerierung + Job-Polling |
|
||||
| **ImageService** | Bild-Resize + WebP-Konvertierung (512px + 256px Thumbnail) |
|
||||
@@ -212,6 +214,7 @@ User-Input → POST /api/chat (SSE)
|
||||
| `#/chat/{id}` | `chat-page.js` | Chat |
|
||||
| `#/session/{id}` | `session-page.js` | Session-Settings |
|
||||
| `#/agent/{id}` | `agent-page.js` | Agent-Editor |
|
||||
| `#/telegram-bot/{id}` | `telegram-bot-page.js` | Telegram-Bot-Editor |
|
||||
| `#/cronjobs` | `cronjob-page.js` | Cronjobs |
|
||||
| `#/profile` | `profile-page.js` | Profil |
|
||||
| `#/settings` | `settings-page.js` | Einstellungen |
|
||||
@@ -226,7 +229,7 @@ User-Input → POST /api/chat (SSE)
|
||||
|
||||
1. `POST /api/auth/login` → Token generiert, als `gott_token` HttpOnly Cookie gesetzt
|
||||
2. Jeder `/api/`-Request → `AuthMiddleware` prüft Cookie → setzt `UserId` + `IsAdmin`
|
||||
3. Ausnahmen: Login, Autologin, Telegram-Webhook, `GET /api/shared/{token}`, `GET /api/images/file/*` brauchen kein Auth
|
||||
3. Ausnahmen: Login, Autologin, Telegram-Webhook (`/api/telegram/webhook/{botId}`), `GET /api/shared/{token}`, `GET /api/images/file/*` brauchen kein Auth
|
||||
4. **Krea API-Key**: `/api/images/`-Routen akzeptieren `X-Api-Key`-Header (Config: `KreaApiKey`) für Automation ohne User-Kontext
|
||||
5. **Impersonate**: Admin kann via `POST /api/admin/users/{id}/impersonate` als anderer User einloggen
|
||||
6. **Login-Link**: Admin generiert via `POST /api/admin/users/{id}/login-link` einen Autologin-Link (Token-basiert, `GET /api/auth/autologin?token=xxx`)
|
||||
|
||||
@@ -21,11 +21,12 @@ Self-hosted AI-Coding-Agent auf Basis der Anthropic Claude API. Stellt eine Web-
|
||||
- **Skill-System** – Wiederverwendbare Prompt-Bausteine, zuordenbar pro Agent
|
||||
- **Memory** – Persistentes Gedächtnis pro Agent (Dateisystem-basiert)
|
||||
- **Workspace-Browser** – Integrierter Datei-Explorer mit Editor
|
||||
- **Telegram-Integration** – Agents über Telegram ansprechen
|
||||
- **Telegram-Integration** – Bots als eigenständige Entität, mehrere Sessions pro Bot, Public-Bots
|
||||
- **Cronjobs** – Zeitgesteuerte Prompts mit Cron-Expressions
|
||||
- **Bildgenerierung** – Krea AI Integration für Bildgenerierung
|
||||
- **Nachrichten teilen** – Einzelne Nachrichten per öffentlichem Link teilen
|
||||
- **Archivierung** – Chat-Verläufe archivieren und durchsuchen
|
||||
- **OpenClaw Import** – Chatverlauf aus OpenClaw-Instanzen importieren
|
||||
- **Benutzerverwaltung** – Multi-User mit Admin-Rollen, Impersonate, Login-Links
|
||||
- **Servereinstellungen** – Admin-UI für `appsettings.Production.json`
|
||||
- **Desktop-Client** – WPF + WebView2 Windows-App
|
||||
|
||||
Reference in new issue
Block a user