import path from "node:path" import type { ExtensionAPI, ExtensionContext, } from "@earendil-works/pi-coding-agent" const FRAMES = ["⡿", "⣟", "⣯", "⣷", "⣾", "⣽", "⣻", "⢿"] const INTERVAL_MS = 70 function baseTitle(pi: ExtensionAPI, cwdPath: string): string { const cwd = path.basename(cwdPath) const session = pi.getSessionName() return session ? `π - ${session} - ${cwd}` : `π - ${cwd}` } export default function (pi: ExtensionAPI): void { let timer: ReturnType | undefined let frameIndex = 0 function stop(ctx: ExtensionContext): void { if (timer) { clearInterval(timer) timer = undefined } frameIndex = 0 ctx.ui.setTitle(baseTitle(pi, ctx.cwd)) } function start(ctx: ExtensionContext): void { stop(ctx) timer = setInterval(() => { const frame = FRAMES[frameIndex % FRAMES.length] ctx.ui.setTitle(`${frame} ${baseTitle(pi, ctx.cwd)}`) frameIndex++ }, INTERVAL_MS) } pi.on("agent_start", async (_event, ctx) => { start(ctx) }) pi.on("agent_settled", async (_event, ctx) => { stop(ctx) }) pi.on("session_shutdown", async (_event, ctx) => { stop(ctx) }) }