Skip to main content
  • Method: whatHappened
  • Scope: run:read
  • Transports: HTTP RPC, WebSocket RPC
  • Request: { runId, nodeId?, iteration? }
  • Response: { runId, nodeId, iteration, scope, summary, agentId, source, cached, generatedAtMs }
Omit nodeId for a run summary (scope: "run"); pass it for a node summary (scope: "node", iteration defaulting to its latest). Smithers Monitor shows it atop a clicked node. The Gateway never calls an LLM: with a narrator wired via its whatHappened option (the smithers CLI defaults to its cheapest usable local agent, gpt-5.6-luna first), summary is that agent’s recap, source is "agent", and agentId names it. Without one, or if every attempt fails, it falls back to a deterministic fact recap from run/node rows (source: "facts", agentId: null), always returning a usable summary. Terminal runs/nodes (finished, failed, cancelled) cache summaries per state fingerprint; cached: true marks a hit. Live targets re-summarize every call. Errors are versioned as v1 and include InvalidRequest, Unauthorized, Forbidden, RunNotFound, NodeNotFound, and Internal.