diff options
Diffstat (limited to 'packages/api/src')
| -rw-r--r-- | packages/api/src/agent-manager.ts | 9 | ||||
| -rw-r--r-- | packages/api/src/app.ts | 9 |
2 files changed, 14 insertions, 4 deletions
diff --git a/packages/api/src/agent-manager.ts b/packages/api/src/agent-manager.ts index 69c071d..c09a607 100644 --- a/packages/api/src/agent-manager.ts +++ b/packages/api/src/agent-manager.ts @@ -885,6 +885,7 @@ export class AgentManager { } tabAgent.abortController?.abort(); tabAgent.status = "idle"; + this.emit({ type: "status", status: "idle" }, tabId); tabAgent.agent = null; // Resolve any pending completion promise so retrieve doesn't hang tabAgent.completionResolve?.({ status: "error", error: "Agent was stopped." }); @@ -1193,10 +1194,10 @@ export class AgentManager { // Best-effort — if this fails, appendMessage will throw and we'll catch it below } - for await (const event of agent.run( - message, - reasoningEffort ? { reasoningEffort } : undefined, - )) { + for await (const event of agent.run(message, { + ...(reasoningEffort ? { reasoningEffort } : {}), + abortSignal: tabAgent.abortController?.signal, + })) { // Stop processing if the tab was aborted (closed/stopped). // stopTab() already injected a `cancelled` system chunk into // `chunks` before flipping the abort flag, so we just need diff --git a/packages/api/src/app.ts b/packages/api/src/app.ts index ba5dabd..73d3de5 100644 --- a/packages/api/src/app.ts +++ b/packages/api/src/app.ts @@ -94,6 +94,15 @@ app.post("/chat/cancel", async (c) => { return c.json({ success: cancelled }); }); +app.post("/chat/stop", async (c) => { + const body = await c.req.json(); + if (typeof body.tabId !== "string") { + return c.json({ error: "tabId is required" }, 400); + } + agentManager.stopTab(body.tabId); + return c.json({ success: true }); +}); + app.route("/skills", skillsRoutes); app.route("/models", modelsRoutes); app.route("/tabs", tabsRoutes); |
