Abort session work during dispose

This commit is contained in:
Mario Zechner
2026-05-28 11:26:52 +02:00
parent 9d5fb70b7e
commit 5b31ffd744
2 changed files with 11 additions and 0 deletions

View File

@@ -4,6 +4,7 @@
### Fixed
- Fixed session disposal to abort in-flight agent, compaction, branch summary, retry, and bash work ([#5029](https://github.com/earendil-works/pi/pull/5029) by [@TerminallyChilI](https://github.com/TerminallyChilI)).
- Fixed `pi.getAllTools()` to expose each tool's `promptGuidelines` for extensions that need per-tool guideline attribution ([#4879](https://github.com/earendil-works/pi/issues/4879)).
- Fixed follow-up messages queued by `agent_end` extension handlers to drain before the agent becomes idle ([#5115](https://github.com/earendil-works/pi-mono/pull/5115) by [@DanielThomas](https://github.com/DanielThomas)).
- Fixed extension input events to report `streamingBehavior` only for prompts actually queued during streaming ([#5107](https://github.com/earendil-works/pi-mono/pull/5107)).

View File

@@ -708,6 +708,16 @@ export class AgentSession {
* Call this when completely done with the session.
*/
dispose(): void {
try {
this.abortRetry();
this.abortCompaction();
this.abortBranchSummary();
this.abortBash();
this.agent.abort();
} catch {
// Dispose must succeed even if an abort hook throws.
}
this._extensionRunner.invalidate(
"This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().",
);