import { type MonoAgentConfigJson, type RouteSafetyMode } from "@mono-agent/config"; import { type CapabilityModule, type GeneratedFile, type ModuleInputValues, type ModuleValidateExpectation } from "../modules/index.js"; /** * The complete set of choices the wizard (or a preset) makes. This is the single * input to {@link composeWizardPlan}: everything the composer needs to emit a full * `mono-agent.config.json`, `.env.example`, and follow-up files is derived from it. */ export interface WizardFallback { readonly model: string; readonly effort?: string; } export interface WizardAnswers { /** Public display identity. Omitted only by legacy/programmatic callers. */ readonly name?: string; /** Concise role statement used to generate the initial Identity. */ readonly purpose?: string; readonly model: string; /** Optional primary-route effort; omitted means provider default. */ readonly effort?: string; /** Canonical ordered fallback routes; omitted effort means provider default. */ readonly fallbacks: readonly WizardFallback[]; /** * Deprecated compatibility input. {@link defaultAnswers} converts these to * canonical routes, inheriting the legacy global effort when it is present. */ readonly fallbackModels?: readonly string[]; readonly routeSafety: RouteSafetyMode; /** Channel module ids, e.g. `["channel:webhook","channel:telegram"]`. */ readonly channels: readonly string[]; /** Memory module id, or `undefined` for no memory section. */ readonly memory?: string; readonly sandbox: boolean; readonly observability: boolean; /** Final tool selection written into `tools.allowedTools`. */ readonly allowedTools: readonly string[]; /** Per module id → non-secret input overrides. Secret inputs are stripped by the composer. */ readonly moduleInputs: Readonly>; } /** Folder-derived context the base skeleton needs (not from wizard inputs). */ export interface ComposeContext { readonly dirBasename: string; readonly skillsRootExists: boolean; } /** * One secret the composed agent still needs. The CLI prints the checklist as * `-