import type { ExtensionContext } from "@earendil-works/pi-coding-agent"; import type { BrokerControlPlaneDashboardSnapshot } from "./broker/control-plane-dashboard.js"; import { type PublishSlackHomeTabInput } from "./home-tab.js"; import type { SlackBridgeRuntimeMode } from "./runtime-mode.js"; export interface PinetHomeTabsBrokerPort { isConnected: () => boolean; publishCurrentHomeTabSafely: (userId: string, ctx: ExtensionContext, openedAt?: string) => Promise; getHomeTabViewerIds: () => string[]; getLastHomeTabError: () => string | null; setLastHomeTabSnapshot: (snapshot: BrokerControlPlaneDashboardSnapshot | null) => void; setLastHomeTabRefreshAt: (value: string | null) => void; setLastHomeTabError: (value: string | null) => void; } export interface PinetHomeTabsDeps { slack: PublishSlackHomeTabInput["slack"]; getBotToken: () => string | undefined; formatError: (error: unknown) => string; getAgentName: () => string; getAgentEmoji: () => string; getBrokerRole: () => "broker" | "follower" | null; getRuntimeMode: () => SlackBridgeRuntimeMode; isFollowerConnected: () => boolean; isSinglePlayerConnected: () => boolean; getActiveThreads: () => number; getPendingInboxCount: () => number; getDefaultChannel: () => string | null | undefined; getBrokerHomeTabs: () => PinetHomeTabsBrokerPort; getCurrentBranch?: () => Promise; } export interface PinetHomeTabs { refreshBrokerControlPlaneHomeTabs: (ctx: ExtensionContext, snapshot: BrokerControlPlaneDashboardSnapshot, refreshedAt: string, userIds?: string[]) => Promise; reportHomeTabPublishFailure: (ctx: ExtensionContext, err: unknown) => void; publishCurrentPinetHomeTab: (userId: string, ctx: ExtensionContext, openedAt?: string) => Promise; publishCurrentPinetHomeTabSafely: (userId: string, ctx: ExtensionContext, openedAt?: string) => Promise; } export declare function createPinetHomeTabs(deps: PinetHomeTabsDeps): PinetHomeTabs;