From 236beefb708a6cd91b673978ddf4ebf045a9844c Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Sat, 23 May 2026 16:59:20 +0900 Subject: feat: key fallback using agent models[] hierarchy, background tool modes, copy truncation - Agent rate-limit fallback now iterates through agent's configured models[] in strict order - Frontend sends agentModels with each /chat request; backend uses buildFallbackSequence() - Emits notice event on fallback so chat shows which key failed and what's being tried next - Child agents inherit parent's agentModels for fallback - Added statusCode propagation from AI SDK errors for programmatic 429 detection - Copy button truncates all tool results at 300 chars (was 200 for 4 specific tools) - run_shell, summon, youtube_transcribe: background mode support - summon: blocking mode by default with getResult callback --- packages/api/src/app.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'packages/api/src/app.ts') diff --git a/packages/api/src/app.ts b/packages/api/src/app.ts index 9ccc911..d7dd0be 100644 --- a/packages/api/src/app.ts +++ b/packages/api/src/app.ts @@ -63,6 +63,7 @@ app.post("/chat", async (c) => { const keyId = typeof body.keyId === "string" ? body.keyId : undefined; const modelId = typeof body.modelId === "string" ? body.modelId : undefined; + const agentModels = Array.isArray(body.agentModels) ? body.agentModels : undefined; const workingDirectory = typeof body.workingDirectory === "string" ? body.workingDirectory : undefined; const validEfforts = ["none", "low", "medium", "high", "max"]; @@ -73,7 +74,7 @@ app.post("/chat", async (c) => { // Non-blocking — let the agent run in the background agentManager - .processMessage(tabId, message, keyId, modelId, reasoningEffort, workingDirectory) + .processMessage(tabId, message, keyId, modelId, reasoningEffort, workingDirectory, agentModels) .catch(console.error); return c.json({ status: "ok" }); -- cgit v1.2.3