diff options
Diffstat (limited to 'crates/dinggerd/assets/pi/pi-agent-state.ts')
| -rw-r--r-- | crates/dinggerd/assets/pi/pi-agent-state.ts | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/crates/dinggerd/assets/pi/pi-agent-state.ts b/crates/dinggerd/assets/pi/pi-agent-state.ts index df9e4e2..ff893e7 100644 --- a/crates/dinggerd/assets/pi/pi-agent-state.ts +++ b/crates/dinggerd/assets/pi/pi-agent-state.ts @@ -56,6 +56,19 @@ async function sendRequest(request: unknown): Promise<void> { type AgentState = "working" | "blocked" | "idle"; +// The session file, so `dingger restore` can resume this session with +// `pi --session <file>`. It changes with /new, /resume, and forks. +let sessionFile: string | undefined; + +function updateSessionFile(ctx: any): void { + try { + const file = ctx?.sessionManager?.getSessionFile?.(); + sessionFile = typeof file === "string" && file.length > 0 ? file : undefined; + } catch { + sessionFile = undefined; + } +} + function report(state: AgentState, message?: string): Promise<void> { return sendRequest({ id: `${source}:${Date.now()}:${Math.random().toString(36).slice(2)}`, @@ -67,6 +80,7 @@ function report(state: AgentState, message?: string): Promise<void> { state, message, seq: Date.now() * 1000, + ...(sessionFile ? { agent_session_path: sessionFile } : {}), }, }); } @@ -154,11 +168,13 @@ export default function (pi) { } // A reload can replace this extension mid-run without emitting another agent_start. agentActive = ctx?.isIdle?.() === false; + updateSessionFile(ctx); publishState(true); }); pi.on("agent_start", (_event, ctx) => { agentActive = true; + updateSessionFile(ctx); publishState(); }); |
