# Changelog

## 0.1.0-rc.6 (2026-11-11)

- `deployment.runtime` returns resource use for each node: memory by type, memory the OS
  reports, processes grouped by the module that runs them, processes, ports, atoms and ETS
  tables against their limits, scheduler use, run queue, reductions, garbage collection, I/O,
  versions and, with os_mon, CPU load, memory and disks. It also returns the running agents that
  use the most memory.
- `deployment.nodes` counts the agents on the nodes that are `running`, `idle` and `parked`.
- `agent.runtime` returns a running agent's memory, mailbox size, process count and reductions.
- `agent.resolved` returns what the app gives an agent: who it works for, its policies, MCP
  servers and their tools, notify targets, channels and workspaces.

## 0.1.0-rc.5 (2026-11-06)

- `interrupt.arguments` holds the arguments of the call a person decides on. `name` names that call's tool, which for a coding agent's request differs from the call that parked.

## 0.1.0-rc.4 (2026-11-04)

- `trigger_definition.overlap` takes `settle`, the default for clock and feed triggers. A trigger
  that fires while the agent waits on an unanswered interrupt cancels that turn, then sends its
  prompt.
- `agent.cancelled` has `trigger`, set when a trigger cancelled the turn.
- `agent_definition.model_options`: `temperature`, `top_p`, `max_tokens`, `reasoning_effort`, and
  the model call's timeouts in seconds. No other keys.
- `agent_definition.retries` documents `Retry-After`.

## 0.1.0-rc.3 (2026-11-03)

- A timeline's run has `subagent` steps: a task handed to a delegate, with what it answered.

- `events.list` and `events.head` read only the agents named: `agents` is required.

- `agents.list` takes `limit` and `after`, and answers `next`, the cursor after the page. Without
  `limit`, it lists every agent, as before.

## 0.1.0-rc.2 (2026-11-02)

- The events `wardrik.provider.added`, `wardrik.provider.removed`,
  `wardrik.notify_target.added` and `wardrik.notify_target.removed`.
- Each generated operation function's doc shows a call.
- An interrupt given as `interrupt:` names its own `agent` and `conversation`:
  `Wardrik.Agent.approve(scope, interrupt: interrupt)`.
- `openapi.json` describes what `hook.deliver`, `hook.deliver_with_secret` and
  `channel.deliver` take over HTTP: the request as the service sent it, in any content type.
  `x-wardrik-input` and `x-wardrik-output` give what the operation itself takes and answers.
- `agent.clear` is summarized as clearing a history. The agent and its other conversations stay.

### Breaking

- Behaviour callbacks take a request struct, then options. `Wardrik.Server`'s `run/1` and
  `stream/1` take a `Wardrik.Server.Request`, and `follow/2` a `Wardrik.Server.Follow`.
  `c:Wardrik.Channel.notify/2` takes a `Wardrik.Channel.Notification`.
  `Wardrik.Channel.Installations` callbacks take a `Wardrik.Channel.Installations.Request`.
- Secrets, ceilings, MCP servers and connections are no longer protocol operations.
  `Wardrik.Secrets`, `Wardrik.Ceilings`, `Wardrik.MCPServers`, `Wardrik.Connections` and their
  types and schemas are gone.
- The `wardrik.ceiling.reached` event and its schema are gone. Ceilings belong to the app that
  sets them.
- `agent_definition` no longer speaks of orgs, owners or `config.yaml`. Its example shares
  `agt_runbooks`.
- Statements and tokens are gone: `Wardrik.Statement`, `Wardrik.Tokens`, `Wardrik.Token`, the
  `tokens.*` operations and the `authenticate/2` callback.
- `Wardrik.Resource`, `Definition.principal/1` and the channel installation's
  `approvers` are gone. A notification names its `workspace`.
- `Wardrik.Scope.new/2` takes the server, then `:wardrik`, `:principal`, `:actor` and `:context`.
- Agent IDs are opaque: 1 to 255 characters, no control characters. `Wardrik.AgentID` is gone,
  and `agents.list` and `agent.read` no longer answer a `name`. `{agent}` in a route is one
  URL-encoded segment.
- A conversation is a field, not part of the agent ID. Operations on one take an optional
  `conversation`, and their routes sit under `/v1/agents/{agent}/conversations/{conversation}`.
  `WardrikProtocol.operation/1` gives that route as `:conversation`.
- Events carry `agent` and `conversation` attributes. A cursor encodes a list of
  `[agent, conversation, sequence]`.
- `agents.list`, `agents.forget`, `agents.cancel`, `interrupts.list`, `events.list`,
  `events.head` and `deployment.reload` take `agents`, a list of agent IDs, each with all its
  conversations.
- An operation with two or more path parameters takes one keyword list, including
  `conversation:`: `Wardrik.Agent.approve(scope, agent: "agt_1", interrupt: "call_1",
  conversation: "C1")`. That's `Wardrik.Agent`'s `approve/2`, `deny/2`, `kill/2`,
  `authorization/2`, `trigger_set/2` and `trigger_remove/2`, `Wardrik.Hook.deliver/2`,
  `deliver_with_secret/2` and `Wardrik.Channel.deliver/2`.
- `Wardrik.Agent.decide/2` takes one keyword list too, as `approve/2` and `deny/2` do:
  `decide(scope, agent: "agt_1", decisions: %{"call_1" => :approve}, conversation: "C1")`.
- An operation with one path parameter takes `conversation:` in its options:
  `Wardrik.Agent.ask(scope, "agt_1", "Hi", conversation: "C1")`.
- An operation's input takes only its own fields. Any other key raises `ArgumentError`.
- An operation with no fields of its own takes no input: `Wardrik.Agent.read(scope, "agt_1")`.
- `Wardrik.Interrupt`'s `agent_id` is `agent`. `Wardrik.Notice`, `Wardrik.Interrupt` and
  `Wardrik.Server.Follow` carry `conversation`.

## 0.1.0-rc.1 (2026-10-30)

- Wardrik's events as CloudEvents: a JSON Schema for each event type, and for the envelope.
- Every operation in one OpenAPI 3.1 document, by its `operationId`, with the action it needs, its
  effect and what it acts on.
- `WardrikProtocol.schema/1`, a schema with every `$ref` inlined, for any JSON Schema validator.
- `operations/0` and `operation/1`, each operation with one `input` schema across its path, query
  and body.
- `types/0` and `dataschema/1`, for every event type.
- Live events, like `message.delta`, marked `x-wardrik-live`: sent as they happen, never stored.
- The typed Elixir functions, like `Wardrik.Agent.ask/3`, that packages built on Wardrik call.
- `Wardrik.Server`, the behaviour for what runs Wardrik's operations.
