import type { ExtensionContext } from "@earendil-works/pi-coding-agent"; import type { SlackBridgeRuntimeMode } from "./runtime-mode.js"; export type PinetAgentStatusValue = "working" | "idle"; export interface PinetAgentStatusBrokerDbPort { updateAgentStatus: (agentId: string, status: PinetAgentStatusValue) => void; } export interface PinetAgentStatusDeps { getPinetEnabled: () => boolean; getBrokerRole: () => "broker" | "follower" | null; getDesiredAgentStatus: () => PinetAgentStatusValue; setDesiredAgentStatus: (status: PinetAgentStatusValue) => void; getActiveBrokerDb: () => PinetAgentStatusBrokerDbPort | null; getActiveBrokerSelfId: () => string | null; hasFollowerClient: () => boolean; syncFollowerDesiredStatus: (status: PinetAgentStatusValue, options: { force?: boolean; }) => Promise; runBrokerMaintenance: (ctx: ExtensionContext) => void; getInboxLength: () => number; getCurrentRuntimeMode: () => SlackBridgeRuntimeMode; maybeDrainInboxIfIdle: (ctx: ExtensionContext) => boolean; getExtensionContext: () => ExtensionContext | undefined; } export interface PinetAgentStatus { syncDesiredAgentStatus: (options?: { force?: boolean; }) => Promise; reportStatus: (status: PinetAgentStatusValue) => Promise; signalAgentFree: (ctx?: ExtensionContext, options?: { requirePinet?: boolean; }) => Promise<{ queuedInboxCount: number; drainedQueuedInbox: boolean; }>; } export declare function createPinetAgentStatus(deps: PinetAgentStatusDeps): PinetAgentStatus;