// Copyright 2026 The A11 Authors.
//
// GENERATED by scripts/generate_flow_catalogue.py. Do not edit.
//
// The snapshot of the world the standalone tools know with nothing
// configured: every action the SDK registers and every type its
// serialization registry knows. A frontend with a live registry
// passes its own catalogue, which is merged over this.

#ifndef A11_FLOW_CATALOGUE_DATA_H_
#define A11_FLOW_CATALOGUE_DATA_H_

#include <string_view>

namespace a11::flow::catalogue {

inline constexpr std::string_view kCatalogueSnapshot = R"catalogue(
{
  "actions": [
    {
      "description": "Describe one action this peer serves, as an a11.actions/v1 document. Fails NOT_FOUND when the name is not registered here.",
      "inputs": [
        {
          "description": "Name of the action to describe.",
          "name": "action",
          "required": true,
          "type": "text/plain"
        }
      ],
      "name": "__get_schema__",
      "outputs": [
        {
          "description": "The a11.actions/v1 document for that one action.",
          "name": "schema",
          "required": true,
          "type": "application/json"
        }
      ]
    },
    {
      "description": "List the actions this peer serves, with their schemas, as one a11.actions/v1 document. Takes an optional request object on 'request': 'names' (full-match patterns), 'exact' (names), 'ports' (\"callable\" or \"all\"), 'include_reserved', and 'runnable_only'.",
      "inputs": [
        {
          "description": "Which actions to describe. Absent means all of them.",
          "name": "request",
          "type": "application/json"
        }
      ],
      "name": "__list_actions__",
      "outputs": [
        {
          "description": "The a11.actions/v1 document, whole.",
          "name": "actions",
          "required": true,
          "type": "application/json"
        }
      ]
    },
    {
      "description": "Ping the server to check if it is alive. Requires a single value on the port `input`, which it returns as a single value on the port `output`.",
      "inputs": [
        {
          "description": "Ping input value",
          "name": "input",
          "type": "text/plain",
          "unary": false
        }
      ],
      "name": "__ping",
      "outputs": [
        {
          "description": "Pong response value",
          "name": "output",
          "type": "text/plain",
          "unary": false
        }
      ]
    },
    {
      "description": "Capture audio from an input device and stream fixed-size AudioBuffers until a stop control event arrives or the action is cancelled.",
      "headers": [
        {
          "description": "Absolute execution deadline: a base-10 count of milliseconds since the Unix epoch, or nanoseconds with an 'ns' suffix. The action stops gracefully once it is reached.",
          "name": "x-a11-deadline",
          "type": "string"
        }
      ],
      "inputs": [
        {
          "description": "Control commands; a stop command finishes capture gracefully.",
          "name": "control_events",
          "required": true,
          "type": "application/json;type=a11.sdk.AudioControlEvent",
          "unary": false
        },
        {
          "description": "Capture parameters: device selection, sample rate, channels and the delivered buffer size.",
          "name": "options",
          "required": true,
          "type": "application/json;type=a11.sdk.AudioInputOptions"
        }
      ],
      "name": "capture_audio",
      "outputs": [
        {
          "description": "Stream of captured AudioBuffers.",
          "name": "audio",
          "type": "application/x-msgpack;type=a11.sdk.AudioBuffer",
          "unary": false
        },
        {
          "description": "Stream of capture lifecycle and dropped-buffer events.",
          "name": "events",
          "type": "application/json;type=a11.sdk.AudioCaptureEvent",
          "unary": false
        }
      ]
    },
    {
      "description": "Capture audio and stream recognized text pieces until a stop control event arrives or the action is cancelled.",
      "headers": [
        {
          "description": "Absolute execution deadline: a base-10 count of milliseconds since the Unix epoch, or nanoseconds with an 'ns' suffix. The action stops gracefully once it is reached.",
          "name": "x-a11-deadline",
          "type": "string"
        }
      ],
      "inputs": [
        {
          "description": "Speech recognition parameters; model is required.",
          "name": "asr_options",
          "type": "application/json;type=a11.sdk.SpeechRecognizerOptions"
        },
        {
          "description": "Optional capture parameters; the default input is used if omitted.",
          "name": "capture_options",
          "type": "application/json;type=a11.sdk.AudioInputOptions"
        },
        {
          "description": "Control commands; a stop command finishes transcription gracefully.",
          "name": "control_events",
          "required": true,
          "type": "application/json;type=a11.sdk.AudioControlEvent",
          "unary": false
        }
      ],
      "name": "capture_transcription",
      "outputs": [
        {
          "description": "Stream of capture and inference lifecycle events.",
          "name": "events",
          "type": "application/json;type=a11.sdk.TranscriptionEvent",
          "unary": false
        },
        {
          "description": "Recognized text pieces as utterances are decoded.",
          "name": "transcription_pieces",
          "type": "text/plain",
          "unary": false
        }
      ]
    },
    {
      "description": "List the actions a flow may call, with the name, arity and description of every input and output port each one has. Call this before writing a flow: piping one action into another needs the names of the ports on both sides, and an action's output ports are not part of the tool definition you were given. The list is the actions you are allowed to call, minus the flow tools themselves.",
      "name": "flow_actions",
      "outputs": [
        {
          "description": "One entry per composable action: its name, description, and its input and output ports.",
          "name": "actions",
          "required": true,
          "type": "application/json"
        }
      ]
    },
    {
      "description": "Compile a flow without running it, and return the composition it resolves to: its ports, and every step in the order they are written. Nothing is dispatched and no action is called, so this is the safe way to find out whether a flow says what you meant before its calls have real effects. A flow that will not compile comes back as an error naming the line and column of the problem.",
      "inputs": [
        {
          "description": "The text of one or more flow declarations.",
          "name": "source",
          "required": true,
          "type": "text/plain"
        }
      ],
      "name": "flow_check",
      "outputs": [
        {
          "description": "The compiled composition, as data.",
          "name": "plan",
          "required": true,
          "type": "application/json"
        }
      ]
    },
    {
      "description": "Run a flow: a composition of the actions you may call, written in the A11 Flow language, dispatched here as one step. The actions it names really run, and their intermediate values move between them without passing through you -- which is the point, and the reason to reach for a flow when the data between two tools is large or when the same shape of work repeats. What comes back is the flow's declared outputs, one object keyed by port name, so declare outputs that are small enough to read. A flow may only call actions you are allowed to call; one that names another is refused before anything runs.",
      "inputs": [
        {
          "description": "Which flow in the source to run. Defaults to the first one declared, which is the one a file is usually about.",
          "name": "flow",
          "type": "text/plain"
        },
        {
          "description": "Input ports you will fill yourself, as nodes, while the flow runs -- named here because otherwise a port you do not send a value for is closed empty. Write each one at `<this call's id>-flow#<port name>` in the session's node map (`flow_input_node_id` computes it) and close it when you are done: nothing else will, and a flow reading a port nobody closes waits. This is how a value reaches a running flow rather than being decided before it starts, and how a port that carries a real type is fed at all, since a value in `inputs` arrives as plain JSON. A caller with no node map of its own -- a model calling this as a tool -- wants `inputs`.",
          "name": "input_streams",
          "type": "application/json"
        },
        {
          "description": "Values for the flow's input ports, keyed by port name: the list of values to write to that port, or a bare value as shorthand for a list of one. How many a port takes is the flow's business, not this port's -- a port declared `stream` reads every value, an ordinary one reads the first, and a port left out here carries none.",
          "name": "inputs",
          "type": "application/json"
        },
        {
          "description": "The text of one or more flow declarations.",
          "name": "source",
          "required": true,
          "type": "text/plain"
        }
      ],
      "name": "flow_run",
      "outputs": [
        {
          "description": "The flow's outputs, keyed by port name: one value for an ordinary port, a list for a `stream` one.",
          "name": "result",
          "required": true,
          "type": "application/json"
        }
      ]
    },
    {
      "description": "Route an LLM interaction to a concrete backend chosen by the x-a11-llm-provider header.",
      "headers": [
        {
          "description": "The allowed action (tool) name patterns, comma-separated.",
          "name": "x-a11-allowed-llm-actions",
          "type": "string"
        },
        {
          "description": "Deadline for execution in milliseconds since epoch.",
          "name": "x-a11-deadline",
          "type": "string"
        },
        {
          "description": "The backend API key.",
          "name": "x-a11-llm-api-key",
          "type": "string"
        },
        {
          "description": "Which backend to route to, one of: claude, gemini, ollama.",
          "name": "x-a11-llm-provider",
          "type": "string"
        },
        {
          "description": "OpenTelemetry baggage header.",
          "name": "x-otel-baggage",
          "type": "string"
        },
        {
          "description": "OpenTelemetry traceparent header.",
          "name": "x-otel-traceparent",
          "type": "string"
        },
        {
          "description": "OpenTelemetry tracestate header.",
          "name": "x-otel-tracestate",
          "type": "string"
        }
      ],
      "inputs": [
        {
          "name": "config",
          "type": "application/json"
        },
        {
          "name": "interactions",
          "required": true,
          "type": "application/json",
          "unary": false
        },
        {
          "name": "tools",
          "type": "application/json",
          "unary": false
        }
      ],
      "name": "interact_with_llm",
      "outputs": [
        {
          "name": "event_stream",
          "type": "application/json",
          "unary": false
        },
        {
          "name": "new_interactions",
          "required": true,
          "type": "application/json",
          "unary": false
        },
        {
          "name": "text_output",
          "type": "text/plain",
          "unary": false
        },
        {
          "name": "thoughts",
          "type": "text/plain",
          "unary": false
        }
      ]
    },
    {
      "description": "List the host's available audio input devices, one AudioDeviceInfo per input, as a stream.",
      "headers": [
        {
          "description": "Absolute execution deadline: a base-10 count of milliseconds since the Unix epoch, or nanoseconds with an 'ns' suffix. The action stops gracefully once it is reached.",
          "name": "x-a11-deadline",
          "type": "string"
        }
      ],
      "name": "list_audio_inputs",
      "outputs": [
        {
          "description": "One AudioDeviceInfo per available audio input device.",
          "name": "inputs",
          "type": "application/json;type=a11.sdk.AudioDeviceInfo",
          "unary": false
        }
      ]
    },
    {
      "description": "Make one HTTP request, with every part of the response on a port of its own: the status and headers as soon as they arrive, the body as it streams, the trailer section after it, the redirects that were followed, and any responses the server pushed. A 4xx or 5xx is a response and is delivered like any other -- the action fails only when there is no response at all. Action headers that do not begin with x-a11- are sent as HTTP request headers.",
      "headers": [
        {
          "description": "Absolute execution deadline: a base-10 count of milliseconds since the Unix epoch, or nanoseconds with an 'ns' suffix. Whichever of it and options.timeout is tighter bounds the request.",
          "name": "x-a11-deadline",
          "type": "string"
        }
      ],
      "inputs": [
        {
          "description": "Request method; GET when omitted.",
          "name": "method",
          "type": "string"
        },
        {
          "description": "Request settings, all optional: max_redirects (5), timeout (seconds), request_body (\"buffer\" | \"stream\"), http_version (\"auto\" | \"2\" | \"1.1\"), accept_pushes (false), reuse_connection (true), max_body_bytes, user_agent, headers (an object, merged over the action's own headers and the way to send an x-a11- one), tls {verify_peer, ca_file, certificate_file, key_file}, and omit -- output port names to close immediately rather than write.",
          "name": "options",
          "type": "application/json"
        },
        {
          "description": "Request body, in order. Read to its end and sent with a content-length by default; with options.request_body=\"stream\" each chunk is sent as it arrives, which is what an upload of unknown length needs.",
          "name": "request_body",
          "type": "application/octet-stream",
          "unary": false
        },
        {
          "description": "Absolute http or https URL to request.",
          "name": "url",
          "required": true,
          "type": "string"
        }
      ],
      "name": "make_http_request",
      "outputs": [
        {
          "description": "Response body chunks, in order, as they arrive.",
          "name": "body",
          "type": "application/octet-stream",
          "unary": false
        },
        {
          "description": "How the exchange was carried: {url (after redirects), http_version, secure, reused}.",
          "name": "connection",
          "type": "application/json"
        },
        {
          "description": "Every response header field as a [name, value] pair, in wire order and with repeats intact.",
          "name": "fields",
          "type": "application/json",
          "unary": false
        },
        {
          "description": "Response header fields as an object, lower-cased. Repeated fields are joined with ', ' -- with '\\n' for set-cookie, whose values contain commas. Use `fields` where the exact wire form matters.",
          "name": "headers",
          "type": "application/json"
        },
        {
          "description": "One record per response the server pushed: {method, url, path, status, headers, request_headers, body}, where `body` is the id of a node the pushed body is streamed into -- attach to it to read it. Needs options.accept_pushes, and the node is reachable where the action's node map is.",
          "name": "pushes",
          "type": "application/json",
          "unary": false
        },
        {
          "description": "One {url, status, location} per redirect followed, in order.",
          "name": "redirects",
          "type": "application/json",
          "unary": false
        },
        {
          "description": "The final response's status code, written before the body so a caller can act on it while the body is still arriving.",
          "name": "status_code",
          "type": "integer"
        },
        {
          "description": "The trailer section that followed the body, as an object; empty when the peer sent none. Written only once `body` has ended.",
          "name": "trailers",
          "type": "application/json"
        }
      ]
    },
    {
      "description": "Run a shell command and stream back its output lines (stdout and stderr, interleaved). Target a shell started with shell_start via the x-a11-shell-id header to reuse its state; omit the header to run the command in a throwaway shell that is discarded afterwards. The command is terminated if it exceeds the timeout or the action's deadline.",
      "headers": [
        {
          "description": "Comma-separated regex patterns of actions the LLM may call as tools.",
          "name": "x-a11-allowed-llm-actions",
          "type": "string"
        },
        {
          "description": "Deadline for execution in milliseconds since epoch.",
          "name": "x-a11-deadline",
          "type": "string"
        },
        {
          "description": "Id of the shell to run the command in. If absent, a transient shell is started for this command and terminated when it completes.",
          "name": "x-a11-shell-id",
          "type": "string"
        },
        {
          "description": "OpenTelemetry baggage header.",
          "name": "x-otel-baggage",
          "type": "string"
        },
        {
          "description": "OpenTelemetry traceparent header.",
          "name": "x-otel-traceparent",
          "type": "string"
        },
        {
          "description": "OpenTelemetry tracestate header.",
          "name": "x-otel-tracestate",
          "type": "string"
        }
      ],
      "inputs": [
        {
          "description": "The command to execute.",
          "name": "command",
          "type": "text/plain"
        },
        {
          "description": "Execution parameters; defaults are used if omitted.",
          "name": "parameters",
          "type": "application/json"
        }
      ],
      "name": "shell_execute",
      "outputs": [
        {
          "description": "Output lines produced by the command, if any.",
          "name": "output_lines",
          "type": "text/plain",
          "unary": false
        }
      ]
    },
    {
      "description": "Terminate a shell started with shell_start, releasing its resources. Fails with NOT_FOUND if no shell with the given id is running.",
      "headers": [
        {
          "description": "Id of the shell to terminate (required).",
          "name": "x-a11-shell-id",
          "type": "string"
        }
      ],
      "name": "shell_exit"
    },
    {
      "description": "List the ids of shells currently running in the caller's scope (the current Session, or the global scope when outside one).",
      "name": "shell_list",
      "outputs": [
        {
          "description": "Id of each running shell in the caller's scope.",
          "name": "shell_ids",
          "type": "text/plain",
          "unary": false
        }
      ]
    },
    {
      "description": "Start a new persistent shell and return its id, which later shell_execute calls can target via the x-a11-shell-id header. The shell keeps its state (working directory, environment variables, shell functions) across commands until it is exited. A shell is scoped to the current Session, or globally scoped when started outside one. Each Session may keep at most 4 running shells and the global scope at most 10; starting one beyond the limit fails with RESOURCE_EXHAUSTED. Exit shells you no longer need with shell_exit.",
      "name": "shell_start",
      "outputs": [
        {
          "description": "Id of the newly started shell.",
          "name": "shell_id",
          "required": true,
          "type": "text/plain"
        }
      ]
    },
    {
      "description": "Transcribe a caller-supplied stream of AudioBuffers, emitting the same text pieces and lifecycle events as capture_transcription. Stopping is driven by closing the audio input or cancelling the action; there are no control events. Transcription is endpointed if the input stalls.",
      "headers": [
        {
          "description": "Absolute execution deadline: a base-10 count of milliseconds since the Unix epoch, or nanoseconds with an 'ns' suffix. The action stops gracefully once it is reached.",
          "name": "x-a11-deadline",
          "type": "string"
        }
      ],
      "inputs": [
        {
          "description": "Speech recognition parameters; model is required.",
          "name": "asr_options",
          "type": "application/json;type=a11.sdk.SpeechRecognizerOptions"
        },
        {
          "description": "Stream of AudioBuffers to transcribe; closing it ends the run.",
          "name": "audio",
          "required": true,
          "type": "application/x-msgpack;type=a11.sdk.AudioBuffer",
          "unary": false
        }
      ],
      "name": "transcribe_audio",
      "outputs": [
        {
          "description": "Stream of inference lifecycle events.",
          "name": "events",
          "type": "application/json;type=a11.sdk.TranscriptionEvent",
          "unary": false
        },
        {
          "description": "Recognized text pieces as utterances are decoded.",
          "name": "transcription_pieces",
          "type": "text/plain",
          "unary": false
        }
      ]
    },
    {
      "description": "Fetch a URL and hand back the body the way it is wanted: as text, as parsed JSON, as bytes, or decoded into a stream of items. A 4xx or 5xx is reported on `ok` rather than failing, so an error document can still be read. Action headers that do not begin with x-a11- are sent as HTTP request headers. Use make_http_request for the protocol itself.",
      "headers": [
        {
          "description": "Absolute execution deadline: a base-10 count of milliseconds since the Unix epoch, or nanoseconds with an 'ns' suffix. Whichever of it and options.timeout is tighter bounds the request.",
          "name": "x-a11-deadline",
          "type": "string"
        }
      ],
      "inputs": [
        {
          "description": "Request method; GET when omitted.",
          "name": "method",
          "type": "string"
        },
        {
          "description": "Request settings, all optional: max_redirects (5), timeout (seconds), request_body (\"buffer\" | \"stream\"), http_version, headers (an object), tls {verify_peer, ca_file, certificate_file, key_file}, max_body_bytes, user_agent, and omit -- output port names to close immediately rather than write.",
          "name": "options",
          "type": "application/json"
        },
        {
          "description": "Request body, in order. Read to its end and sent with a content-length by default; with options.request_body=\"stream\" each chunk is sent as it arrives, which is what an upload of unknown length needs.",
          "name": "request_body",
          "type": "application/octet-stream",
          "unary": false
        },
        {
          "description": "Absolute http or https URL to request.",
          "name": "url",
          "required": true,
          "type": "string"
        }
      ],
      "name": "web-fetch",
      "outputs": [
        {
          "description": "The body as it arrives, for a payload too large to hold.",
          "name": "body",
          "type": "application/octet-stream",
          "unary": false
        },
        {
          "description": "Response header fields as an object, lower-cased.",
          "name": "headers",
          "type": "application/json"
        },
        {
          "description": "The body decoded into values, chosen by its content type: one record per event for text/event-stream, one value per line for NDJSON, one element for each member of a top-level JSON array. Empty for anything else. Events and lines are emitted as they arrive.",
          "name": "items",
          "type": "application/json",
          "unary": false
        },
        {
          "description": "The body parsed as JSON. Closes with nothing when it is not JSON, rather than failing the fetch.",
          "name": "json",
          "type": "application/json"
        },
        {
          "description": "Whether the status is below 400.",
          "name": "ok",
          "type": "bool"
        },
        {
          "description": "The response's status code.",
          "name": "status_code",
          "type": "integer"
        },
        {
          "description": "The whole body as text.",
          "name": "text",
          "type": "string"
        }
      ]
    }
  ],
  "format": "flow.catalogue/v1",
  "types": [
    {
      "description": "A message invoking a named action with input and output ports.",
      "fields": [
        {
          "description": "Approximate in-memory size of the message in bytes.",
          "name": "approx_bytes",
          "type": "json"
        },
        {
          "description": "Byte-string header map attached to the action.",
          "name": "headers",
          "type": "json"
        },
        {
          "description": "Identifier of the action invocation.",
          "name": "id",
          "type": "json"
        },
        {
          "description": "Input ports of the action.",
          "name": "inputs",
          "type": "json"
        },
        {
          "description": "Name of the action being invoked.",
          "name": "name",
          "type": "json"
        },
        {
          "description": "Output ports of the action.",
          "name": "outputs",
          "type": "json"
        }
      ],
      "tag": "a11.ActionMessage"
    },
    {
      "description": "A unit of node data with optional metadata and ref.",
      "fields": [
        {
          "description": "Approximate in-memory size of the chunk in bytes.",
          "name": "approx_bytes",
          "type": "json"
        },
        {
          "description": "Raw payload bytes of the chunk.",
          "name": "data",
          "type": "json"
        },
        {
          "description": "Optional metadata describing the chunk.",
          "name": "metadata",
          "type": "json"
        },
        {
          "description": "Reference identifying the chunk's stored payload.",
          "name": "ref",
          "type": "json"
        }
      ],
      "tag": "a11.Chunk"
    },
    {
      "description": "Metadata describing a chunk of node data.",
      "fields": [
        {
          "description": "Approximate in-memory size of the metadata in bytes.",
          "name": "approx_bytes",
          "type": "json"
        },
        {
          "description": "Byte-string attribute map attached to the chunk.",
          "name": "attributes",
          "type": "json"
        },
        {
          "description": "MIME type describing the chunk payload.",
          "name": "mimetype",
          "type": "json"
        },
        {
          "description": "Optional timestamp associated with the chunk.",
          "name": "timestamp",
          "type": "json"
        }
      ],
      "tag": "a11.ChunkMetadata"
    },
    {
      "fields": [
        {
          "description": "The duration as a whole number of nanoseconds.",
          "name": "nanoseconds_value",
          "type": "json"
        }
      ],
      "tag": "a11.Duration"
    },
    {
      "description": "A fragment of a logical node carrying a Chunk or NodeRef.",
      "fields": [
        {
          "description": "Approximate in-memory size of the fragment in bytes.",
          "name": "approx_bytes",
          "type": "json"
        },
        {
          "description": "Whether more fragments follow for this node.",
          "name": "continued",
          "type": "json"
        },
        {
          "description": "Payload of the fragment as either a Chunk or a NodeRef.",
          "name": "data",
          "type": "json"
        },
        {
          "description": "Identifier of the logical node this fragment belongs to.",
          "name": "id",
          "type": "json"
        },
        {
          "description": "Optional sequence number of the fragment.",
          "name": "seq",
          "type": "json"
        }
      ],
      "tag": "a11.NodeFragment"
    },
    {
      "description": "Reference to a byte range of another logical node.",
      "fields": [
        {
          "description": "Approximate in-memory size of the ref in bytes.",
          "name": "approx_bytes",
          "type": "json"
        },
        {
          "description": "Identifier of the referenced node.",
          "name": "id",
          "type": "json"
        },
        {
          "description": "Optional byte length of the referenced range.",
          "name": "length",
          "type": "json"
        },
        {
          "description": "Byte offset into the referenced node.",
          "name": "offset",
          "type": "json"
        }
      ],
      "tag": "a11.NodeRef"
    },
    {
      "description": "A named input or output port of an action.",
      "fields": [
        {
          "description": "Approximate in-memory size of the port in bytes.",
          "name": "approx_bytes",
          "type": "json"
        },
        {
          "description": "Identifier of the node bound to the port.",
          "name": "id",
          "type": "json"
        },
        {
          "description": "Name of the port.",
          "name": "name",
          "type": "json"
        }
      ],
      "tag": "a11.Port"
    },
    {
      "fields": [
        {
          "description": "The canonical status code.",
          "name": "code",
          "type": "json"
        },
        {
          "description": "The structured status details, as a list.",
          "name": "details",
          "type": "json"
        },
        {
          "description": "The human-readable status message.",
          "name": "message",
          "type": "json"
        }
      ],
      "tag": "a11.Status"
    },
    {
      "fields": [
        {
          "description": "The time as nanoseconds since the Unix epoch.",
          "name": "nanoseconds_since_epoch",
          "type": "json"
        }
      ],
      "tag": "a11.Time"
    },
    {
      "description": "A wire-format message bundling node fragments and actions.",
      "fields": [
        {
          "description": "Action messages carried by the message.",
          "name": "actions",
          "type": "json"
        },
        {
          "description": "Approximate in-memory size of the message in bytes.",
          "name": "approx_bytes",
          "type": "json"
        },
        {
          "description": "Byte-string header map attached to the message.",
          "name": "headers",
          "type": "json"
        },
        {
          "description": "Node fragments carried by the message.",
          "name": "node_fragments",
          "type": "json"
        }
      ],
      "tag": "a11.WireMessage"
    },
    {
      "description": "!!! abstract \"Usage Documentation\"",
      "fields": [
        {
          "description": "Who should run the action.",
          "name": "peer",
          "type": "json"
        },
        {
          "description": "A map of header names to autofill values.",
          "name": "header_autofills",
          "type": "object"
        }
      ],
      "tag": "a11.sdk.ActionConfig"
    },
    {
      "description": "A captured block of samples stored channel-major (planar). Use `memoryview(buffer)` for a zero-copy (channels x frames) float view, or `channel(i)` for one channel.",
      "fields": [
        {
          "description": "Best-effort instant the final sample in this buffer was taken.",
          "name": "end_time",
          "type": "json"
        },
        {
          "description": "Number of channels in this buffer.",
          "name": "num_channels",
          "type": "json"
        },
        {
          "description": "Number of samples per channel in this buffer.",
          "name": "num_frames",
          "type": "json"
        },
        {
          "description": "Sample rate, in hertz, the samples were captured at.",
          "name": "sample_rate",
          "type": "json"
        },
        {
          "description": "A zero-copy read-only ``(channels, frames)`` float view.",
          "name": "samples",
          "type": "json"
        }
      ],
      "tag": "a11.sdk.AudioBuffer"
    },
    {
      "description": "A capture lifecycle or dropped-buffer notification from capture_audio.",
      "fields": [
        {
          "description": "Buffers dropped since the previous event.",
          "name": "dropped",
          "type": "json"
        },
        {
          "description": "The event kind: 'started', 'buffers_dropped' or 'stopped'.",
          "name": "kind",
          "type": "json"
        }
      ],
      "tag": "a11.sdk.AudioCaptureEvent"
    },
    {
      "description": "A command on an Action's control_events input; 'stop' finishes capture gracefully.",
      "fields": [
        {
          "description": "The command name, e.g. 'stop'.",
          "name": "command",
          "type": "json"
        }
      ],
      "tag": "a11.sdk.AudioControlEvent"
    },
    {
      "description": "How an AudioInput opens its capture stream.",
      "fields": [
        {
          "description": "Frames per PortAudio callback block.",
          "name": "block_frames",
          "type": "json"
        },
        {
          "description": "Frames per delivered subscription buffer, or 0 for the block size.",
          "name": "buffer_frames",
          "type": "json"
        },
        {
          "description": "Requested channel count, or 0 for the device's count.",
          "name": "channels",
          "type": "json"
        },
        {
          "description": "Device index to capture from, or negative for default.",
          "name": "device_index",
          "type": "json"
        },
        {
          "description": "Input device name to capture from; empty selects by index or the default input.",
          "name": "device_name",
          "type": "json"
        },
        {
          "description": "Depth of the internal callback-to-fiber ring, in blocks.",
          "name": "ring_blocks",
          "type": "json"
        },
        {
          "description": "Requested sample rate in hertz, or 0 for the default.",
          "name": "sample_rate",
          "type": "json"
        }
      ],
      "tag": "a11.sdk.AudioInputOptions"
    },
    {
      "description": "!!! abstract \"Usage Documentation\"",
      "fields": [
        {
          "description": "The completion ID of this interaction",
          "name": "id",
          "type": "string"
        },
        {
          "description": "The role of the interaction.",
          "name": "role",
          "type": "json"
        },
        {
          "description": "The millisecond-since-epoch of the interaction.",
          "name": "created_at_millis",
          "type": "integer"
        },
        {
          "description": "The ID of the previous interaction.",
          "name": "previous_interaction_id",
          "type": "string"
        },
        {
          "description": "The model that produced the interaction.",
          "name": "model",
          "type": "string"
        },
        {
          "description": "The status of the interaction.",
          "name": "status",
          "type": "json"
        },
        {
          "description": "The system instructions of the interaction.",
          "element": "json",
          "name": "system_instructions",
          "type": "list"
        },
        {
          "description": "The action configs of the interaction.",
          "name": "action_configs",
          "type": "object"
        },
        {
          "description": "The content of the interaction.",
          "element": "json",
          "name": "content",
          "type": "list"
        },
        {
          "description": "The action calls of the interaction.",
          "element": "json",
          "name": "action_calls",
          "type": "list"
        },
        {
          "description": "The inputs of the interaction.",
          "name": "action_inputs",
          "type": "object"
        },
        {
          "description": "The outputs of the interaction.",
          "name": "action_outputs",
          "type": "object"
        },
        {
          "description": "The backend-specific metadata of the interaction. For example, Anthropic messages can have `container`, `stop_reason`, etc.",
          "name": "backend_specific_metadata",
          "type": "object"
        },
        {
          "description": "The usage metadata of the interaction.",
          "name": "usage_metadata",
          "type": "a11.sdk.UsageMetadata"
        }
      ],
      "tag": "a11.sdk.Interaction"
    },
    {
      "description": "!!! abstract \"Usage Documentation\"",
      "fields": [
        {
          "description": "The protocol to use for the A11 peer.",
          "name": "protocol",
          "type": "json"
        },
        {
          "description": "The scheme to use for the A11 action party.",
          "name": "scheme",
          "type": "json"
        },
        {
          "description": "The peer's identity. For MCP, it is empty. For A11 session, it may be $sender, $receiver, or an ID of a stream that is attached to the session. For the `ws` scheme, it is empty. For `rtc`, it is the signalling identity.",
          "name": "identity",
          "type": "string"
        },
        {
          "description": "The endpoint to use for the peer.",
          "name": "endpoint",
          "type": "string"
        }
      ],
      "tag": "a11.sdk.Peer"
    },
    {
      "description": "Configuration for whisper.cpp transcription, a cheap energy VAD gate, and optional whisper.cpp Silero neural VAD.",
      "fields": [
        {
          "description": "Use flash attention when supported.",
          "name": "flash_attention",
          "type": "json"
        },
        {
          "description": "Decoder threads, or zero for the bounded default.",
          "name": "inference_threads",
          "type": "json"
        },
        {
          "description": "Optional initial decoder prompt.",
          "name": "initial_prompt",
          "type": "json"
        },
        {
          "description": "Whisper language code, or 'auto'.",
          "name": "language",
          "type": "json"
        },
        {
          "description": "Maximum utterance duration before splitting.",
          "name": "max_speech_seconds",
          "type": "json"
        },
        {
          "description": "Silence needed to endpoint speech.",
          "name": "min_silence_millis",
          "type": "json"
        },
        {
          "description": "Minimum voiced duration accepted.",
          "name": "min_speech_millis",
          "type": "json"
        },
        {
          "description": "Path to the whisper.cpp model; used by the transcription action (empty is rejected there).",
          "name": "model",
          "type": "json"
        },
        {
          "description": "Silero speech-probability threshold in (0, 1].",
          "name": "silero_threshold",
          "type": "json"
        },
        {
          "description": "Audio retained around an utterance.",
          "name": "speech_pad_millis",
          "type": "json"
        },
        {
          "description": "Duration of internally-created capture buffers.",
          "name": "subscription_buffer_millis",
          "type": "json"
        },
        {
          "description": "Translate speech to English.",
          "name": "translate",
          "type": "json"
        },
        {
          "description": "Carry decoder context between utterances.",
          "name": "use_context",
          "type": "json"
        },
        {
          "description": "Use a compiled GPU backend when available.",
          "name": "use_gpu",
          "type": "json"
        },
        {
          "description": "Path to a Silero VAD model; empty disables Silero VAD.",
          "name": "vad_model",
          "type": "json"
        },
        {
          "description": "Speech threshold relative to learned noise.",
          "name": "vad_noise_ratio",
          "type": "json"
        },
        {
          "description": "Absolute RMS speech threshold.",
          "name": "vad_threshold",
          "type": "json"
        },
        {
          "description": "RMS analysis window duration.",
          "name": "vad_window_millis",
          "type": "json"
        }
      ],
      "tag": "a11.sdk.SpeechRecognizerOptions"
    },
    {
      "description": "A capture/inference lifecycle notification from capture_transcription.",
      "fields": [
        {
          "description": "The event kind, e.g. 'inference_started'.",
          "name": "kind",
          "type": "json"
        }
      ],
      "tag": "a11.sdk.TranscriptionEvent"
    },
    {
      "description": "Provider-independent token accounting for a single interaction.",
      "fields": [
        {
          "description": "Prompt/input tokens consumed. Anthropic `input_tokens`, OpenAI `prompt_tokens`, Gemini `promptTokenCount`, Ollama `prompt_eval_count`.",
          "name": "input_tokens",
          "type": "integer"
        },
        {
          "description": "Completion/output tokens generated. Anthropic `output_tokens`, OpenAI `completion_tokens`, Gemini `candidatesTokenCount`, Ollama `eval_count`.",
          "name": "output_tokens",
          "type": "integer"
        },
        {
          "description": "Total tokens attributed to the interaction. Provider-supplied where available (OpenAI `total_tokens`, Gemini `totalTokenCount`); otherwise the sum of the input, output, and cache token counts.",
          "name": "total_tokens",
          "type": "integer"
        },
        {
          "description": "Input tokens served from a prompt cache (billed at a reduced rate). Anthropic `cache_read_input_tokens`, OpenAI `prompt_tokens_details.cached_tokens`, Gemini `cachedContentTokenCount`.",
          "name": "cached_input_tokens",
          "type": "integer"
        },
        {
          "description": "Input tokens written to a prompt cache. Currently only reported by Anthropic (`cache_creation_input_tokens`).",
          "name": "cache_write_tokens",
          "type": "integer"
        },
        {
          "description": "Output tokens spent on internal reasoning/thinking. Anthropic `output_tokens_details.thinking_tokens`, OpenAI `completion_tokens_details.reasoning_tokens`, Gemini `thoughtsTokenCount`.",
          "name": "reasoning_tokens",
          "type": "integer"
        }
      ],
      "tag": "a11.sdk.UsageMetadata"
    }
  ]
}
)catalogue";

}  // namespace a11::flow::catalogue

#endif  // A11_FLOW_CATALOGUE_DATA_H_
