> ## Documentation Index
> Fetch the complete documentation index at: https://smithers.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# whatHappened

> Gateway RPC for short "what happened" summaries of runs and nodes.

* 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` to summarize the whole run (`scope: "run"`); pass it to
summarize one node (`scope: "node"`, `iteration` defaults to the node's latest
iteration). The Smithers Monitor uses this to show a plain-language recap at
the top of a clicked node.

The Gateway never calls an LLM itself. When the host wired a narrator via the
Gateway `whatHappened` option (the smithers CLI narrates with its cheapest
usable local agent, `gpt-5.6-luna` first), `summary` is that agent's recap and
`source` is `"agent"` with `agentId` naming the narrator. Without a narrator,
or when every narrator attempt fails, the Gateway answers with a deterministic
fact recap built from the run/node rows (`source: "facts"`, `agentId: null`),
so the method always returns a usable summary.

Summaries for terminal runs and nodes (finished, failed, cancelled) are cached
per state fingerprint; `cached: true` reports a cache hit. Live targets are
re-summarized on every call.

Errors are versioned as `v1` and include `InvalidRequest`, `Unauthorized`, `Forbidden`, `RunNotFound`, `NodeNotFound`, and `Internal`.
