import type * as Effect from "effect/Effect"; import * as ServiceMap from "effect/Context"; import type * as Schema from "effect/Schema"; import type * as Stream from "effect/Stream"; import type { SuggestedAction } from "../cli-runtime/suggested-action.js"; export type LogLevel = "message" | "info" | "success" | "step" | "warn" | "error"; export type LogMessage = { readonly _tag: "message"; readonly message: string; } | { readonly _tag: "info"; readonly message: string; } | { readonly _tag: "success"; readonly message: string; } | { readonly _tag: "step"; readonly message: string; } | { readonly _tag: "warn"; readonly message: string; } | { readonly _tag: "error"; readonly message: string; }; /** Structured detail a lifecycle observer attaches to a spinner update; machine mode forwards it on the progress event. */ export interface SpinnerUpdateDetail { readonly unit?: string; readonly state?: string; readonly reason?: string; readonly atMs?: number; } export interface SpinnerHandle { readonly stop: (message?: string) => Effect.Effect; readonly update: (message?: string, detail?: SpinnerUpdateDetail) => Effect.Effect; readonly cancel: (message?: string) => Effect.Effect; readonly error: (message?: string) => Effect.Effect; readonly clear: () => Effect.Effect; } export interface SpinnerOptions { readonly successMessage?: string | ((value: A) => string); readonly failureMessage?: string; } export interface ProgressConfig { readonly style?: "light" | "heavy" | "block"; readonly max?: number; readonly size?: number; } export interface ProgressHandle extends SpinnerHandle { readonly advance: (step?: number, message?: string) => Effect.Effect; } export interface TaskLogConfig { readonly title: string; readonly limit?: number; readonly retainLog?: boolean; } export interface TaskLogGroupHandle { readonly message: (msg: string) => Effect.Effect; readonly error: (message: string) => Effect.Effect; readonly success: (message: string) => Effect.Effect; } export interface TaskLogHandle { readonly message: (msg: string) => Effect.Effect; readonly group: (name: string) => Effect.Effect; readonly error: (message: string) => Effect.Effect; readonly success: (message: string) => Effect.Effect; } export interface Task { readonly title: string; readonly task: (message: (msg: string) => Effect.Effect) => Effect.Effect; readonly enabled?: boolean; } export type ViewKey = Extract; export type TableAlign = "left" | "right"; export type TableWidth = "auto" | "fill" | number; export interface TableColumnConfig> { readonly header: string; readonly render?: (value: T[K], row: T) => string; readonly align?: TableAlign; readonly width?: TableWidth; } export interface TableView { readonly columns: { readonly [K in ViewKey]: TableColumnConfig; }; } export interface DetailFieldConfig> { readonly label: string; readonly render?: (value: T[K], row: T) => string; } export interface DetailView { readonly fields: { readonly [K in ViewKey]: DetailFieldConfig; }; } export interface ResolvedTableColumn { readonly key: ViewKey; readonly header: string; readonly render: (row: T) => string; readonly align: TableAlign; readonly width: TableWidth; } export interface ResolvedDetailField { readonly key: ViewKey; readonly label: string; readonly render: (row: T) => string; } export interface TreeNode { readonly data: T; readonly children?: ReadonlyArray>; } export interface TreeDef { readonly label: (item: T) => string; readonly detail?: (item: T) => string | undefined; readonly icon?: (item: T) => string | undefined; } export interface ListPayload extends SuccessOptions { readonly items: ReadonlyArray; readonly count?: number; readonly emptyMessage?: string; } export interface DetailOptions extends SuggestionOptions { readonly title?: string; } export interface TreePayload extends SuccessOptions { readonly roots: ReadonlyArray>; } export interface BoxOptions { readonly contentAlignment?: "left" | "center" | "right"; readonly titleAlignment?: "left" | "center" | "right"; readonly width?: number; readonly padding?: number; readonly rounded?: boolean; } export interface SuggestionOptions { readonly suggestions?: ReadonlyArray; readonly withoutSuggestions?: boolean; } export interface SuccessOptions extends SuggestionOptions { readonly summary?: string; } export interface ResultOptions extends SuccessOptions { readonly ok?: boolean; } declare const CliRenderer_base: ServiceMap.ServiceClass Effect.Effect; readonly outro: (message: string) => Effect.Effect; readonly message: (message: string) => Effect.Effect; /** * Authentication or other interactive instructions required to complete * the current operation. These remain visible in quiet and machine modes. */ readonly instruction: (message: string) => Effect.Effect; /** Raw human-facing diagnostic content written to stderr. */ readonly diagnostic: (content: string) => Effect.Effect; /** Human-facing table written to stderr without machine-output framing. */ readonly diagnosticTable: (items: ReadonlyArray, view: TableView, caption?: string) => Effect.Effect; readonly info: (message: string) => Effect.Effect; readonly success: (message: string, options?: SuccessOptions) => Effect.Effect; readonly step: (message: string) => Effect.Effect; readonly warn: (message: string) => Effect.Effect; readonly error: (message: string, options?: SuggestionOptions) => Effect.Effect; readonly suggestions: (suggestions: ReadonlyArray, options?: SuggestionOptions) => Effect.Effect; readonly cancel: (message?: string) => Effect.Effect; readonly note: (message: string, title?: string) => Effect.Effect; readonly box: (message: string, title?: string, opts?: BoxOptions) => Effect.Effect; readonly streamLog: (level: LogLevel, stream: Stream.Stream) => Effect.Effect; readonly spinner: (message: string) => Effect.Effect; readonly withSpinner: (message: string, f: (handle: SpinnerHandle) => Effect.Effect, options?: SpinnerOptions) => Effect.Effect; readonly progress: (config: ProgressConfig, message?: string) => Effect.Effect; readonly withProgress: (config: ProgressConfig, message: string, f: (handle: ProgressHandle) => Effect.Effect, stopMessage?: string) => Effect.Effect; readonly taskLog: (config: TaskLogConfig) => Effect.Effect; readonly withTaskLog: (config: TaskLogConfig, f: (handle: TaskLogHandle) => Effect.Effect) => Effect.Effect; readonly runTasks: (tasks: ReadonlyArray>) => Effect.Effect; readonly table: (items: ReadonlyArray, view: TableView, caption?: string) => Effect.Effect; readonly list: (entity: string, payload: ListPayload) => Effect.Effect; readonly detail: { (item: T, view: DetailView, title?: string): Effect.Effect; (entity: string, item: T, options?: DetailOptions): Effect.Effect; }; readonly tree: { (roots: ReadonlyArray>, def: TreeDef, title?: string): Effect.Effect; (entity: string, payload: TreePayload): Effect.Effect; }; readonly result: (data: Schema.Schema.Type, schema: S, options?: ResultOptions) => Effect.Effect; readonly json: (data: unknown) => Effect.Effect; readonly raw: (content: string) => Effect.Effect; readonly markdown: (content: string) => Effect.Effect; }>; export declare class CliRenderer extends CliRenderer_base { } export {}; //# sourceMappingURL=cli-renderer.d.ts.map