import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; import { type SlackBridgeSettings } from "./helpers.js"; import type { SinglePlayerThreadInfo } from "./single-player-runtime.js"; export interface PersistedState { threads?: [string, SinglePlayerThreadInfo][]; lastDmChannel?: string | null; userNames?: [string, string][]; agentName?: string; agentEmoji?: string; agentStableId?: string; brokerStableId?: string; lastPinetRole?: "broker" | "worker"; activeSkinTheme?: string | null; agentPersonality?: string | null; agentAliases?: string[]; } export interface PersistedRuntimeStateStringCache { entries: () => Iterable<[string, string]>; has: (key: string) => boolean; set: (key: string, value: string) => void; } export interface PersistedRuntimeStateDeps { pi: Pick; threads: Map; userNames: PersistedRuntimeStateStringCache; getLastDmChannel: () => string | null; setLastDmChannel: (channelId: string | null) => void; getAgentName: () => string; setAgentName: (name: string) => void; getAgentEmoji: () => string; setAgentEmoji: (emoji: string) => void; getAgentStableId: () => string; setAgentStableId: (stableId: string) => void; getBrokerStableId: () => string; setBrokerStableId: (stableId: string) => void; getBrokerRole: () => "broker" | "follower" | null; getActiveSkinTheme: () => string | null; setActiveSkinTheme: (theme: string | null) => void; getAgentPersonality: () => string | null; setAgentPersonality: (personality: string | null) => void; agentAliases: Set; setAgentOwnerToken: (ownerToken: string) => void; getSettings: () => SlackBridgeSettings; formatError: (error: unknown) => string; } export interface PersistedRuntimeStateManager { persistStateNow: () => void; persistState: () => void; flushPersist: () => void; restorePersistedRuntimeState: (ctx: ExtensionContext) => void; } export declare function createPersistedRuntimeState(deps: PersistedRuntimeStateDeps): PersistedRuntimeStateManager;