import type { ExtensionContext } from "@earendil-works/pi-coding-agent"; import { type InboxMessage, type PinetControlCommand, type PinetRemoteControlRequestResult, type PinetSkinStatusVocabulary, type SlackBridgeSettings } from "./helpers.js"; import { type Broker } from "./broker/index.js"; import { MessageRouter } from "./broker/router.js"; import { type BrokerMaintenanceResult } from "./broker/maintenance.js"; import { type BrokerDeliveryState } from "./broker-delivery.js"; import type { InboundMessage } from "./broker/types.js"; import { type ActivityLogEntry, type ActivityLogTone, type LoggedActivityLogEntry, type SlackActivityLogger } from "./activity-log.js"; import type { BrokerControlPlaneDashboardSnapshot } from "./broker/control-plane-dashboard.js"; import { type RalphSnoozeStatus } from "./ralph-loop.js"; import { type PinetRuntimeAdapterFactory } from "./pinet-runtime-composition.js"; export interface BrokerRuntimeConnectResult { botUserId: string | null; recoveredBrokerMessages: number; recoveredTargetedBacklogCount: number; releasedBrokerClaims: number; } export interface BrokerRuntimeDeps { getSettings: () => SlackBridgeSettings; getAllowedUsers: () => Set | null; getBrokerStableId: () => string; setBrokerStableId: (stableId: string) => void; getActiveSkinTheme: () => string | null; setActiveSkinTheme: (theme: string) => void; setAgentOwnerToken: (ownerToken: string) => void; getAgentMetadata: (role: "broker" | "worker") => Promise>; applyLocalAgentIdentity: (name: string, emoji: string, personality: string | null) => void; buildSkinMetadata: (metadata: Record | undefined, personality: string, statusVocabulary?: PinetSkinStatusVocabulary) => Record; getMeshRoleFromMetadata: (metadata: Record | undefined, fallback?: "broker" | "worker") => "broker" | "worker"; handleInboundMessage: (input: { message: InboundMessage; broker: Broker; router: MessageRouter; selfId: string; ctx: ExtensionContext; }) => Promise | void; pushInboxMessages: (messages: InboxMessage[]) => void; updateBadge: () => void; maybeDrainInboxIfIdle: (ctx: ExtensionContext) => boolean; requestRemoteControl: (command: PinetControlCommand, ctx: ExtensionContext) => PinetRemoteControlRequestResult; deferControlAck: (command: PinetControlCommand, inboxId: number) => void; runRemoteControl: (command: PinetControlCommand, ctx: ExtensionContext) => void; formatError: (error: unknown) => string; deliveryState: BrokerDeliveryState; onMaintenanceResult: (ctx: ExtensionContext, input: { result: BrokerMaintenanceResult; previousSignature: string; signature: string; }) => void; onMaintenanceError: (ctx: ExtensionContext, error: unknown) => void; onScheduledWakeupError: (ctx: ExtensionContext, error: unknown) => void; onAgentStatusChange: (ctx: ExtensionContext, changedAgentId: string, status: "working" | "idle") => void; createActivityLogger: (onError: (error: unknown) => void) => SlackActivityLogger; formatTrackedAgent: (agentId: string) => string; summarizeTrackedAssignmentStatus: (status: "assigned" | "branch_pushed" | "pr_open" | "pr_merged" | "pr_closed", prNumber: number | null, branch: string | null) => { summary: string; tone: ActivityLogTone; }; sendMaintenanceMessage: (targetAgentId: string, body: string) => void; trySendFollowUp: (body: string, onDelivered: () => void) => void; refreshHomeTabs: (ctx: ExtensionContext, snapshot: BrokerControlPlaneDashboardSnapshot, refreshedAt: string, userIds?: string[]) => Promise; buildControlPlaneDashboardSnapshot: (input: Record) => BrokerControlPlaneDashboardSnapshot; buildCurrentDashboardSnapshot: (openedAt?: string) => Promise; createAdapterBindings: readonly PinetRuntimeAdapterFactory[]; } export declare function resolveConfiguredBrokerSkinTheme(settings: SlackBridgeSettings): string; export interface BrokerRuntime { connect: (ctx: ExtensionContext) => Promise; disconnect: (options?: { releaseIdentity?: boolean; }) => Promise; claimThread: (threadTs: string, channelId: string, source?: string) => void; runMaintenance: (ctx: ExtensionContext) => void; markDelivered: (inboxIds: number[]) => void; startObservability: (ctx: ExtensionContext) => void; clearFollowUpPending: () => void; logActivity: (entry: ActivityLogEntry) => void; getRecentActivityEntries: (limit?: number) => ReadonlyArray; getBroker: () => Broker | null; getSelfId: () => string | null; getLastMaintenance: () => BrokerMaintenanceResult | null; getRalphSnoozeStatus: () => RalphSnoozeStatus; snoozeRalphLoop: (input: { durationMs: number; reason?: string | null; }) => RalphSnoozeStatus; clearRalphSnooze: () => RalphSnoozeStatus; heartbeatTimerActive: () => boolean; maintenanceTimerActive: () => boolean; isConnected: () => boolean; getHomeTabViewerIds: () => string[]; getLastHomeTabSnapshot: () => BrokerControlPlaneDashboardSnapshot | null; setLastHomeTabSnapshot: (snapshot: BrokerControlPlaneDashboardSnapshot | null) => void; getLastHomeTabRefreshAt: () => string | null; setLastHomeTabRefreshAt: (value: string | null) => void; getLastHomeTabError: () => string | null; setLastHomeTabError: (value: string | null) => void; publishCurrentHomeTabSafely: (userId: string, ctx: ExtensionContext, openedAt?: string) => Promise; } export declare function createBrokerRuntime(deps: BrokerRuntimeDeps): BrokerRuntime;