aboutsummaryrefslogtreecommitdiff
path: root/src/integration/assets/opencode/herdr-agent-state.test.ts
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-22 21:54:49 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-22 21:54:49 +0300
commitf23e3779dc6827739fed34437519f548fcb9d76b (patch)
tree648903975c2cc65281d82fbc2d6c1718aa10f96e /src/integration/assets/opencode/herdr-agent-state.test.ts
parent73d17682ce2e8a3c5da6888f3b4d05abf1523929 (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.ts51
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;
}