/** * Negotiate-plan use-case: the interactive negotiation loop for plan proposal * and challenge/approval. Driven by injected ports (agent, fs, prompt, print) * so it is fully testable with fakes — the actual stdin/stdout binding is the * orchestrator's job. */ import type { AgentPort } from "../ports/agent.ts"; import type { FsPort } from "../ports/fs.ts"; import type { PromptPort } from "../ports/prompt.ts"; import type { PlanSessionConfig } from "./plan-session.ts"; export interface NegotiatePlanDeps { agent: AgentPort; fs: FsPort; prompt: PromptPort; print: (line: string) => void; } export interface NegotiatePlanConfig extends PlanSessionConfig { diabloDir: string; } /** * Runs the interactive plan negotiation loop: proposes a plan, then loops * asking the user for challenges or approval. On explicit approval, freezes * the plan and persists status as "planned". On abort, returns without * freezing. Returns "frozen" if approved, "aborted" if cancelled. */ export declare function negotiatePlan(deps: NegotiatePlanDeps, config: NegotiatePlanConfig): Promise<"frozen" | "aborted">;