import type { Component, TUI } from "@earendil-works/pi-tui"; import type { WorkflowAgentChild, WorkflowLogEntry, WorkflowMeta, WorkflowProgressEvent, WorkflowProgressState, WorkflowRunResult } from "./workflow-types.js"; export type WorkflowProgressStatus = "running" | "completed" | "stopped" | "error"; export type WorkflowAgentChildSource = Iterable | ReadonlyMap; export interface WorkflowProgressEnvelope extends WorkflowProgressState { result: unknown; duration: number; status: WorkflowProgressStatus; error?: string; } export interface WorkflowProgressCompletion { envelope: WorkflowProgressEnvelope; summary: string; } export interface WorkflowProgressErrorSummary { envelope: WorkflowProgressEnvelope; summary: string; } export interface WorkflowProgressTrackerOptions { startedAt?: number; initialMeta?: WorkflowMeta; maxLogEntries?: number; now?: () => number; } export interface WorkflowProgressUiApi { setStatus?: (key: string, text: string | undefined) => void; setWidget?: (key: string, content: string[] | undefined, options?: WorkflowProgressWidgetOptions) => void; setThemedWidget?: WorkflowProgressThemedWidgetSetter; } export interface WorkflowProgressTheme { fg(color: string, text: string): string; } export interface WorkflowProgressWidgetOptions { placement?: "aboveEditor" | "belowEditor"; } export type WorkflowProgressWidgetFactory = (tui: TUI, theme: WorkflowProgressTheme) => Component & { dispose?(): void; }; export type WorkflowProgressThemedWidgetSetter = (key: string, content: WorkflowProgressWidgetFactory | undefined, options?: WorkflowProgressWidgetOptions) => void; export interface WorkflowProgressUiContext { hasUI?: boolean; ui?: WorkflowProgressUiApi; } export interface WorkflowProgressUiUpdate { content: Array<{ type: "text"; text: string; }>; details: WorkflowProgressEnvelope; } export interface WorkflowProgressUiOptions { onUpdate?: (result: WorkflowProgressUiUpdate) => void; statusKey?: string; widgetKey?: string; widgetPlacement?: "aboveEditor" | "belowEditor"; } export interface WorkflowProgressUiController { update(envelope: WorkflowProgressEnvelope): void; clear(): void; } export interface WorkflowProgressErrorOptions { stopped?: boolean; summary?: string; message?: string; } export declare class WorkflowProgressTracker { private readonly childAgents; private readonly maxLogEntries; private readonly now; private readonly startedAt; private latestProgress; constructor(options?: WorkflowProgressTrackerOptions); updateFromProgressEvent(event: WorkflowProgressEvent): WorkflowProgressEnvelope; updateChildAgent(child: WorkflowAgentChild): WorkflowProgressEnvelope; getEnvelope(status?: WorkflowProgressStatus, fields?: Partial): WorkflowProgressEnvelope; getProgressText(status?: WorkflowProgressStatus): string; complete(result: WorkflowRunResult): WorkflowProgressCompletion; error(error: unknown, options?: WorkflowProgressErrorOptions): WorkflowProgressErrorSummary; } export declare function createWorkflowProgressTracker(options?: WorkflowProgressTrackerOptions): WorkflowProgressTracker; export declare function createWorkflowProgressUi(ctx: WorkflowProgressUiContext, options?: WorkflowProgressUiOptions): WorkflowProgressUiController | undefined; export declare function mergeWorkflowProgress(previous: WorkflowProgressState, event: WorkflowProgressEvent, childAgents?: WorkflowAgentChildSource, maxLogEntries?: number): WorkflowProgressState; export declare function mergeWorkflowLogs(previous: WorkflowLogEntry[], next: WorkflowLogEntry[], limit?: number): WorkflowLogEntry[]; export declare function mergeWorkflowAgents(agents: WorkflowAgentChild[], childAgents: WorkflowAgentChildSource): WorkflowAgentChild[]; export declare function workflowProgressResult(envelope: WorkflowProgressEnvelope, header: string): { content: { type: "text"; text: string; }[]; details: WorkflowProgressEnvelope; }; export declare function toJsonSafeWorkflowEnvelope(envelope: WorkflowProgressEnvelope): WorkflowProgressEnvelope;