From dd0d23cd966d9b4eadcf3a8d92e355f1c0d7d91d Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 6 Jan 2026 23:07:18 +0000 Subject: [PATCH] test(commands): add /stop native regression --- src/auto-reply/reply.triggers.test.ts | 48 +++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/auto-reply/reply.triggers.test.ts b/src/auto-reply/reply.triggers.test.ts index a312a1f55..9afaaa4bd 100644 --- a/src/auto-reply/reply.triggers.test.ts +++ b/src/auto-reply/reply.triggers.test.ts @@ -15,6 +15,7 @@ vi.mock("../agents/pi-embedded.js", () => ({ })); import { + abortEmbeddedPiRun, compactEmbeddedPiSession, runEmbeddedPiAgent, } from "../agents/pi-embedded.js"; @@ -39,6 +40,7 @@ async function withTempHome(fn: (home: string) => Promise): Promise { process.env.HOME = base; try { vi.mocked(runEmbeddedPiAgent).mockClear(); + vi.mocked(abortEmbeddedPiRun).mockClear(); return await fn(base); } finally { process.env.HOME = previousHome; @@ -98,6 +100,52 @@ describe("trigger handling", () => { }); }); + it("targets the active session for native /stop", async () => { + await withTempHome(async (home) => { + const cfg = makeCfg(home); + const targetSessionKey = "agent:main:telegram:group:123"; + const targetSessionId = "session-target"; + await fs.writeFile( + cfg.session.store, + JSON.stringify( + { + [targetSessionKey]: { + sessionId: targetSessionId, + updatedAt: Date.now(), + }, + }, + null, + 2, + ), + ); + + const res = await getReplyFromConfig( + { + Body: "/stop", + From: "telegram:111", + To: "telegram:111", + ChatType: "direct", + Provider: "telegram", + Surface: "telegram", + SessionKey: "telegram:slash:111", + CommandSource: "native", + CommandTargetSessionKey: targetSessionKey, + CommandAuthorized: true, + }, + {}, + cfg, + ); + + const text = Array.isArray(res) ? res[0]?.text : res?.text; + expect(text).toBe("⚙️ Agent was aborted."); + expect(vi.mocked(abortEmbeddedPiRun)).toHaveBeenCalledWith( + targetSessionId, + ); + const store = loadSessionStore(cfg.session.store); + expect(store[targetSessionKey]?.abortedLastRun).toBe(true); + }); + }); + it("restarts even with prefix/whitespace", async () => { await withTempHome(async (home) => { const res = await getReplyFromConfig(