Skip to content

ExecutionEvent

ExecutionEvent = { at: string; execution_id: string; kind: "started"; } | { at: string; execution_id: string; iteration?: number; kind: "node_started"; node_id: string; } | { at: string; execution_id: string; iteration?: number; kind: "node_succeeded"; node_id: string; output: unknown; } | { at: string; error: string; execution_id: string; iteration?: number; kind: "node_failed"; node_id: string; } | { at: string; execution_id: string; iteration?: number; kind: "node_skipped"; node_id: string; reason: string; } | { at: string; execution_id: string; kind: "node_log"; line: string; node_id: string; stream: LogStream; } | { at: string; execution_id: string; kind: "tool_call"; name: string; node_id: string; summary: string; } | { at: string; execution_id: string; kind: "iteration_capped"; node_id: string; visits: number; } | { at: string; execution_id: string; kind: "paused"; } | { at: string; execution_id: string; kind: "resumed"; } | { action: string; at: string; execution_id: string; kind: "awaiting_confirmation"; node_id: string; } | { at: string; contract_version: string | null; execution_id: string; input: string; kind: "ai_invocation"; model: string; node_id: string; provider: string; } | { at: string; confidence: number | null; contract_version: string; decision: string; execution_id: string; kind: "ai_routing_decision"; node_id: string; threshold: string; } | { at: string; confidence: number; execution_id: string; kind: "ai_review_required"; node_id: string; primary_output: string; reasoning: string | null; } | { approved: boolean; at: string; execution_id: string; kind: "ai_review_resolved"; node_id: string; } | { at: string; decision_id: string; dsl: string; edge_count: number; execution_id: string; kind: "review_required"; node_count: number; plan?: string | null; } | { at: string; attempt: number; cap: number; decision_id: string; error: string; execution_id: string; kind: "fix_required"; node_id: string; prior_dsl: string; proposed_dsl: string; proposed_plan?: string | null; summary: string; } | { at: string; execution_id: string; kind: "workflow_summary"; summary: WorkflowSummary; } | { at: string; execution_id: string; kind: "done"; status: string; }

{ at: string; execution_id: string; kind: "started"; }


{ at: string; execution_id: string; iteration?: number; kind: "node_started"; node_id: string; }

at: string

execution_id: string

optional iteration?: number

0-based execution count for this node; > 0 when a bounded loop re-enters it.

kind: "node_started"

node_id: string


{ at: string; execution_id: string; iteration?: number; kind: "node_succeeded"; node_id: string; output: unknown; }


{ at: string; error: string; execution_id: string; iteration?: number; kind: "node_failed"; node_id: string; }


{ at: string; execution_id: string; iteration?: number; kind: "node_skipped"; node_id: string; reason: string; }


{ at: string; execution_id: string; kind: "node_log"; line: string; node_id: string; stream: LogStream; }

Streaming log line from a streaming-capable adapter (the shell adapter is the first). Renders into the bottom Log Panel as it arrives.


{ at: string; execution_id: string; kind: "tool_call"; name: string; node_id: string; summary: string; }

A model tool call dispatched inside an AI node’s in-node tool-use loop (an ai node bound to adapters), emitted just before the tool runs so the UI shows live tool-call granularity mid-turn. UX layer, like node_log: not persisted. name is the full tool id (fs__edit-file); summary is a one-line human-readable form (edit-file src/foo.rs).


{ at: string; execution_id: string; kind: "iteration_capped"; node_id: string; visits: number; }

A bounded loop hit the per-node visit cap; the node will not run again and the run finishes with partial status. Diagnostic only.


{ at: string; execution_id: string; kind: "paused"; }

The run reached a node-boundary checkpoint while paused and is now suspended until resumed or cancelled.


{ at: string; execution_id: string; kind: "resumed"; }

A paused run was released and scheduling continues.


{ action: string; at: string; execution_id: string; kind: "awaiting_confirmation"; node_id: string; }

A node about to run performs a destructive operation and the per-step confirmation gate is on. The run self-paused; the user confirms (resume) or cancels (stop). action summarizes what the node would do.


{ at: string; contract_version: string | null; execution_id: string; input: string; kind: "ai_invocation"; model: string; node_id: string; provider: string; }

An AI node is invoking its model. Audit-layer event: records the provider/model and the post-sanitizer input (preview-only for cloud nodes without auditContent). contract_version is set when the node is contract-bound.


{ at: string; confidence: number | null; contract_version: string; decision: string; execution_id: string; kind: "ai_routing_decision"; node_id: string; threshold: string; }

The engine routed a contract-bound AI output by the node contract’s thresholds. decision is auto_approve / human_review / suppress / contract_violation; threshold names the rule that applied.


{ at: string; confidence: number; execution_id: string; kind: "ai_review_required"; node_id: string; primary_output: string; reasoning: string | null; }

A contract-bound AI output landed in the human review band (or the model escalated). The run self-paused; the user approves or rejects via resolve_ai_review.


{ approved: boolean; at: string; execution_id: string; kind: "ai_review_resolved"; node_id: string; }

A human resolved an AI review gate. Recorded as a system event.


{ at: string; decision_id: string; dsl: string; edge_count: number; execution_id: string; kind: "review_required"; node_count: number; plan?: string | null; }

at: string

decision_id: string

dsl: string

edge_count: number

execution_id: string

kind: "review_required"

The agentic workflow generated a flow and awaits a review verdict (manual mode). Reply via submit_workflow_decision(decision_id, ...).

node_count: number

optional plan?: string | null


{ at: string; attempt: number; cap: number; decision_id: string; error: string; execution_id: string; kind: "fix_required"; node_id: string; prior_dsl: string; proposed_dsl: string; proposed_plan?: string | null; summary: string; }

at: string

attempt: number

cap: number

decision_id: string

error: string

execution_id: string

kind: "fix_required"

The workflow monitor proposed a fix and awaits a verdict (manual).

node_id: string

prior_dsl: string

proposed_dsl: string

optional proposed_plan?: string | null

summary: string


{ at: string; execution_id: string; kind: "workflow_summary"; summary: WorkflowSummary; }

at: string

execution_id: string

kind: "workflow_summary"

The agentic workflow finished; carries the completion overview.

summary: WorkflowSummary


{ at: string; execution_id: string; kind: "done"; status: string; }