{
  "version": 3,
  "sources": ["../src/herdr-agent-state.ts", "../src/herdr-client.ts", "../src/herdr-metadata.ts", "../src/herdr-protocol.ts", "../src/herdr-widget.ts", "../src/herdr-observer.ts", "../src/settings.ts", "../src/herdr-settings-controller.ts"],
  "sourcesContent": ["import path from \"node:path\";\nimport type { ExtensionAPI, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { createBestEffortSender, type HerdrRequest } from \"./herdr-client.js\";\nimport {\n  createHerdrMetadataClearSnapshot,\n  createHerdrMetadataRequest,\n  createHerdrMetadataSnapshot,\n  HERDR_METADATA_REFRESH_MS,\n  type HerdrMetadataSnapshot,\n  herdrMetadataSnapshotsEqual,\n} from \"./herdr-metadata.js\";\nimport { createHerdrWidgetObserver, type HerdrWidgetObserver } from \"./herdr-observer.js\";\n\nimport { createHerdrSettingsController, type HerdrSettingsOptions } from \"./herdr-settings-controller.js\";\n\nconst SOURCE = \"herdr:pi\";\n\nexport type AgentState = \"working\" | \"blocked\" | \"idle\";\n\ninterface HerdrEnvironment {\n  enabled: boolean;\n  paneId: string;\n  socketEndpoint: string;\n}\n\ninterface QueuedState {\n  state: AgentState;\n  message?: string;\n  seq: number;\n  signal: AbortSignal;\n}\n\ninterface QueuedMetadata {\n  snapshot: HerdrMetadataSnapshot;\n  seq: number;\n  signal: AbortSignal;\n  generation: number;\n}\n\nexport interface HerdrAgentStateOptions extends HerdrSettingsOptions {\n  environment?: HerdrEnvironment;\n  now?: () => number;\n  random?: () => number;\n  sendRequest?: (request: HerdrRequest, signal: AbortSignal) => Promise<void>;\n  widgetObserver?: HerdrWidgetObserver;\n}\n\nlet reportSeq = Date.now() * 1000;\n\nfunction nextReportSeq(): number {\n  reportSeq += 1;\n  return reportSeq;\n}\n\nexport function resolveSocketEndpoint(\n  socketPath: string | undefined,\n  platform: NodeJS.Platform = process.platform,\n): string {\n  if (!socketPath || platform !== \"win32\") return socketPath ?? \"\";\n  const normalized = socketPath.toLowerCase();\n  if (normalized.startsWith(\"\\\\\\\\.\\\\pipe\\\\\") || normalized.startsWith(\"\\\\\\\\?\\\\pipe\\\\\")) {\n    return socketPath;\n  }\n  return `\\\\\\\\.\\\\pipe\\\\${socketPath}`;\n}\n\nfunction readEnvironment(environment: NodeJS.ProcessEnv = process.env): HerdrEnvironment {\n  const socketPath = environment.HERDR_SOCKET_PATH;\n  const paneId = environment.HERDR_PANE_ID;\n  return {\n    enabled: environment.HERDR_ENV === \"1\" && !!socketPath && !!paneId,\n    paneId: paneId ?? \"\",\n    socketEndpoint: resolveSocketEndpoint(socketPath),\n  };\n}\n\nexport function createHerdrAgentStateExtension(options: HerdrAgentStateOptions = {}): (pi: ExtensionAPI) => void {\n  const environment = options.environment ?? readEnvironment();\n  const now = options.now ?? Date.now;\n  const random = options.random ?? Math.random;\n  const sendRequest = options.sendRequest ?? createBestEffortSender(environment.socketEndpoint);\n  const widgetObserver =\n    options.widgetObserver ??\n    createHerdrWidgetObserver({\n      environment,\n      now,\n      random,\n    });\n\n  return function herdrAgentState(pi: ExtensionAPI): void {\n    if (!environment.enabled) return;\n    const widget = createHerdrSettingsController(pi, widgetObserver, options);\n\n    let sessionGeneration = 0;\n    let sessionController = new AbortController();\n    let activeSession: ExtensionContext[\"sessionManager\"] | undefined;\n    let currentAgentSessionId: string | undefined;\n    let currentAgentSessionPath: string | undefined;\n    let agentActive = false;\n    let blockedCount = 0;\n    let blockedMessage: string | undefined;\n    let lastState: AgentState | undefined;\n    let lastMessage: string | undefined;\n    let rootSession = false;\n    let queuedState: QueuedState | undefined;\n    let drainTask: Promise<void> | undefined;\n    let queuedMetadata: QueuedMetadata | undefined;\n    let metadataDrainTask: Promise<void> | undefined;\n    let lastMetadataSnapshot: HerdrMetadataSnapshot | undefined;\n    let metadataRefreshTimer: ReturnType<typeof setTimeout> | undefined;\n    const sessionReportTasks = new Set<Promise<void>>();\n    let shutdownController: AbortController | undefined;\n    let shutdownSession: ExtensionContext[\"sessionManager\"] | undefined;\n    let shutdownTask: Promise<void> | undefined;\n\n    function requestId(kind?: \"session\"): string {\n      const segment = kind ? `${kind}:` : \"\";\n      return `${SOURCE}:${segment}${now()}:${random().toString(36).slice(2)}`;\n    }\n\n    function updateSessionRef(ctx: ExtensionContext): void {\n      try {\n        const file = ctx.sessionManager.getSessionFile();\n        currentAgentSessionPath = typeof file === \"string\" && path.isAbsolute(file) ? file : undefined;\n      } catch {\n        currentAgentSessionPath = undefined;\n      }\n\n      try {\n        const id = ctx.sessionManager.getSessionId();\n        currentAgentSessionId = typeof id === \"string\" && id.length > 0 ? id : undefined;\n      } catch {\n        currentAgentSessionId = undefined;\n      }\n    }\n\n    function currentSessionRef(): Record<string, unknown> | undefined {\n      if (currentAgentSessionPath) return { agent_session_path: currentAgentSessionPath };\n      if (currentAgentSessionId) return { agent_session_id: currentAgentSessionId };\n      return undefined;\n    }\n\n    function withSessionRef(params: Record<string, unknown>): Record<string, unknown> {\n      return { ...params, ...currentSessionRef() };\n    }\n\n    async function safeSend(request: HerdrRequest, signal: AbortSignal): Promise<void> {\n      try {\n        await sendRequest(request, signal);\n      } catch {\n        // Herdr reporting is best-effort and must not interrupt Pi.\n      }\n    }\n\n    function reportSession(sessionStartSource?: string): Promise<void> {\n      const sessionRef = currentSessionRef();\n      if (!sessionRef) return Promise.resolve();\n      const task = safeSend(\n        {\n          id: requestId(\"session\"),\n          method: \"pane.report_agent_session\",\n          params: {\n            pane_id: environment.paneId,\n            source: SOURCE,\n            agent: \"pi\",\n            seq: nextReportSeq(),\n            session_start_source: sessionStartSource,\n            ...sessionRef,\n          },\n        },\n        sessionController.signal,\n      );\n      sessionReportTasks.add(task);\n      void task.finally(() => sessionReportTasks.delete(task));\n      return task;\n    }\n\n    function stateRequest(state: QueuedState): HerdrRequest {\n      return {\n        id: requestId(),\n        method: \"pane.report_agent\",\n        params: withSessionRef({\n          pane_id: environment.paneId,\n          source: SOURCE,\n          agent: \"pi\",\n          state: state.state,\n          message: state.message,\n          seq: state.seq,\n        }),\n      };\n    }\n\n    function readMetadataSnapshot(ctx: ExtensionContext): HerdrMetadataSnapshot {\n      let session: string | undefined;\n      let contextUsagePercent: number | null | undefined;\n      try {\n        session = pi.getSessionName();\n      } catch {\n        // Metadata is best-effort and optional Pi fields can be unavailable.\n      }\n      try {\n        contextUsagePercent = ctx.getContextUsage()?.percent;\n      } catch {\n        // Clear unknown usage instead of retaining a stale percentage.\n      }\n      return createHerdrMetadataSnapshot({\n        model: ctx.model?.id,\n        provider: ctx.model?.provider,\n        thinking: ctx.thinkingLevel,\n        session,\n        contextUsagePercent,\n      });\n    }\n\n    function metadataRequest(metadata: QueuedMetadata): HerdrRequest {\n      return createHerdrMetadataRequest({\n        id: requestId(),\n        paneId: environment.paneId,\n        source: SOURCE,\n        seq: metadata.seq,\n        snapshot: metadata.snapshot,\n      });\n    }\n\n    async function drainStateQueue(): Promise<void> {\n      while (queuedState) {\n        const next = queuedState;\n        queuedState = undefined;\n        if (!next.signal.aborted) await safeSend(stateRequest(next), next.signal);\n      }\n    }\n\n    function queueState(state: AgentState, message?: string): void {\n      queuedState = {\n        state,\n        message,\n        seq: nextReportSeq(),\n        signal: sessionController.signal,\n      };\n      if (drainTask) return;\n      drainTask = drainStateQueue().finally(() => {\n        drainTask = undefined;\n        if (queuedState) queueState(queuedState.state, queuedState.message);\n      });\n    }\n\n    async function drainMetadataQueue(): Promise<void> {\n      while (queuedMetadata) {\n        const next = queuedMetadata;\n        queuedMetadata = undefined;\n        if (next.signal.aborted || next.generation !== sessionGeneration || !rootSession) {\n          continue;\n        }\n        await safeSend(metadataRequest(next), next.signal);\n      }\n    }\n\n    function startMetadataDrain(): void {\n      if (metadataDrainTask) return;\n      metadataDrainTask = drainMetadataQueue().finally(() => {\n        metadataDrainTask = undefined;\n        if (queuedMetadata) startMetadataDrain();\n      });\n    }\n\n    function scheduleMetadataRefresh(generation: number): void {\n      if (metadataRefreshTimer) clearTimeout(metadataRefreshTimer);\n      metadataRefreshTimer = setTimeout(() => {\n        metadataRefreshTimer = undefined;\n        if (\n          generation !== sessionGeneration ||\n          sessionController.signal.aborted ||\n          !rootSession ||\n          !lastMetadataSnapshot\n        ) {\n          return;\n        }\n        queueMetadata(lastMetadataSnapshot, true);\n      }, HERDR_METADATA_REFRESH_MS);\n      metadataRefreshTimer.unref?.();\n    }\n\n    function queueMetadata(snapshot: HerdrMetadataSnapshot, force = false): void {\n      if (!rootSession || sessionController.signal.aborted) return;\n      if (!force && herdrMetadataSnapshotsEqual(lastMetadataSnapshot, snapshot)) return;\n      lastMetadataSnapshot = snapshot;\n      queuedMetadata = {\n        snapshot,\n        seq: nextReportSeq(),\n        signal: sessionController.signal,\n        generation: sessionGeneration,\n      };\n      scheduleMetadataRefresh(sessionGeneration);\n      startMetadataDrain();\n    }\n\n    function owns(ctx: ExtensionContext): boolean {\n      return rootSession && ctx.sessionManager === activeSession;\n    }\n\n    function publishMetadata(ctx: ExtensionContext): void {\n      if (!owns(ctx)) return;\n      queueMetadata(readMetadataSnapshot(ctx));\n    }\n\n    function desiredState(): { state: AgentState; message?: string } {\n      if (blockedCount > 0) return { state: \"blocked\", message: blockedMessage };\n      if (agentActive) return { state: \"working\" };\n      return { state: \"idle\" };\n    }\n\n    function publishState(force = false): void {\n      const next = desiredState();\n      if (!force && next.state === lastState && next.message === lastMessage) return;\n      lastState = next.state;\n      lastMessage = next.message;\n      queueState(next.state, next.message);\n    }\n\n    pi.on(\"ui_prompt_start\", (event, ctx) => {\n      if (!owns(ctx)) return;\n      blockedCount += 1;\n      blockedMessage = event.title?.trim() || event.kind;\n      publishState();\n    });\n\n    pi.on(\"ui_prompt_end\", (_event, ctx) => {\n      if (!owns(ctx)) return;\n      blockedCount = Math.max(0, blockedCount - 1);\n      if (blockedCount === 0) blockedMessage = undefined;\n      publishState();\n    });\n\n    pi.on(\"session_start\", async (event, ctx) => {\n      const generation = ++sessionGeneration;\n      const replaced = new DOMException(\"Herdr session replaced\", \"AbortError\");\n      sessionController.abort(replaced);\n      shutdownController?.abort(replaced);\n      shutdownController = undefined;\n      shutdownTask = undefined;\n      shutdownSession = undefined;\n      if (metadataRefreshTimer) clearTimeout(metadataRefreshTimer);\n      metadataRefreshTimer = undefined;\n      queuedMetadata = undefined;\n      lastMetadataSnapshot = undefined;\n      sessionController = new AbortController();\n      activeSession = ctx.sessionManager;\n      rootSession = ctx.mode === \"tui\";\n      const widgetStart = widget.start(ctx);\n      agentActive = false;\n      blockedCount = 0;\n      blockedMessage = undefined;\n      lastState = undefined;\n      lastMessage = undefined;\n      if (!rootSession) {\n        await widgetStart;\n        return;\n      }\n\n      updateSessionRef(ctx);\n      const sessionReport = reportSession(event.reason);\n      publishMetadata(ctx);\n      await Promise.all([sessionReport, widgetStart]);\n      if (\n        generation !== sessionGeneration ||\n        activeSession !== ctx.sessionManager ||\n        sessionController.signal.aborted ||\n        !rootSession\n      ) {\n        return;\n      }\n      agentActive = !ctx.isIdle();\n      publishState(true);\n    });\n\n    pi.on(\"agent_start\", (_event, ctx) => {\n      if (!owns(ctx)) return;\n      updateSessionRef(ctx);\n      void reportSession();\n      agentActive = true;\n      publishState();\n    });\n\n    pi.on(\"agent_settled\", (_event, ctx) => {\n      if (!owns(ctx)) return;\n      publishMetadata(ctx);\n      if (!ctx.isIdle()) return;\n      agentActive = false;\n      publishState();\n    });\n\n    pi.on(\"session_info_changed\", (_event, ctx) => publishMetadata(ctx));\n    pi.on(\"model_select\", (_event, ctx) => publishMetadata(ctx));\n    pi.on(\"thinking_level_select\", (_event, ctx) => publishMetadata(ctx));\n    pi.on(\"session_compact\", (_event, ctx) => publishMetadata(ctx));\n\n    pi.on(\"session_shutdown\", async (_event, ctx) => {\n      if (ctx.sessionManager !== activeSession) {\n        await Promise.allSettled([widget.shutdown(ctx)]);\n        return;\n      }\n      if (shutdownTask && shutdownSession === ctx.sessionManager) {\n        await shutdownTask;\n        return;\n      }\n\n      const session = ctx.sessionManager;\n      const task = (async () => {\n        const shouldClearMetadata = rootSession;\n        const shutdownGeneration = ++sessionGeneration;\n        rootSession = false;\n        if (metadataRefreshTimer) clearTimeout(metadataRefreshTimer);\n        metadataRefreshTimer = undefined;\n        sessionController.abort(new DOMException(\"Herdr session shut down\", \"AbortError\"));\n        queuedState = undefined;\n        queuedMetadata = undefined;\n        await Promise.allSettled([...sessionReportTasks, drainTask, metadataDrainTask, widget.shutdown(ctx)]);\n        const stillOwnsShutdown = () =>\n          shutdownGeneration === sessionGeneration && activeSession === session && !rootSession;\n        if (shouldClearMetadata && stillOwnsShutdown()) {\n          const controller = new AbortController();\n          shutdownController = controller;\n          try {\n            await safeSend(\n              createHerdrMetadataRequest({\n                id: requestId(),\n                paneId: environment.paneId,\n                source: SOURCE,\n                seq: nextReportSeq(),\n                snapshot: createHerdrMetadataClearSnapshot(),\n              }),\n              controller.signal,\n            );\n            // Native identity and restore remain Herdr-owned. Official-source\n            // release is a no-op; clearing authority would delete restore data.\n          } finally {\n            if (shutdownController === controller) shutdownController = undefined;\n          }\n        }\n        if (!stillOwnsShutdown()) {\n          return;\n        }\n        lastMetadataSnapshot = undefined;\n        currentAgentSessionId = undefined;\n        currentAgentSessionPath = undefined;\n        activeSession = undefined;\n      })();\n      shutdownSession = session;\n      shutdownTask = task;\n      await task;\n      if (shutdownTask === task) {\n        shutdownTask = undefined;\n        shutdownSession = undefined;\n      }\n    });\n  };\n}\n\nexport default function herdrAgentState(pi: ExtensionAPI): void {\n  createHerdrAgentStateExtension()(pi);\n}\n", "import net from \"node:net\";\n\nexport const MAX_HERDR_FRAME_BYTES = 1024 * 1024;\nconst MAX_PENDING_SUBSCRIPTION_EVENTS = 1024;\n\nexport interface HerdrRequest {\n  id: string;\n  method: string;\n  params: Record<string, unknown>;\n}\n\nexport interface HerdrSubscription {\n  closed: Promise<void>;\n  close(): void;\n}\n\nclass NdjsonFrames {\n  private buffer = Buffer.alloc(0);\n\n  push(chunk: Buffer): unknown[] {\n    this.buffer = Buffer.concat([this.buffer, chunk]);\n    if (this.buffer.length > MAX_HERDR_FRAME_BYTES && this.buffer.indexOf(0x0a) < 0) {\n      throw new Error(\"Herdr response frame exceeded the size limit\");\n    }\n\n    const frames: unknown[] = [];\n    while (true) {\n      const newline = this.buffer.indexOf(0x0a);\n      if (newline < 0) break;\n      if (newline > MAX_HERDR_FRAME_BYTES) {\n        throw new Error(\"Herdr response frame exceeded the size limit\");\n      }\n      const line = this.buffer.subarray(0, newline);\n      this.buffer = this.buffer.subarray(newline + 1);\n      if (line.length === 0) continue;\n      try {\n        frames.push(JSON.parse(line.toString(\"utf8\")));\n      } catch {\n        throw new Error(\"Herdr returned invalid JSON\");\n      }\n    }\n    if (this.buffer.length > MAX_HERDR_FRAME_BYTES) {\n      throw new Error(\"Herdr response frame exceeded the size limit\");\n    }\n    return frames;\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction abortReason(signal: AbortSignal): Error {\n  return signal.reason instanceof Error ? signal.reason : new DOMException(\"Herdr request aborted\", \"AbortError\");\n}\n\nclass HerdrApiError extends Error {\n  readonly code: string | undefined;\n\n  constructor(error: Record<string, unknown>) {\n    super(`Herdr ${typeof error.message === \"string\" ? error.message : \"request failed\"}`);\n    this.code = typeof error.code === \"string\" ? error.code : undefined;\n  }\n}\n\nfunction responseError(frame: Record<string, unknown>): Error | undefined {\n  if (!(\"error\" in frame)) return undefined;\n  if (!isRecord(frame.error)) return new Error(\"Herdr returned an invalid error response\");\n  return new HerdrApiError(frame.error);\n}\n\nexport function createBestEffortSender(socketEndpoint: string) {\n  return async (request: HerdrRequest, signal: AbortSignal): Promise<void> => {\n    for (const timeoutMs of [500, 1500]) {\n      if (signal.aborted) return;\n      try {\n        const result = await requestHerdr(socketEndpoint, request, signal, timeoutMs);\n        if (isRecord(result) && result.type === \"ok\") return;\n      } catch (error) {\n        // API rejection is not a transport outage. Do not repeat a rejected report.\n        if (signal.aborted || error instanceof HerdrApiError) return;\n      }\n    }\n  };\n}\n\nexport function requestHerdr(\n  socketEndpoint: string,\n  request: HerdrRequest,\n  signal: AbortSignal,\n  timeoutMs = 1500,\n): Promise<unknown> {\n  if (signal.aborted) return Promise.reject(abortReason(signal));\n\n  return new Promise((resolve, reject) => {\n    const payload = `${JSON.stringify(request)}\\n`;\n    const socket = net.createConnection(socketEndpoint);\n    const parser = new NdjsonFrames();\n    let finished = false;\n    const timeout = setTimeout(() => finish(new Error(\"Herdr request timed out\")), timeoutMs);\n    timeout.unref?.();\n\n    const cleanup = () => {\n      clearTimeout(timeout);\n      signal.removeEventListener(\"abort\", abort);\n      socket.destroy();\n    };\n    const finish = (error?: Error, result?: unknown) => {\n      if (finished) return;\n      finished = true;\n      cleanup();\n      if (error) reject(error);\n      else resolve(result);\n    };\n    const abort = () => finish(abortReason(signal));\n\n    signal.addEventListener(\"abort\", abort, { once: true });\n    socket.on(\"connect\", () => {\n      if (!finished) socket.write(payload);\n    });\n    socket.on(\"error\", (error) => finish(error));\n    socket.on(\"end\", () => finish(new Error(\"Herdr closed the request before responding\")));\n    socket.on(\"close\", () => finish(new Error(\"Herdr request socket closed\")));\n    socket.on(\"data\", (chunk: Buffer) => {\n      if (finished) return;\n      try {\n        for (const value of parser.push(chunk)) {\n          if (!isRecord(value)) continue;\n          const uncorrelatedError = responseError(value);\n          if (uncorrelatedError && (value.id === \"\" || value.id === undefined)) {\n            finish(uncorrelatedError);\n            return;\n          }\n          if (value.id !== request.id) continue;\n          const error = responseError(value);\n          if (error) {\n            finish(error);\n            return;\n          }\n          if (!(\"result\" in value)) {\n            finish(new Error(\"Herdr response did not include a result\"));\n            return;\n          }\n          finish(undefined, value.result);\n          return;\n        }\n      } catch (error) {\n        finish(error instanceof Error ? error : new Error(String(error)));\n      }\n    });\n  });\n}\n\nexport async function openHerdrSubscription(\n  socketEndpoint: string,\n  request: HerdrRequest,\n  signal: AbortSignal,\n  onEvent: (frame: unknown) => void,\n  timeoutMs = 1500,\n): Promise<HerdrSubscription> {\n  if (signal.aborted) throw abortReason(signal);\n\n  const payload = `${JSON.stringify(request)}\\n`;\n  const socket = net.createConnection(socketEndpoint);\n  const parser = new NdjsonFrames();\n  const pendingEvents: unknown[] = [];\n  let ready = false;\n  let finished = false;\n  let intentionalClose = false;\n  let resolveReady!: () => void;\n  let rejectReady!: (error: Error) => void;\n  let resolveClosed!: () => void;\n  let rejectClosed!: (error: Error) => void;\n  const readyPromise = new Promise<void>((resolve, reject) => {\n    resolveReady = resolve;\n    rejectReady = reject;\n  });\n  const closed = new Promise<void>((resolve, reject) => {\n    resolveClosed = resolve;\n    rejectClosed = reject;\n  });\n  void closed.catch(() => undefined);\n  const timeout = setTimeout(() => finish(new Error(\"Herdr subscription timed out\")), timeoutMs);\n  timeout.unref?.();\n\n  const cleanup = () => {\n    clearTimeout(timeout);\n    signal.removeEventListener(\"abort\", abort);\n    socket.destroy();\n  };\n  const finish = (error?: Error) => {\n    if (finished) return;\n    finished = true;\n    cleanup();\n    if (!ready) {\n      if (error && !intentionalClose) rejectReady(error);\n      else rejectReady(abortReason(signal));\n      resolveClosed();\n      return;\n    }\n    if (error && !intentionalClose) rejectClosed(error);\n    else resolveClosed();\n  };\n  const deliver = (frame: unknown) => {\n    if (finished) return;\n    try {\n      onEvent(frame);\n    } catch (error) {\n      finish(error instanceof Error ? error : new Error(String(error)));\n    }\n  };\n  const abort = () => {\n    intentionalClose = true;\n    finish();\n  };\n\n  signal.addEventListener(\"abort\", abort, { once: true });\n  socket.on(\"connect\", () => {\n    if (!finished) socket.write(payload);\n  });\n  socket.on(\"error\", (error) => finish(error));\n  socket.on(\"end\", () => finish(new Error(\"Herdr subscription closed\")));\n  socket.on(\"close\", () => finish(new Error(\"Herdr subscription socket closed\")));\n  socket.on(\"data\", (chunk: Buffer) => {\n    if (finished) return;\n    try {\n      for (const value of parser.push(chunk)) {\n        if (finished) return;\n        if (isRecord(value)) {\n          const error = responseError(value);\n          if (error && (value.id === request.id || value.id === \"\" || value.id === undefined)) {\n            finish(error);\n            return;\n          }\n          if (\"id\" in value && value.id !== request.id) continue;\n        }\n        if (!ready) {\n          if (isRecord(value) && value.id === request.id) {\n            if (!isRecord(value.result) || value.result.type !== \"subscription_started\") {\n              finish(new Error(\"Herdr returned an invalid subscription acknowledgement\"));\n              return;\n            }\n            ready = true;\n            clearTimeout(timeout);\n            resolveReady();\n            for (const event of pendingEvents.splice(0)) deliver(event);\n            continue;\n          }\n          if (pendingEvents.length >= MAX_PENDING_SUBSCRIPTION_EVENTS) {\n            finish(new Error(\"Too many Herdr events arrived before subscription acknowledgement\"));\n            return;\n          }\n          pendingEvents.push(value);\n          continue;\n        }\n        deliver(value);\n      }\n    } catch (error) {\n      finish(error instanceof Error ? error : new Error(String(error)));\n    }\n  });\n\n  await readyPromise;\n  if (signal.aborted) {\n    intentionalClose = true;\n    finish();\n    throw abortReason(signal);\n  }\n  return {\n    closed,\n    close() {\n      intentionalClose = true;\n      finish();\n    },\n  };\n}\n", "import { sanitizeTerminalText } from \"@narumitw/pi-tui-kit/terminal-text\";\nimport type { HerdrRequest } from \"./herdr-client.js\";\n\nexport const HERDR_METADATA_TOKEN_KEYS = [\"model\", \"provider\", \"thinking\", \"session\", \"context_usage\"] as const;\n\nexport type HerdrMetadataTokenKey = (typeof HERDR_METADATA_TOKEN_KEYS)[number];\nexport type HerdrMetadataSnapshot = Readonly<Record<HerdrMetadataTokenKey, string | null>>;\n\nexport const HERDR_METADATA_MAX_CHARACTERS = 80;\nexport const HERDR_METADATA_TTL_MS = 60 * 60 * 1000;\nexport const HERDR_METADATA_REFRESH_MS = 30 * 60 * 1000;\n\nexport interface HerdrMetadataInputs {\n  model?: unknown;\n  provider?: unknown;\n  thinking?: unknown;\n  session?: unknown;\n  contextUsagePercent?: unknown;\n}\n\nexport interface HerdrMetadataRequestOptions {\n  id: string;\n  paneId: string;\n  source: string;\n  seq: number;\n  snapshot: HerdrMetadataSnapshot;\n  ttlMs?: number;\n}\n\nexport function normalizeHerdrMetadataValue(value: unknown): string | null {\n  if (typeof value !== \"string\") return null;\n  const normalized = sanitizeTerminalText(value).trim();\n  if (normalized.length === 0) return null;\n  return [...normalized].slice(0, HERDR_METADATA_MAX_CHARACTERS).join(\"\");\n}\n\nexport function formatContextUsagePercent(value: unknown): string | null {\n  if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) return null;\n  return `${Math.round(value)}%`;\n}\n\nexport function createHerdrMetadataSnapshot(inputs: HerdrMetadataInputs): HerdrMetadataSnapshot {\n  return Object.freeze({\n    model: normalizeHerdrMetadataValue(inputs.model),\n    provider: normalizeHerdrMetadataValue(inputs.provider),\n    thinking: normalizeHerdrMetadataValue(inputs.thinking),\n    session: normalizeHerdrMetadataValue(inputs.session),\n    context_usage: formatContextUsagePercent(inputs.contextUsagePercent),\n  });\n}\n\nexport function createHerdrMetadataClearSnapshot(): HerdrMetadataSnapshot {\n  return Object.freeze({\n    model: null,\n    provider: null,\n    thinking: null,\n    session: null,\n    context_usage: null,\n  });\n}\n\nexport function herdrMetadataSnapshotsEqual(\n  left: HerdrMetadataSnapshot | undefined,\n  right: HerdrMetadataSnapshot,\n): boolean {\n  return left !== undefined && HERDR_METADATA_TOKEN_KEYS.every((key) => left[key] === right[key]);\n}\n\nexport function createHerdrMetadataRequest(options: HerdrMetadataRequestOptions): HerdrRequest {\n  return {\n    id: options.id,\n    method: \"pane.report_metadata\",\n    params: {\n      pane_id: options.paneId,\n      source: options.source,\n      seq: options.seq,\n      tokens: { ...options.snapshot },\n      ttl_ms: options.ttlMs ?? HERDR_METADATA_TTL_MS,\n    },\n  };\n}\n", "export const HERDR_AGENT_STATUSES = [\"idle\", \"working\", \"blocked\", \"done\", \"unknown\"] as const;\n\nexport type HerdrAgentStatus = (typeof HERDR_AGENT_STATUSES)[number];\n\nexport interface HerdrPane {\n  paneId: string;\n  workspaceId: string;\n  tabId: string;\n  terminalId: string;\n  focused: boolean;\n  revision: number;\n  agent?: string;\n  agentName?: string;\n  agentStatus: HerdrAgentStatus;\n  displayAgent?: string;\n  label?: string;\n  stateLabels: Record<string, string>;\n  terminalTitle?: string;\n  title?: string;\n}\n\nexport interface HerdrWorkspace {\n  workspaceId: string;\n  label?: string;\n}\n\nexport type HerdrPaneEvent =\n  | { type: \"created\" | \"updated\"; pane: HerdrPane }\n  | {\n      type: \"closed\" | \"exited\" | \"agent_detected\" | \"agent_status_changed\";\n      paneId: string;\n      workspaceId: string;\n    }\n  | { type: \"workspace_renamed\"; workspaceId: string }\n  | {\n      type: \"moved\";\n      pane: HerdrPane;\n      previousPaneId: string;\n      previousWorkspaceId: string;\n    };\n\nconst HERDR_WIDGET_TOPOLOGY_SUBSCRIPTIONS = [\n  { type: \"pane.created\" },\n  { type: \"pane.updated\" },\n  { type: \"workspace.renamed\" },\n  { type: \"pane.closed\" },\n  { type: \"pane.moved\" },\n  { type: \"pane.exited\" },\n  { type: \"pane.agent_detected\" },\n] as const;\n\nexport function herdrWidgetSubscriptions(panes: readonly HerdrPane[]) {\n  return [\n    ...HERDR_WIDGET_TOPOLOGY_SUBSCRIPTIONS.map((entry) => ({ ...entry })),\n    ...panes\n      .filter((pane) => pane.agent !== undefined)\n      .map((pane) => ({ type: \"pane.agent_status_changed\", pane_id: pane.paneId })),\n  ];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction requiredString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction optionalString(value: unknown): string | undefined {\n  return typeof value === \"string\" ? value : undefined;\n}\n\nfunction agentStatus(value: unknown): HerdrAgentStatus | undefined {\n  return typeof value === \"string\" && HERDR_AGENT_STATUSES.includes(value as HerdrAgentStatus)\n    ? (value as HerdrAgentStatus)\n    : undefined;\n}\n\nfunction stringRecord(value: unknown): Record<string, string> | undefined {\n  if (!isRecord(value)) return undefined;\n  const entries = Object.entries(value);\n  if (!entries.every(([, entry]) => typeof entry === \"string\")) return undefined;\n  return Object.fromEntries(entries) as Record<string, string>;\n}\n\nexport function parseHerdrPane(value: unknown): HerdrPane | undefined {\n  if (!isRecord(value)) return undefined;\n  const paneId = requiredString(value.pane_id);\n  const workspaceId = requiredString(value.workspace_id);\n  const tabId = requiredString(value.tab_id);\n  const terminalId = requiredString(value.terminal_id);\n  const status = agentStatus(value.agent_status);\n  const revision = value.revision;\n  if (\n    !paneId ||\n    !workspaceId ||\n    !tabId ||\n    !terminalId ||\n    !status ||\n    typeof value.focused !== \"boolean\" ||\n    typeof revision !== \"number\" ||\n    !Number.isSafeInteger(revision) ||\n    revision < 0\n  ) {\n    return undefined;\n  }\n  return {\n    paneId,\n    workspaceId,\n    tabId,\n    terminalId,\n    focused: value.focused,\n    revision,\n    agent: optionalString(value.agent),\n    agentName: optionalString(value.name),\n    agentStatus: status,\n    displayAgent: optionalString(value.display_agent),\n    label: optionalString(value.label),\n    stateLabels: stringRecord(value.state_labels) ?? {},\n    terminalTitle: optionalString(value.terminal_title_stripped) ?? optionalString(value.terminal_title),\n    title: optionalString(value.title),\n  };\n}\n\nexport function parsePaneCurrentResult(value: unknown): HerdrPane {\n  if (!isRecord(value) || value.type !== \"pane_current\") {\n    throw new Error(\"Herdr returned an invalid current-pane response\");\n  }\n  const pane = parseHerdrPane(value.pane);\n  if (!pane) throw new Error(\"Herdr returned an invalid current pane\");\n  return pane;\n}\n\nexport function parsePaneListResult(value: unknown): HerdrPane[] {\n  if (!isRecord(value) || value.type !== \"pane_list\" || !Array.isArray(value.panes)) {\n    throw new Error(\"Herdr returned an invalid pane-list response\");\n  }\n  const panes = value.panes.map(parseHerdrPane);\n  if (panes.some((pane) => pane === undefined)) {\n    throw new Error(\"Herdr returned an invalid pane in the pane list\");\n  }\n  return panes as HerdrPane[];\n}\n\nexport function parseAgentListResult(value: unknown): HerdrPane[] {\n  if (!isRecord(value) || value.type !== \"agent_list\" || !Array.isArray(value.agents)) {\n    throw new Error(\"Herdr returned an invalid agent-list response\");\n  }\n  return value.agents.flatMap((entry) => {\n    const pane = parseHerdrPane(entry);\n    return pane ? [pane] : [];\n  });\n}\n\nexport function parseWorkspaceGetResult(value: unknown): HerdrWorkspace {\n  if (!isRecord(value) || value.type !== \"workspace_info\" || !isRecord(value.workspace)) {\n    throw new Error(\"Herdr returned an invalid workspace response\");\n  }\n  const workspaceId = requiredString(value.workspace.workspace_id);\n  if (!workspaceId) throw new Error(\"Herdr returned an invalid workspace identity\");\n  return { workspaceId, label: optionalString(value.workspace.label) };\n}\n\nexport function parseHerdrPaneEvent(value: unknown): HerdrPaneEvent | undefined {\n  if (!isRecord(value) || typeof value.event !== \"string\" || !isRecord(value.data)) {\n    return undefined;\n  }\n  const data = value.data;\n\n  if (value.event === \"workspace_renamed\") {\n    const workspaceId = requiredString(data.workspace_id);\n    if (!workspaceId || typeof data.label !== \"string\") return undefined;\n    return { type: \"workspace_renamed\", workspaceId };\n  }\n\n  if (value.event === \"pane.agent_status_changed\" || value.event === \"pane_agent_status_changed\") {\n    const paneId = requiredString(data.pane_id);\n    const workspaceId = requiredString(data.workspace_id);\n    const status = agentStatus(data.agent_status);\n    if (!paneId || !workspaceId || !status) return undefined;\n    return {\n      type: \"agent_status_changed\",\n      paneId,\n      workspaceId,\n    };\n  }\n\n  if (value.event === \"pane_created\" || value.event === \"pane_updated\") {\n    const pane = parseHerdrPane(data.pane);\n    return pane ? { type: value.event === \"pane_created\" ? \"created\" : \"updated\", pane } : undefined;\n  }\n  if (value.event === \"pane_closed\" || value.event === \"pane_exited\") {\n    const paneId = requiredString(data.pane_id);\n    const workspaceId = requiredString(data.workspace_id);\n    if (!paneId || !workspaceId) return undefined;\n    return {\n      type: value.event === \"pane_closed\" ? \"closed\" : \"exited\",\n      paneId,\n      workspaceId,\n    };\n  }\n  if (value.event === \"pane_moved\") {\n    const pane = parseHerdrPane(data.pane);\n    const previousPaneId = requiredString(data.previous_pane_id);\n    const previousWorkspaceId = requiredString(data.previous_workspace_id);\n    if (!pane || !previousPaneId || !previousWorkspaceId) return undefined;\n    return { type: \"moved\", pane, previousPaneId, previousWorkspaceId };\n  }\n  if (value.event === \"pane_agent_detected\") {\n    const paneId = requiredString(data.pane_id);\n    const workspaceId = requiredString(data.workspace_id);\n    if (!paneId || !workspaceId || (data.released !== undefined && typeof data.released !== \"boolean\")) {\n      return undefined;\n    }\n    const finalStatus = data.final_status === null ? undefined : agentStatus(data.final_status);\n    if (data.final_status !== undefined && data.final_status !== null && !finalStatus) return undefined;\n    return {\n      type: \"agent_detected\",\n      paneId,\n      workspaceId,\n    };\n  }\n  return undefined;\n}\n", "import type { Theme } from \"@earendil-works/pi-coding-agent\";\nimport { EditorStatusWidget } from \"@narumitw/pi-tui-kit/editor-status-widget\";\nimport { sanitizeTerminalText } from \"@narumitw/pi-tui-kit/terminal-text\";\nimport type { HerdrAgentStatus, HerdrPane, HerdrWorkspace } from \"./herdr-protocol.js\";\n\nexport const HERDR_WIDGET_KEY = \"herdr:agents\";\nexport const MAX_HERDR_WIDGET_AGENTS = 5;\n\ninterface ObservedPane {\n  paneId: string;\n  workspaceId: string;\n  agent?: string;\n  agentName?: string;\n  agentStatus: HerdrAgentStatus;\n  displayAgent?: string;\n  label?: string;\n  stateLabels: Record<string, string>;\n  title?: string;\n}\n\nexport interface HerdrWidgetRow {\n  agent: string;\n  pane: string;\n  paneId: string;\n  space: string;\n  state: HerdrAgentStatus;\n  stateLabel: string;\n}\n\nexport interface HerdrWidgetSnapshot {\n  totalAgents: number;\n  hiddenAgents: number;\n  rows: readonly HerdrWidgetRow[];\n}\n\nconst STATE_ORDER: Record<HerdrAgentStatus, number> = {\n  blocked: 0,\n  done: 1,\n  working: 2,\n  idle: 3,\n  unknown: 4,\n};\n\nfunction observedPane(pane: HerdrPane): ObservedPane {\n  return {\n    paneId: pane.paneId,\n    workspaceId: pane.workspaceId,\n    agent: pane.agent,\n    agentName: pane.agentName,\n    agentStatus: pane.agentStatus,\n    displayAgent: pane.displayAgent,\n    label: pane.label,\n    stateLabels: { ...pane.stateLabels },\n    title: pane.title,\n  };\n}\n\nfunction safeDisplay(value: string | undefined): string | undefined {\n  if (value === undefined) return undefined;\n  const safe = sanitizeTerminalText(value).trim();\n  return safe.length > 0 ? safe : undefined;\n}\n\nfunction shortIdentity(value: string, fallback: string): string {\n  const safe = safeDisplay(value);\n  if (!safe) return fallback;\n  return safe.split(\":\").at(-1) || fallback;\n}\n\nfunction agentDisplay(pane: ObservedPane): string {\n  return safeDisplay(pane.agentName) ?? safeDisplay(pane.displayAgent) ?? safeDisplay(pane.agent) ?? \"agent\";\n}\n\nfunction paneDisplay(pane: ObservedPane): string {\n  const id = shortIdentity(pane.paneId, \"pane\");\n  const label = safeDisplay(pane.label) ?? safeDisplay(pane.title);\n  return label ? `${label}/${id}` : id;\n}\n\nfunction spaceDisplay(workspace: HerdrWorkspace): string {\n  const id = shortIdentity(workspace.workspaceId, \"space\");\n  const label = safeDisplay(workspace.label);\n  return label ? `${label}/${id}` : id;\n}\n\nfunction rowForPane(pane: ObservedPane, workspace: HerdrWorkspace): HerdrWidgetRow {\n  return {\n    agent: agentDisplay(pane),\n    pane: paneDisplay(pane),\n    paneId: safeDisplay(pane.paneId) ?? \"pane\",\n    space: spaceDisplay(workspace),\n    state: pane.agentStatus,\n    stateLabel: safeDisplay(pane.stateLabels[pane.agentStatus]) ?? safeDisplay(pane.agentStatus) ?? \"unknown\",\n  };\n}\n\nfunction immutableSnapshot(rows: HerdrWidgetRow[]): HerdrWidgetSnapshot | undefined {\n  if (rows.length === 0) return undefined;\n  const visible = rows.slice(0, MAX_HERDR_WIDGET_AGENTS).map((row) => Object.freeze({ ...row }));\n  return Object.freeze({\n    totalAgents: rows.length,\n    hiddenAgents: Math.max(0, rows.length - visible.length),\n    rows: Object.freeze(visible),\n  });\n}\n\nexport class HerdrWidgetModel {\n  private currentPaneId: string | undefined;\n  private currentWorkspaceId: string | undefined;\n  private workspace: HerdrWorkspace | undefined;\n  private panes = new Map<string, ObservedPane>();\n\n  reset(\n    currentPane: HerdrPane,\n    panes: readonly HerdrPane[],\n    workspace: HerdrWorkspace = { workspaceId: currentPane.workspaceId },\n  ): void {\n    this.currentPaneId = currentPane.paneId;\n    this.currentWorkspaceId = currentPane.workspaceId;\n    this.workspace = { ...workspace };\n    this.panes = new Map(panes.map((pane) => [pane.paneId, observedPane(pane)]));\n  }\n\n  clear(): void {\n    this.currentPaneId = undefined;\n    this.currentWorkspaceId = undefined;\n    this.workspace = undefined;\n    this.panes.clear();\n  }\n\n  isCurrentPane(paneId: string): boolean {\n    return this.currentPaneId === paneId;\n  }\n\n  isCurrentWorkspace(workspaceId: string): boolean {\n    return this.currentWorkspaceId === workspaceId;\n  }\n\n  snapshot(): HerdrWidgetSnapshot | undefined {\n    if (!this.currentPaneId || !this.currentWorkspaceId || !this.workspace) return undefined;\n    const rows = [...this.panes.values()]\n      .filter(\n        (pane) =>\n          pane.workspaceId === this.currentWorkspaceId &&\n          pane.paneId !== this.currentPaneId &&\n          pane.agent !== undefined,\n      )\n      .map((pane) => rowForPane(pane, this.workspace as HerdrWorkspace));\n    rows.sort(\n      (left, right) =>\n        STATE_ORDER[left.state] - STATE_ORDER[right.state] ||\n        left.agent.localeCompare(right.agent) ||\n        left.pane.localeCompare(right.pane) ||\n        left.paneId.localeCompare(right.paneId),\n    );\n    return immutableSnapshot(rows);\n  }\n}\n\nfunction stateStyle(theme: Theme, state: HerdrAgentStatus, text: string): string {\n  switch (state) {\n    case \"blocked\":\n      return theme.fg(\"error\", text);\n    case \"done\":\n      return theme.fg(\"accent\", text);\n    case \"working\":\n      return theme.fg(\"warning\", text);\n    case \"idle\":\n      return theme.fg(\"success\", text);\n    case \"unknown\":\n      return theme.fg(\"dim\", text);\n  }\n}\n\nfunction stateSymbol(state: HerdrAgentStatus): string {\n  switch (state) {\n    case \"blocked\":\n      return \"\u00D7\";\n    case \"done\":\n      return \"\u2713\";\n    case \"working\":\n      return \"\u25D0\";\n    case \"idle\":\n      return \"\u25CB\";\n    case \"unknown\":\n      return \"\u00B7\";\n  }\n}\n\nexport function createHerdrWidget(snapshot: HerdrWidgetSnapshot, theme: Theme): EditorStatusWidget {\n  return new EditorStatusWidget({\n    theme,\n    renderBody() {\n      const noun = snapshot.totalAgents === 1 ? \"agent\" : \"agents\";\n      const lines = [theme.fg(\"muted\", `Herdr \u00B7 ${snapshot.totalAgents} sibling ${noun}`)];\n      const separator = theme.fg(\"dim\", \" \u00B7 \");\n      for (const row of snapshot.rows) {\n        const state = stateStyle(theme, row.state, `${stateSymbol(row.state)} ${row.stateLabel}`);\n        const agent = theme.bold(theme.fg(\"text\", row.agent));\n        const pane = theme.fg(\"muted\", row.pane);\n        const space = theme.fg(\"dim\", row.space);\n        lines.push(`${state}  ${agent}${separator}${pane}${separator}${space}`);\n      }\n      if (snapshot.hiddenAgents > 0) {\n        lines.push(theme.fg(\"dim\", `+${snapshot.hiddenAgents} more`));\n      }\n      return lines;\n    },\n  });\n}\n\nexport function herdrWidgetFingerprint(snapshot: HerdrWidgetSnapshot | undefined): string | undefined {\n  return snapshot ? JSON.stringify(snapshot) : undefined;\n}\n", "import type { ExtensionContext, Theme } from \"@earendil-works/pi-coding-agent\";\nimport { type HerdrRequest, type HerdrSubscription, openHerdrSubscription, requestHerdr } from \"./herdr-client.js\";\nimport {\n  type HerdrPane,\n  type HerdrPaneEvent,\n  type HerdrWorkspace,\n  herdrWidgetSubscriptions,\n  parseAgentListResult,\n  parseHerdrPaneEvent,\n  parsePaneCurrentResult,\n  parsePaneListResult,\n  parseWorkspaceGetResult,\n} from \"./herdr-protocol.js\";\nimport { createHerdrWidget, HERDR_WIDGET_KEY, HerdrWidgetModel, herdrWidgetFingerprint } from \"./herdr-widget.js\";\n\nexport interface HerdrObserverEnvironment {\n  paneId: string;\n  socketEndpoint: string;\n}\n\nexport interface HerdrObserverOptions {\n  environment: HerdrObserverEnvironment;\n  now?: () => number;\n  random?: () => number;\n  request?: (socketEndpoint: string, request: HerdrRequest, signal: AbortSignal) => Promise<unknown>;\n  subscribe?: (\n    socketEndpoint: string,\n    request: HerdrRequest,\n    signal: AbortSignal,\n    onEvent: (frame: unknown) => void,\n  ) => Promise<HerdrSubscription>;\n  retryDelayMs?: number;\n}\n\nexport interface HerdrWidgetObserver {\n  start(ctx: ExtensionContext): void;\n  shutdown(ctx: ExtensionContext): Promise<void>;\n}\n\nclass HerdrTopologyChangedError extends Error {}\n\nfunction isRelevantEvent(model: HerdrWidgetModel, event: HerdrPaneEvent): boolean {\n  if (event.type === \"created\" || event.type === \"updated\") {\n    return model.isCurrentWorkspace(event.pane.workspaceId);\n  }\n  if (event.type === \"moved\") {\n    return (\n      model.isCurrentPane(event.previousPaneId) ||\n      model.isCurrentWorkspace(event.previousWorkspaceId) ||\n      model.isCurrentWorkspace(event.pane.workspaceId)\n    );\n  }\n  return \"workspaceId\" in event && model.isCurrentWorkspace(event.workspaceId);\n}\n\nfunction subscriptionFingerprint(currentPane: HerdrPane, panes: readonly HerdrPane[]): string {\n  const agentPaneIds = panes\n    .filter((pane) => pane.agent !== undefined)\n    .map((pane) => pane.paneId)\n    .sort();\n  return JSON.stringify([currentPane.paneId, currentPane.workspaceId, agentPaneIds]);\n}\n\nfunction waitForRetry(delayMs: number, signal: AbortSignal): Promise<void> {\n  if (signal.aborted) return Promise.reject(signal.reason);\n  if (delayMs <= 0) return Promise.resolve();\n  return new Promise((resolve, reject) => {\n    const timer = setTimeout(() => {\n      signal.removeEventListener(\"abort\", abort);\n      resolve();\n    }, delayMs);\n    timer.unref?.();\n    const abort = () => {\n      clearTimeout(timer);\n      reject(signal.reason);\n    };\n    signal.addEventListener(\"abort\", abort, { once: true });\n  });\n}\n\nexport function createHerdrWidgetObserver(options: HerdrObserverOptions): HerdrWidgetObserver {\n  const now = options.now ?? Date.now;\n  const random = options.random ?? Math.random;\n  const request = options.request ?? requestHerdr;\n  const subscribe = options.subscribe ?? openHerdrSubscription;\n  const retryDelayMs = options.retryDelayMs ?? 200;\n  let generation = 0;\n  let activeContext: ExtensionContext | undefined;\n  let activeSession: ExtensionContext[\"sessionManager\"] | undefined;\n  let controller: AbortController | undefined;\n  const ownedTasks = new Set<Promise<void>>();\n  let publishedFingerprint: string | undefined;\n  let hasPublished = false;\n\n  const owns = (ctx: ExtensionContext, expectedGeneration = generation) =>\n    ctx.sessionManager === activeSession && expectedGeneration === generation;\n\n  const requestId = (kind: string) => `herdr:pi:widget:${kind}:${now()}:${random().toString(36).slice(2)}`;\n\n  const clearWidget = (ctx: ExtensionContext) => {\n    if (ctx.mode === \"tui\") ctx.ui.setWidget(HERDR_WIDGET_KEY, undefined);\n    publishedFingerprint = undefined;\n    hasPublished = false;\n  };\n\n  const publish = (ctx: ExtensionContext, model: HerdrWidgetModel, expectedGeneration: number) => {\n    if (!owns(ctx, expectedGeneration) || ctx.mode !== \"tui\") return;\n    const snapshot = model.snapshot();\n    const fingerprint = herdrWidgetFingerprint(snapshot);\n    if (hasPublished && fingerprint === publishedFingerprint) return;\n    if (!snapshot) {\n      ctx.ui.setWidget(HERDR_WIDGET_KEY, undefined);\n    } else {\n      ctx.ui.setWidget(HERDR_WIDGET_KEY, (_tui: unknown, theme: Theme) => createHerdrWidget(snapshot, theme), {\n        placement: \"aboveEditor\",\n      });\n    }\n    publishedFingerprint = fingerprint;\n    hasPublished = true;\n  };\n\n  const loadPaneSet = async (\n    ctx: ExtensionContext,\n    expectedGeneration: number,\n    signal: AbortSignal,\n  ): Promise<{ currentPane: HerdrPane; panes: HerdrPane[]; workspace: HerdrWorkspace } | undefined> => {\n    const currentResult = await request(\n      options.environment.socketEndpoint,\n      {\n        id: requestId(\"current\"),\n        method: \"pane.current\",\n        params: { caller_pane_id: options.environment.paneId },\n      },\n      signal,\n    );\n    if (!owns(ctx, expectedGeneration) || signal.aborted) return undefined;\n    const currentPane = parsePaneCurrentResult(currentResult);\n    const [listResult, agentResult, workspaceResult] = await Promise.all([\n      request(\n        options.environment.socketEndpoint,\n        {\n          id: requestId(\"list\"),\n          method: \"pane.list\",\n          params: { workspace_id: currentPane.workspaceId },\n        },\n        signal,\n      ),\n      request(\n        options.environment.socketEndpoint,\n        { id: requestId(\"agents\"), method: \"agent.list\", params: {} },\n        signal,\n      ),\n      request(\n        options.environment.socketEndpoint,\n        {\n          id: requestId(\"workspace\"),\n          method: \"workspace.get\",\n          params: { workspace_id: currentPane.workspaceId },\n        },\n        signal,\n      ),\n    ]);\n    if (!owns(ctx, expectedGeneration) || signal.aborted) return undefined;\n    const panes = parsePaneListResult(listResult);\n    const paneIds = new Set(panes.map((pane) => pane.paneId));\n    const namesByPane = new Map(\n      parseAgentListResult(agentResult)\n        .filter((pane) => pane.workspaceId === currentPane.workspaceId && paneIds.has(pane.paneId))\n        .map((pane) => [pane.paneId, pane.agentName]),\n    );\n    const withAgentName = (pane: HerdrPane): HerdrPane => ({\n      ...pane,\n      agentName: namesByPane.get(pane.paneId) ?? pane.agentName,\n    });\n    const workspace = parseWorkspaceGetResult(workspaceResult);\n    if (workspace.workspaceId !== currentPane.workspaceId) {\n      throw new Error(\"Herdr returned a mismatched workspace\");\n    }\n    return {\n      currentPane: withAgentName(currentPane),\n      panes: panes.map(withAgentName),\n      workspace,\n    };\n  };\n\n  const runAttempt = async (\n    ctx: ExtensionContext,\n    expectedGeneration: number,\n    sessionSignal: AbortSignal,\n  ): Promise<void> => {\n    const attemptController = new AbortController();\n    const abortAttempt = () => attemptController.abort(sessionSignal.reason);\n    if (sessionSignal.aborted) abortAttempt();\n    else sessionSignal.addEventListener(\"abort\", abortAttempt, { once: true });\n    const signal = attemptController.signal;\n    let attemptActive = true;\n    let subscription: HerdrSubscription | undefined;\n    let failure: Error | undefined;\n    let wake: (() => void) | undefined;\n    const wakeRefresh = () => {\n      const resolve = wake;\n      wake = undefined;\n      resolve?.();\n    };\n    signal.addEventListener(\"abort\", wakeRefresh);\n    const failAttempt = (error: Error) => {\n      if (!attemptActive || signal.aborted) return;\n      failure = error;\n      if (owns(ctx, expectedGeneration)) clearWidget(ctx);\n      attemptController.abort(error);\n    };\n    try {\n      const discovered = await loadPaneSet(ctx, expectedGeneration, signal);\n      if (!discovered) return;\n      const subscribedFingerprint = subscriptionFingerprint(discovered.currentPane, discovered.panes);\n      const model = new HerdrWidgetModel();\n      model.reset(discovered.currentPane, discovered.panes, discovered.workspace);\n      let dirty = true;\n\n      subscription = await subscribe(\n        options.environment.socketEndpoint,\n        {\n          id: requestId(\"subscribe\"),\n          method: \"events.subscribe\",\n          params: { subscriptions: herdrWidgetSubscriptions(discovered.panes) },\n        },\n        signal,\n        (frame) => {\n          if (!attemptActive || !owns(ctx, expectedGeneration) || signal.aborted) return;\n          const event = parseHerdrPaneEvent(frame);\n          if (!event || !isRelevantEvent(model, event)) return;\n          dirty = true;\n          wakeRefresh();\n        },\n      ).catch(async (error: unknown) => {\n        if (!owns(ctx, expectedGeneration) || signal.aborted) throw error;\n        // A pane can disappear between discovery and subscription acceptance.\n        // Verify a changed target set before exempting this from outage retries.\n        const latest = await loadPaneSet(ctx, expectedGeneration, signal);\n        if (latest && subscriptionFingerprint(latest.currentPane, latest.panes) !== subscribedFingerprint) {\n          throw new HerdrTopologyChangedError();\n        }\n        throw error;\n      });\n      void subscription.closed.then(\n        () => failAttempt(new Error(\"Herdr subscription ended\")),\n        (error) => failAttempt(error instanceof Error ? error : new Error(String(error))),\n      );\n\n      while (owns(ctx, expectedGeneration) && !signal.aborted) {\n        dirty = false;\n        const refreshed = await loadPaneSet(ctx, expectedGeneration, signal);\n        if (!refreshed || signal.aborted) break;\n        // Events and reads have no common sequence boundary. Never replay event\n        // payloads over a read, or publish a read invalidated while in flight.\n        if (dirty) continue;\n        if (subscriptionFingerprint(refreshed.currentPane, refreshed.panes) !== subscribedFingerprint) {\n          throw new HerdrTopologyChangedError();\n        }\n        model.reset(refreshed.currentPane, refreshed.panes, refreshed.workspace);\n        publish(ctx, model, expectedGeneration);\n        await new Promise<void>((resolve) => {\n          wake = resolve;\n          if (dirty || signal.aborted) wakeRefresh();\n        });\n      }\n      if (failure) throw failure;\n    } finally {\n      attemptActive = false;\n      attemptController.abort(new DOMException(\"Herdr widget attempt ended\", \"AbortError\"));\n      signal.removeEventListener(\"abort\", wakeRefresh);\n      sessionSignal.removeEventListener(\"abort\", abortAttempt);\n      subscription?.close();\n    }\n  };\n\n  const run = async (ctx: ExtensionContext, expectedGeneration: number, signal: AbortSignal): Promise<void> => {\n    let failures = 0;\n    while (owns(ctx, expectedGeneration) && !signal.aborted) {\n      try {\n        await runAttempt(ctx, expectedGeneration, signal);\n        return;\n      } catch (error) {\n        if (!owns(ctx, expectedGeneration) || signal.aborted) return;\n        clearWidget(ctx);\n        if (error instanceof HerdrTopologyChangedError) continue;\n        failures += 1;\n        if (failures >= 2) return;\n        try {\n          await waitForRetry(retryDelayMs, signal);\n        } catch {\n          return;\n        }\n        if (!owns(ctx, expectedGeneration) || signal.aborted) return;\n      }\n    }\n  };\n\n  return {\n    start(ctx) {\n      generation += 1;\n      controller?.abort(new DOMException(\"Herdr widget session replaced\", \"AbortError\"));\n      if (activeContext) clearWidget(activeContext);\n      activeContext = undefined;\n      activeSession = undefined;\n      controller = undefined;\n      if (ctx.mode !== \"tui\") return;\n\n      activeContext = ctx;\n      activeSession = ctx.sessionManager;\n      controller = new AbortController();\n      const expectedGeneration = generation;\n      clearWidget(ctx);\n      const task = run(ctx, expectedGeneration, controller.signal).finally(() => {\n        ownedTasks.delete(task);\n      });\n      ownedTasks.add(task);\n    },\n    async shutdown(ctx) {\n      if (!owns(ctx)) return;\n      const shutdownGeneration = ++generation;\n      controller?.abort(new DOMException(\"Herdr widget session shut down\", \"AbortError\"));\n      clearWidget(ctx);\n      await Promise.allSettled([...ownedTasks]);\n      if (generation !== shutdownGeneration) return;\n      activeContext = undefined;\n      activeSession = undefined;\n      controller = undefined;\n    },\n  };\n}\n", "import { randomUUID } from \"node:crypto\";\nimport { constants } from \"node:fs\";\nimport { lstat, mkdir, open, rename, rm, writeFile } from \"node:fs/promises\";\nimport { basename, dirname, join } from \"node:path\";\nimport { getAgentDir } from \"@earendil-works/pi-coding-agent\";\n\nexport const HERDR_SETTINGS_FILE = \"pi-herdr.json\";\nconst MAX_SETTINGS_BYTES = 64 * 1024;\n\nexport interface HerdrSettings {\n  widget: boolean;\n}\n\nexport type HerdrSettingsLoadResult =\n  | { kind: \"missing\"; settings: HerdrSettings }\n  | { kind: \"invalid\"; reason: string; settings: HerdrSettings }\n  | { kind: \"loaded\"; settings: HerdrSettings };\n\nexport interface UpdateHerdrSettingsOptions {\n  settingsPath?: string;\n  beforeRename?: (temporaryPath: string, settingsPath: string) => Promise<void>;\n}\n\ntype SettingsDocument = Record<string, unknown>;\nconst DEFAULT_SETTINGS: HerdrSettings = { widget: true };\nconst queues = new Map<string, Promise<void>>();\n\nexport function herdrSettingsPath(): string {\n  return join(getAgentDir(), HERDR_SETTINGS_FILE);\n}\n\nexport function normalizeHerdrSettings(value: unknown): HerdrSettings | undefined {\n  if (!isRecord(value)) return undefined;\n  if (Object.hasOwn(value, \"widget\") && typeof value.widget !== \"boolean\") {\n    return undefined;\n  }\n  return {\n    widget: typeof value.widget === \"boolean\" ? value.widget : DEFAULT_SETTINGS.widget,\n  };\n}\n\nexport function readHerdrSettings(settingsPath = herdrSettingsPath()): Promise<HerdrSettingsLoadResult> {\n  return enqueue(settingsPath, async () => {\n    let document: SettingsDocument;\n    try {\n      document = await readSettingsDocument(settingsPath);\n    } catch (error) {\n      if (isNodeError(error) && error.code === \"ENOENT\") {\n        return { kind: \"missing\", settings: { ...DEFAULT_SETTINGS } };\n      }\n      return {\n        kind: \"invalid\",\n        reason: `${settingsPath}: ${safeError(error)}`,\n        settings: { ...DEFAULT_SETTINGS },\n      };\n    }\n    const settings = normalizeHerdrSettings(document);\n    return settings\n      ? { kind: \"loaded\", settings }\n      : {\n          kind: \"invalid\",\n          reason: `${settingsPath}: invalid settings shape`,\n          settings: { ...DEFAULT_SETTINGS },\n        };\n  });\n}\n\nexport function updateHerdrSettings(\n  patch: Partial<HerdrSettings>,\n  options: UpdateHerdrSettingsOptions = {},\n): Promise<HerdrSettings> {\n  const settingsPath = options.settingsPath ?? herdrSettingsPath();\n  return enqueue(settingsPath, async () => {\n    const current = await readDocumentForUpdate(settingsPath);\n    const updated = { ...current, ...patch };\n    const settings = normalizeHerdrSettings(updated);\n    if (!settings) throw new Error(`Pi Herdr settings at ${settingsPath} have an invalid shape.`);\n    await publishSettings(settingsPath, updated, options);\n    return settings;\n  });\n}\n\nexport async function awaitHerdrSettingsWrites(settingsPath = herdrSettingsPath()): Promise<void> {\n  await queues.get(settingsPath);\n}\n\nfunction enqueue<T>(path: string, operation: () => Promise<T>): Promise<T> {\n  const previous = queues.get(path) ?? Promise.resolve();\n  const result = previous.then(operation, operation);\n  const settled = result.then(\n    () => undefined,\n    () => undefined,\n  );\n  queues.set(path, settled);\n  void settled.finally(() => {\n    if (queues.get(path) === settled) queues.delete(path);\n  });\n  return result;\n}\n\nasync function readDocumentForUpdate(path: string): Promise<SettingsDocument> {\n  try {\n    const document = await readSettingsDocument(path);\n    if (!normalizeHerdrSettings(document)) throw new Error(\"invalid settings shape\");\n    return document;\n  } catch (error) {\n    if (isNodeError(error) && error.code === \"ENOENT\") return {};\n    throw new Error(`Pi Herdr settings at ${path} are invalid: ${safeError(error)}`);\n  }\n}\n\nasync function readSettingsDocument(path: string): Promise<SettingsDocument> {\n  const pathStats = await lstat(path);\n  if (pathStats.isSymbolicLink() || !pathStats.isFile()) {\n    throw new Error(\"settings path is not a regular file\");\n  }\n  if (pathStats.size > MAX_SETTINGS_BYTES) {\n    throw new Error(`settings file exceeds ${MAX_SETTINGS_BYTES} bytes`);\n  }\n  const noFollow = constants.O_NOFOLLOW ?? 0;\n  const handle = await open(path, constants.O_RDONLY | (constants.O_NONBLOCK ?? 0) | noFollow);\n  try {\n    const stats = await handle.stat();\n    if (!stats.isFile() || stats.dev !== pathStats.dev || stats.ino !== pathStats.ino) {\n      throw new Error(\"settings path changed while opening\");\n    }\n    const buffer = Buffer.alloc(MAX_SETTINGS_BYTES + 1);\n    let offset = 0;\n    while (offset < buffer.length) {\n      const { bytesRead } = await handle.read(buffer, offset, buffer.length - offset, offset);\n      if (bytesRead === 0) break;\n      offset += bytesRead;\n    }\n    if (offset > MAX_SETTINGS_BYTES) {\n      throw new Error(`settings file exceeds ${MAX_SETTINGS_BYTES} bytes`);\n    }\n    let contents: string;\n    try {\n      contents = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(buffer.subarray(0, offset));\n    } catch {\n      throw new Error(\"settings file is not valid UTF-8\");\n    }\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(contents) as unknown;\n    } catch {\n      throw new Error(\"invalid JSON\");\n    }\n    if (!isRecord(parsed)) throw new Error(\"settings document must be a JSON object\");\n    return parsed;\n  } finally {\n    await handle.close();\n  }\n}\n\nasync function publishSettings(\n  path: string,\n  document: SettingsDocument,\n  options: UpdateHerdrSettingsOptions,\n): Promise<void> {\n  const contents = `${JSON.stringify(document, null, 2)}\\n`;\n  if (Buffer.byteLength(contents) > MAX_SETTINGS_BYTES) {\n    throw new Error(`Pi Herdr settings document exceeds ${MAX_SETTINGS_BYTES} bytes.`);\n  }\n  const directory = dirname(path);\n  await mkdir(directory, { recursive: true });\n  const temporaryPath = join(directory, `.${basename(path)}.${process.pid}.${randomUUID()}.tmp`);\n  try {\n    await writeFile(temporaryPath, contents, { encoding: \"utf8\", flag: \"wx\", mode: 0o600 });\n    await options.beforeRename?.(temporaryPath, path);\n    await rename(temporaryPath, path);\n  } catch (error) {\n    await rm(temporaryPath, { force: true }).catch(() => undefined);\n    throw error;\n  }\n}\n\nfunction isRecord(value: unknown): value is SettingsDocument {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n  return error instanceof Error && \"code\" in error;\n}\n\nfunction safeError(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n", "import type { ExtensionAPI, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { HerdrWidgetObserver } from \"./herdr-observer.js\";\nimport { awaitHerdrSettingsWrites, herdrSettingsPath, readHerdrSettings, updateHerdrSettings } from \"./settings.js\";\n\nexport interface HerdrSettingsOptions {\n  settingsPath?: string;\n}\n\nexport function createHerdrSettingsController(\n  pi: ExtensionAPI,\n  observer: HerdrWidgetObserver,\n  options: HerdrSettingsOptions = {},\n) {\n  const settingsPath = options.settingsPath ?? herdrSettingsPath();\n  let generation = 0;\n  let owner: ExtensionContext | undefined;\n  let controller = new AbortController();\n  let enabled = true;\n  let changes = Promise.resolve();\n  let menuOpen = false;\n  const current = (expected: number) => expected === generation && !controller.signal.aborted;\n\n  pi.registerCommand(\"herdr\", {\n    description: \"Configure the Herdr agent widget\",\n    handler: async (args, ctx) => {\n      if (args.trim()) throw new Error(\"/herdr does not accept arguments.\");\n      if (!ctx.hasUI || (ctx.mode !== \"tui\" && ctx.mode !== \"rpc\")) {\n        throw new Error(\"/herdr requires TUI or RPC mode.\");\n      }\n      if (!owner || ctx.sessionManager !== owner.sessionManager || menuOpen) return;\n      const expected = generation;\n      const signal = controller.signal;\n      menuOpen = true;\n      try {\n        const [{ runMenu }, { createHerdrMenu }] = await Promise.all([\n          import(\"@narumitw/pi-tui-kit\"),\n          import(\"./herdr-menu.js\"),\n        ]);\n        if (!current(expected)) return;\n        await runMenu(\n          ctx,\n          createHerdrMenu({\n            settingsPath,\n            isEnabled: () => enabled,\n            toggle: (actionSignal) => {\n              const result = changes.then(async () => {\n                if (actionSignal.aborted || !current(expected) || !owner) return false;\n                // Once accepted, finish the explicit save even if the menu closes.\n                // Session replacement still prevents stale runtime publication.\n                const previous = enabled;\n                const actionOwner = owner;\n                try {\n                  enabled = !previous;\n                  if (enabled && actionOwner.mode === \"tui\") observer.start(actionOwner);\n                  else await observer.shutdown(actionOwner);\n                  if (!current(expected)) return false;\n                  await updateHerdrSettings({ widget: enabled }, { settingsPath });\n                  return current(expected);\n                } catch {\n                  if (!current(expected)) return false;\n                  enabled = previous;\n                  try {\n                    if (previous && actionOwner.mode === \"tui\") observer.start(actionOwner);\n                    else await observer.shutdown(actionOwner);\n                  } finally {\n                    if (current(expected))\n                      ctx.ui.notify(\n                        \"Herdr settings were not saved; the previous widget setting was restored. Check pi-herdr.json and its permissions.\",\n                        \"warning\",\n                      );\n                  }\n                  return false;\n                }\n              });\n              changes = result.then(\n                () => undefined,\n                () => undefined,\n              );\n              return result;\n            },\n          }),\n          {\n            getState: () => undefined,\n            signal,\n            isCurrent: () => current(expected),\n            onError: () => {\n              if (current(expected)) ctx.ui.notify(\"The Herdr menu could not be displayed.\", \"error\");\n            },\n          },\n        );\n      } finally {\n        if (expected === generation) menuOpen = false;\n      }\n    },\n  });\n\n  return {\n    async start(ctx: ExtensionContext) {\n      const expected = ++generation;\n      controller.abort();\n      controller = new AbortController();\n      menuOpen = false;\n      const previous = owner;\n      owner = ctx;\n      if (previous) await observer.shutdown(previous);\n      if (!current(expected)) return;\n      await changes;\n      if (!current(expected)) return;\n      const loaded = await readHerdrSettings(settingsPath);\n      if (!current(expected)) return;\n      enabled = loaded.settings.widget;\n      if (loaded.kind === \"invalid\" && ctx.hasUI)\n        ctx.ui.notify(\n          \"Herdr ignored invalid pi-herdr.json settings and kept the widget enabled. Fix the file before saving.\",\n          \"warning\",\n        );\n      if (enabled && ctx.mode === \"tui\") observer.start(ctx);\n    },\n    async shutdown(ctx: ExtensionContext) {\n      if (ctx.sessionManager !== owner?.sessionManager) return;\n      generation += 1;\n      controller.abort();\n      owner = undefined;\n      menuOpen = false;\n      await Promise.all([observer.shutdown(ctx), changes]);\n      await awaitHerdrSettingsWrites(settingsPath);\n    },\n  };\n}\n"],
  "mappings": "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",
  "names": ["isRecord", "sanitizeTerminalText", "isRecord", "path", "herdrAgentState"]
}
