aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/integration/assets/omp/herdr-agent-state.ts21
-rw-r--r--src/integration/assets/pi/herdr-agent-state.ts21
-rw-r--r--src/integration/mod.rs8
3 files changed, 46 insertions, 4 deletions
diff --git a/src/integration/assets/omp/herdr-agent-state.ts b/src/integration/assets/omp/herdr-agent-state.ts
index a933e867..ba97b1c7 100644
--- a/src/integration/assets/omp/herdr-agent-state.ts
+++ b/src/integration/assets/omp/herdr-agent-state.ts
@@ -144,6 +144,19 @@ function sendState(state: AgentState, message?: string, seq = nextReportSeq()):
});
}
+function releaseAgent(): Promise<void> {
+ return sendRequest({
+ id: `${source}:release:${Date.now()}:${Math.random().toString(36).slice(2)}`,
+ method: "pane.release_agent",
+ params: {
+ pane_id: paneId,
+ source,
+ agent: "omp",
+ seq: nextReportSeq(),
+ },
+ });
+}
+
let sendInFlight = false;
let queuedState: QueuedState | undefined;
@@ -343,4 +356,12 @@ export default function (pi) {
scheduleIdle();
});
+
+ pi.on("session_shutdown", async () => {
+ if (!rootSession) {
+ return;
+ }
+ clearPendingTimers();
+ await releaseAgent();
+ });
}
diff --git a/src/integration/assets/pi/herdr-agent-state.ts b/src/integration/assets/pi/herdr-agent-state.ts
index 9af12cfd..6c9e1cae 100644
--- a/src/integration/assets/pi/herdr-agent-state.ts
+++ b/src/integration/assets/pi/herdr-agent-state.ts
@@ -144,6 +144,19 @@ function sendState(state: AgentState, message?: string, seq = nextReportSeq()):
});
}
+function releaseAgent(): Promise<void> {
+ return sendRequest({
+ id: `${source}:release:${Date.now()}:${Math.random().toString(36).slice(2)}`,
+ method: "pane.release_agent",
+ params: {
+ pane_id: paneId,
+ source,
+ agent: "pi",
+ seq: nextReportSeq(),
+ },
+ });
+}
+
let sendInFlight = false;
let queuedState: QueuedState | undefined;
@@ -343,4 +356,12 @@ export default function (pi) {
scheduleIdle();
});
+
+ pi.on("session_shutdown", async () => {
+ if (!rootSession) {
+ return;
+ }
+ clearPendingTimers();
+ await releaseAgent();
+ });
}
diff --git a/src/integration/mod.rs b/src/integration/mod.rs
index 0a00240b..14d88e19 100644
--- a/src/integration/mod.rs
+++ b/src/integration/mod.rs
@@ -5972,8 +5972,8 @@ mod tests {
assert!(PI_EXTENSION_ASSET.contains("pane.report_agent\""));
assert!(PI_EXTENSION_ASSET.contains("pi.on(\"agent_start\""));
assert!(PI_EXTENSION_ASSET.contains("pi.on(\"agent_end\""));
- assert!(!PI_EXTENSION_ASSET.contains("pane.release_agent"));
- assert!(!PI_EXTENSION_ASSET.contains("session_shutdown"));
+ assert!(PI_EXTENSION_ASSET.contains("pane.release_agent"));
+ assert!(PI_EXTENSION_ASSET.contains("pi.on(\"session_shutdown\""));
assert!(OMP_EXTENSION_ASSET.contains("agent_session_path"));
assert!(OMP_EXTENSION_ASSET.contains("agent_session_id"));
assert!(OMP_EXTENSION_ASSET.contains("ctx?.hasUI !== true"));
@@ -5981,8 +5981,8 @@ mod tests {
assert!(OMP_EXTENSION_ASSET.contains("pane.report_agent\""));
assert!(OMP_EXTENSION_ASSET.contains("pi.on(\"agent_start\""));
assert!(OMP_EXTENSION_ASSET.contains("pi.on(\"agent_end\""));
- assert!(!OMP_EXTENSION_ASSET.contains("pane.release_agent"));
- assert!(!OMP_EXTENSION_ASSET.contains("session_shutdown"));
+ assert!(OMP_EXTENSION_ASSET.contains("pane.release_agent"));
+ assert!(OMP_EXTENSION_ASSET.contains("pi.on(\"session_shutdown\""));
assert!(
CLAUDE_HOOK_ASSET.contains("agent_session_id")
|| CLAUDE_HOOK_ASSET.contains("--agent-session-id")