fix: release pi and omp agents on shutdown

This commit is contained in:
Ogulcan Celik 2026-06-21 17:26:45 +03:00
parent 4421c0febb
commit 734bf3c09d
3 changed files with 46 additions and 4 deletions

View File

@ -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();
});
}

View File

@ -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();
});
}

View File

@ -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")