User-spezifische API-Key-Auswahl, globales is_active entfernt
Backend:
- is_active komplett entfernt, durch is_public (Admin-Toggle) ersetzt
- Neues selected_api_key_id auf users-Tabelle
- AnthropicService: globaler _token entfernt, apiToken pro Request
- Token-Durchreichung: StreamChat → ProcessStream → RunAgentChat →
RunPreparer/RunReview/RunFinalizer, ExecuteTool, send_to_session
- ChatEndpoint: User-Key aus DB laden, an StreamChat übergeben
- TelegramService: Key per bot.UserId auflösen
- CronjobService: Key per job.UserId auflösen
- Neue Endpoints: GET /api/api-keys/available, PUT /api/api-keys/select/{keyId},
GET /api/api-keys/selected, PUT /api/admin/api-keys/{keyId}/public,
POST /api/admin/api-keys/check-all
- Program.cs: AnthropicService ohne Token-Parameter
Frontend:
- API-Keys-Page: Public-Toggle (Globe/Lock) statt Activate/Deactivate
- Alle prüfen Button für Batch-Key-Check
- Chat: Key-Auswahl für alle User (nicht nur Admin)
- Dummy-Badge wenn kein Key ausgewählt
- Fallback-Badge bei Key ohne Usage-Daten
- Key-Switch-Modal: apiGetAvailableKeys + apiSelectApiKey
This commit is contained in:
1 parent
cc46cf2bbc
commit
dde0fede7d
18 files changed
+340
-193
No files matched your search
@@ -80,7 +80,7 @@ public class TelegramService
|
||||
return;
|
||||
}
|
||||
|
||||
await HandleMessage(chatId, text, bot.BotToken, session);
|
||||
await HandleMessage(chatId, text, bot.BotToken, bot.UserId, session);
|
||||
}
|
||||
|
||||
private async Task HandleStart(long chatId, TelegramBotRecord bot, SessionRecord session)
|
||||
@@ -159,15 +159,24 @@ public class TelegramService
|
||||
|
||||
// ── Nachricht an Claude weiterleiten ──
|
||||
|
||||
private async Task HandleMessage(long chatId, string userText, string botToken, SessionRecord session)
|
||||
private async Task HandleMessage(long chatId, string userText, string botToken, string botUserId, SessionRecord session)
|
||||
{
|
||||
var ctx = await _chatService.PrepareContext(session.SessionId, null, _maxIterations);
|
||||
var ctx = await _chatService.PrepareContext(session.SessionId, botUserId, _maxIterations);
|
||||
if (ctx == null)
|
||||
{
|
||||
await SendMessage(chatId, botToken, "❌ Kein Agent konfiguriert. Bitte weise der Session im Web-UI einen Agent zu.");
|
||||
return;
|
||||
}
|
||||
|
||||
// API-Key des Bot-Owners auflösen
|
||||
var userApiKey = await _db.GetUserSelectedApiKey(botUserId);
|
||||
if (userApiKey == null)
|
||||
{
|
||||
await SendMessage(chatId, botToken, "❌ Kein API-Key ausgewählt. Der Bot-Besitzer muss im Web-UI einen Key auswählen.");
|
||||
return;
|
||||
}
|
||||
ctx.ApiToken = userApiKey.ApiKey;
|
||||
|
||||
await SendChatAction(chatId, botToken, "typing");
|
||||
|
||||
try
|
||||
|
||||
Reference in new issue
Block a user