import type { TickAction, TickPlan } from "./decision.js"; export type ActionOutcome = "done" | "routed" | "deferred" | "skipped" | "failed"; export interface ActionEffect { readonly outcome: ActionOutcome; readonly detail?: string; /** False means the external result is ambiguous/incompatible; never retry blindly. */ readonly retrySafe?: boolean; } export type ActionEffectResult = ActionOutcome | ActionEffect; export interface ActionContext { readonly root: string; readonly loopId: string; readonly now: number; } export interface ActionSink { close(action: TickAction, ctx: ActionContext): Promise; requestLaunch(action: TickAction, ctx: ActionContext): Promise; wake(action: TickAction, ctx: ActionContext): Promise; routeDecision(action: TickAction, ctx: ActionContext): Promise; } export interface ActionResult { readonly type: TickAction["type"]; readonly agentId?: string; readonly outcome: ActionOutcome; readonly reason: string; readonly detail?: string; readonly retrySafe?: boolean; } export interface ExecReport { readonly loopId: string; readonly executed: boolean; readonly results: readonly ActionResult[]; readonly counts: Record; } /** Stable idempotency key for an action (used by sinks + event journal). */ export declare function actionKey(a: TickAction, loopId: string): string; /** * Execute a plan through the sink. A track-degraded plan runs NOTHING (safety). * Runtime-agent degradation alone can still execute presence-proven wakes. Each * executed action appends a `loop.action.*` event. Returns a typed report. */ export declare function executePlan(root: string, loopId: string, plan: TickPlan, sink: ActionSink, now: number, opts?: { readonly signal?: AbortSignal; }): Promise; //# sourceMappingURL=execute.d.ts.map