# `Raxol.AgentClientProtocol.Schema.LifecycleExtras`
[🔗](https://github.com/DROOdotFOO/raxol-agent/blob/raxol_agent_client_protocol-v0.1.0/packages/raxol_agent_client_protocol/lib/raxol/agent_client_protocol/schema/lifecycle_extras.ex#L1)

Minimal, oracle-derived param/result structs for v1.19.0 ACP methods that
had no home in the ported f1729 `Schema.*` layer: `session/close`,
`session/delete`, `logout`, `session/update` (the notification envelope),
and the protocol-level `$/cancel_request`.

Unlike the sibling `agent_types.ex`/`client_types.ex`/`unstable.ex` files,
these are **not** ports of an upstream f1729 module (f1729 predates
`schema-v1.19.0` and never had these types) — they are read directly off
`priv/schema-oracle/v1/schema.json`'s `$defs` for `CloseSessionRequest`,
`CloseSessionResponse`, `DeleteSessionRequest`, `DeleteSessionResponse`,
`LogoutResponse`, `SessionNotification`, and `CancelRequestNotification`.
No upstream MIT attribution applies to this file.

Every struct here follows the same total-decode + `_meta` pass-through
convention as the rest of the package, reusing the shared decode helpers
from `Raxol.AgentClientProtocol.Schema.AgentTypes` (`fetch/2`,
`decode_optional/3`, `extract_meta/2`, `put_meta/2`) exactly as
`Schema.Unstable` does. `from_json/1` never raises; it always returns
`{:ok, t}` or `{:error, reason}`.

## `LogoutRequest` is intentionally NOT ported here

`priv/schema-oracle/v1/schema.json`'s `LogoutRequest` def carries no
properties beyond the universal `_meta` envelope. The `logout` row in
`Raxol.AgentClientProtocol.MethodTable` declares `params: nil` for exactly
this reason — the Router decodes `nil` straight through and the
generated callback drops to arity 1 (`ctx` only, no params argument), so
there is no `from_json/1` call site that would ever receive a
`LogoutRequest` struct. `LogoutResponse` IS ported below because
`logout` is a `:request`-kind row and every request row needs a non-nil
`result` module regardless of whether its params are decoded.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
