diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-22 21:54:49 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-22 21:54:49 +0300 |
| commit | f23e3779dc6827739fed34437519f548fcb9d76b (patch) | |
| tree | 648903975c2cc65281d82fbc2d6c1718aa10f96e /src/integration/assets/opencode/herdr-agent-state.test.ts | |
| parent | 73d17682ce2e8a3c5da6888f3b4d05abf1523929 (diff) | |
refactor: clarify opencode event state mapping
replaces contributions from soar
Diffstat (limited to 'src/integration/assets/opencode/herdr-agent-state.test.ts')
| -rw-r--r-- | src/integration/assets/opencode/herdr-agent-state.test.ts | 51 |
1 files changed, 51 insertions, 0 deletions
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; } |
