From f23e3779dc6827739fed34437519f548fcb9d76b Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Wed, 22 Jul 2026 21:54:49 +0300 Subject: refactor: clarify opencode event state mapping replaces contributions from soar --- .../assets/opencode/herdr-agent-state.test.ts | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'src/integration/assets/opencode/herdr-agent-state.test.ts') diff --git a/src/integration/assets/opencode/herdr-agent-state.test.ts b/src/integration/assets/opencode/herdr-agent-state.test.ts index d8d6d14d..be21fd71 100644 --- a/src/integration/assets/opencode/herdr-agent-state.test.ts +++ b/src/integration/assets/opencode/herdr-agent-state.test.ts @@ -114,6 +114,57 @@ test("suppresses redundant same-session updates", async () => { expect(requests.map(requestSessionID)).toEqual(["root-session", "replacement-session"]); }); +test("reports retry status as working", async () => { + const plugin = await loadPlugin(); + + await plugin.event({ + event: { + type: "session.status", + properties: { sessionID: "root-session", status: { type: "retry" } }, + }, + }); + + expect(requests.map(requestMethod)).toEqual(["pane.report_agent"]); + expect(requests.map(requestState)).toEqual(["working"]); + expect(requests.map(requestSessionID)).toEqual(["root-session"]); +}); + +test("reports child prompts without replacing the root session", async () => { + const plugin = await loadPlugin(); + + await plugin.event({ + event: { + type: "session.created", + properties: { + sessionID: "child-session", + info: { id: "child-session", parentID: "root-session" }, + }, + }, + }); + + for (const type of ["permission.asked", "question.asked"]) { + await plugin.event({ event: { type, properties: { sessionID: "child-session" } } }); + } + for (const type of ["permission.replied", "question.replied", "question.rejected"]) { + await plugin.event({ event: { type, properties: { sessionID: "child-session" } } }); + } + + expect(requests.map(requestState)).toEqual([ + "blocked", + "blocked", + "working", + "working", + "working", + ]); + expect(requests.map(requestSessionID)).toEqual([ + undefined, + undefined, + undefined, + undefined, + undefined, + ]); +}); + function requestMethod(request: unknown): unknown { return isRecord(request) ? request.method : undefined; } -- cgit v1.2.3