import type { Command } from "commander"; export type OutputMode = "text" | "json"; export interface Logger { debugEnabled: boolean; setDebug: (enabled: boolean) => void; debug: (message: string) => void; info: (message: string) => void; error: (message: string) => void; } export interface SelectOption { value: string; label: string; } export interface SpinnerController { start: () => void; stop: (message: string) => void; } export interface UiAdapter { isInteractive: boolean; writeLine: (message?: string) => void; promptText: (message: string, placeholder?: string) => Promise; promptConfirm: (message: string, initialValue?: boolean) => Promise; promptSelect: (message: string, options: SelectOption[]) => Promise; createSpinner: (label: string) => SpinnerController; } export interface OutputWriter { mode: OutputMode; setMode: (mode: OutputMode) => void; writeText: (message?: string) => void; writeData: (value: unknown) => void; } export interface ConfigStore> { path: string; read: () => Promise>; write: (value: TConfig) => Promise; patch: (value: Partial) => Promise; } export interface PluginTask { id: string; title: string; run: (services: RuntimeServices) => Promise; } export interface TaskRegistry { list: () => PluginTask[]; find: (id: string) => PluginTask | undefined; } export interface RuntimeServices { cwd: string; env: NodeJS.ProcessEnv; logger: Logger; ui: UiAdapter; output: OutputWriter; configStore: ConfigStore; taskRegistry: TaskRegistry; loadedPlugins: string[]; } export interface CommandModule { register: (program: Command, services: RuntimeServices) => void; } export interface AppConfig { projectName: string; persona: string; verbose: boolean; } export interface ModuleDefinition { id: string; create: () => CommandModule; } export interface TaskDefinition { id: string; create: () => PluginTask; } export interface CliPlugin { name: string; modules?: ModuleDefinition[]; tasks?: TaskDefinition[]; } export interface PluginLoadResult { plugins: CliPlugin[]; failures: Array<{ path: string; reason: string }>; } export interface RuntimeBootstrap { services: RuntimeServices; moduleDefinitions: ModuleDefinition[]; }