A11 (C++ runtime)
Native C++ implementation of the A11 streaming action runtime
Loading...
Searching...
No Matches
catalogue_data.h
Go to the documentation of this file.
1// Copyright 2026 The A11 Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14//
15// GENERATED by scripts/generate_flow_catalogue.py. Do not edit.
16//
17// The snapshot of the world the standalone tools know with nothing
18// configured: every action the SDK registers and every type its
19// serialization registry knows. A frontend with a live registry
20// passes its own catalogue, which is merged over this.
21
22#ifndef A11_FLOW_CATALOGUE_DATA_H_
23#define A11_FLOW_CATALOGUE_DATA_H_
24
25#include <string_view>
26
27namespace a11::flow::catalogue {
28
29inline constexpr std::string_view kCatalogueSnapshot = R"catalogue(
30{
31 "actions": [
32 {
33 "description": "Describe one action this peer serves, as an a11.actions/v1 document. Fails NOT_FOUND when the name is not registered here.",
34 "inputs": [
35 {
36 "description": "Name of the action to describe.",
37 "name": "action",
38 "required": true,
39 "type": "text/plain"
40 }
41 ],
42 "name": "__get_schema__",
43 "outputs": [
44 {
45 "description": "The a11.actions/v1 document for that one action.",
46 "name": "schema",
47 "required": true,
48 "type": "application/json"
49 }
50 ]
51 },
52 {
53 "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'.",
54 "inputs": [
55 {
56 "description": "Action selection and port visibility filters. Absent means all non-reserved actions.",
57 "name": "request",
58 "type": "application/json"
59 }
60 ],
61 "name": "__list_actions__",
62 "outputs": [
63 {
64 "description": "The a11.actions/v1 document, whole.",
65 "name": "actions",
66 "required": true,
67 "type": "application/json"
68 }
69 ]
70 },
71 {
72 "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`.",
73 "inputs": [
74 {
75 "description": "Ping input value",
76 "name": "input",
77 "type": "text/plain",
78 "unary": false
79 }
80 ],
81 "name": "__ping",
82 "outputs": [
83 {
84 "description": "Pong response value",
85 "name": "output",
86 "type": "text/plain",
87 "unary": false
88 }
89 ]
90 },
91 {
92 "description": "Capture audio from an input device and stream fixed-size AudioBuffers until a stop control event arrives or the action is cancelled.",
93 "headers": [
94 {
95 "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.",
96 "name": "x-a11-deadline",
97 "type": "string"
98 }
99 ],
100 "inputs": [
101 {
102 "description": "Control commands; a stop command finishes capture gracefully.",
103 "name": "control_events",
104 "required": true,
105 "type": "application/json;type=a11.sdk.AudioControlEvent",
106 "unary": false
107 },
108 {
109 "description": "Capture parameters: device selection, sample rate, channels and the delivered buffer size.",
110 "name": "options",
111 "required": true,
112 "type": "application/json;type=a11.sdk.AudioInputOptions"
113 }
114 ],
115 "name": "capture_audio",
116 "outputs": [
117 {
118 "description": "Stream of captured AudioBuffers.",
119 "name": "audio",
120 "type": "application/x-msgpack;type=a11.sdk.AudioBuffer",
121 "unary": false
122 },
123 {
124 "description": "Stream of capture lifecycle and dropped-buffer events.",
125 "name": "events",
126 "type": "application/json;type=a11.sdk.AudioCaptureEvent",
127 "unary": false
128 }
129 ]
130 },
131 {
132 "description": "Capture audio and stream recognized text pieces until a stop control event arrives or the action is cancelled.",
133 "headers": [
134 {
135 "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.",
136 "name": "x-a11-deadline",
137 "type": "string"
138 }
139 ],
140 "inputs": [
141 {
142 "description": "Speech recognition parameters; model is required.",
143 "name": "asr_options",
144 "type": "application/json;type=a11.sdk.SpeechRecognizerOptions"
145 },
146 {
147 "description": "Optional capture parameters; the default input is used if omitted.",
148 "name": "capture_options",
149 "type": "application/json;type=a11.sdk.AudioInputOptions"
150 },
151 {
152 "description": "Control commands; a stop command finishes transcription gracefully.",
153 "name": "control_events",
154 "required": true,
155 "type": "application/json;type=a11.sdk.AudioControlEvent",
156 "unary": false
157 }
158 ],
159 "name": "capture_transcription",
160 "outputs": [
161 {
162 "description": "Stream of capture and inference lifecycle events.",
163 "name": "events",
164 "type": "application/json;type=a11.sdk.TranscriptionEvent",
165 "unary": false
166 },
167 {
168 "description": "Recognized text pieces as utterances are decoded.",
169 "name": "transcription_pieces",
170 "type": "text/plain",
171 "unary": false
172 }
173 ]
174 },
175 {
176 "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.",
177 "name": "flow_actions",
178 "outputs": [
179 {
180 "description": "One entry per composable action: its name, description, and its input and output ports.",
181 "name": "actions",
182 "required": true,
183 "type": "application/json"
184 }
185 ]
186 },
187 {
188 "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.",
189 "inputs": [
190 {
191 "description": "The text of one or more flow declarations.",
192 "name": "source",
193 "required": true,
194 "type": "text/plain"
195 }
196 ],
197 "name": "flow_check",
198 "outputs": [
199 {
200 "description": "The compiled composition, as data.",
201 "name": "plan",
202 "required": true,
203 "type": "application/json"
204 }
205 ]
206 },
207 {
208 "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.",
209 "inputs": [
210 {
211 "description": "Which flow in the source to run. Defaults to the first one declared, which is the one a file is usually about.",
212 "name": "flow",
213 "type": "text/plain"
214 },
215 {
216 "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`.",
217 "name": "input_streams",
218 "type": "application/json"
219 },
220 {
221 "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.",
222 "name": "inputs",
223 "type": "application/json"
224 },
225 {
226 "description": "The text of one or more flow declarations.",
227 "name": "source",
228 "required": true,
229 "type": "text/plain"
230 }
231 ],
232 "name": "flow_run",
233 "outputs": [
234 {
235 "description": "The flow's outputs, keyed by port name: one value for an ordinary port, a list for a `stream` one.",
236 "name": "result",
237 "required": true,
238 "type": "application/json"
239 }
240 ]
241 },
242 {
243 "description": "Route an LLM interaction to a concrete backend chosen by the x-a11-llm-provider header.",
244 "headers": [
245 {
246 "description": "The allowed action (tool) name patterns, comma-separated.",
247 "name": "x-a11-allowed-llm-actions",
248 "type": "string"
249 },
250 {
251 "description": "Signed A11 subject and caller delegation chain.",
252 "name": "x-a11-auth",
253 "type": "string"
254 },
255 {
256 "description": "Deadline for execution in milliseconds since epoch.",
257 "name": "x-a11-deadline",
258 "type": "string"
259 },
260 {
261 "description": "The backend API key.",
262 "name": "x-a11-llm-api-key",
263 "type": "string"
264 },
265 {
266 "description": "The backend model.",
267 "name": "x-a11-llm-model",
268 "type": "string"
269 },
270 {
271 "description": "Which backend to route to, one of: claude, claude_code, gemini, gpt, openai, codex, ollama, vllm.",
272 "name": "x-a11-llm-provider",
273 "type": "string"
274 },
275 {
276 "description": "OpenTelemetry baggage header.",
277 "name": "x-otel-baggage",
278 "type": "string"
279 },
280 {
281 "description": "OpenTelemetry traceparent header.",
282 "name": "x-otel-traceparent",
283 "type": "string"
284 },
285 {
286 "description": "OpenTelemetry tracestate header.",
287 "name": "x-otel-tracestate",
288 "type": "string"
289 }
290 ],
291 "inputs": [
292 {
293 "name": "config",
294 "type": "application/json"
295 },
296 {
297 "name": "interactions",
298 "required": true,
299 "type": "application/json",
300 "unary": false
301 },
302 {
303 "name": "tools",
304 "type": "application/json",
305 "unary": false
306 }
307 ],
308 "name": "interact_with_llm",
309 "outputs": [
310 {
311 "name": "event_stream",
312 "type": "application/json",
313 "unary": false
314 },
315 {
316 "name": "new_interactions",
317 "required": true,
318 "type": "application/json",
319 "unary": false
320 },
321 {
322 "name": "text_output",
323 "type": "text/plain",
324 "unary": false
325 },
326 {
327 "name": "thoughts",
328 "type": "text/plain",
329 "unary": false
330 }
331 ]
332 },
333 {
334 "description": "List the host's available audio input devices, one AudioDeviceInfo per input, as a stream.",
335 "headers": [
336 {
337 "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.",
338 "name": "x-a11-deadline",
339 "type": "string"
340 }
341 ],
342 "name": "list_audio_inputs",
343 "outputs": [
344 {
345 "description": "One AudioDeviceInfo per available audio input device.",
346 "name": "inputs",
347 "type": "application/json;type=a11.sdk.AudioDeviceInfo",
348 "unary": false
349 }
350 ]
351 },
352 {
353 "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.",
354 "headers": [
355 {
356 "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.",
357 "name": "x-a11-deadline",
358 "type": "string"
359 }
360 ],
361 "inputs": [
362 {
363 "description": "Request method; GET when omitted.",
364 "name": "method",
365 "type": "text/plain"
366 },
367 {
368 "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.",
369 "name": "options",
370 "type": "application/json"
371 },
372 {
373 "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.",
374 "name": "request_body",
375 "type": "application/octet-stream",
376 "unary": false
377 },
378 {
379 "description": "Absolute http or https URL to request.",
380 "name": "url",
381 "required": true,
382 "type": "text/plain"
383 }
384 ],
385 "name": "make_http_request",
386 "outputs": [
387 {
388 "description": "Response body chunks, in order, as they arrive.",
389 "name": "body",
390 "type": "application/octet-stream",
391 "unary": false
392 },
393 {
394 "description": "How the exchange was carried: {url (after redirects), http_version, secure, reused}.",
395 "name": "connection",
396 "type": "application/json"
397 },
398 {
399 "description": "Every response header field as a [name, value] pair, in wire order and with repeats intact.",
400 "name": "fields",
401 "type": "application/json",
402 "unary": false
403 },
404 {
405 "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.",
406 "name": "headers",
407 "type": "application/json"
408 },
409 {
410 "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.",
411 "name": "pushes",
412 "type": "application/json",
413 "unary": false
414 },
415 {
416 "description": "One {url, status, location} per redirect followed, in order.",
417 "name": "redirects",
418 "type": "application/json",
419 "unary": false
420 },
421 {
422 "description": "The final response's status code, written before the body so a caller can act on it while the body is still arriving.",
423 "name": "status_code",
424 "type": "integer"
425 },
426 {
427 "description": "The trailer section that followed the body, as an object; empty when the peer sent none. Written only once `body` has ended.",
428 "name": "trailers",
429 "type": "application/json"
430 }
431 ]
432 },
433 {
434 "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, the action's deadline, 1000 output lines, or 128 KiB of output. Truncated output ends with a descriptive marker. When web-fetch is also offered, use it for HTTP retrieval and keep shell_execute for work that requires shell syntax, process state, or an installed command.",
435 "headers": [
436 {
437 "description": "Comma-separated regex patterns of actions the LLM may call as tools.",
438 "name": "x-a11-allowed-llm-actions",
439 "type": "string"
440 },
441 {
442 "description": "Signed A11 subject and caller delegation chain.",
443 "name": "x-a11-auth",
444 "type": "string"
445 },
446 {
447 "description": "Deadline for execution in milliseconds since epoch.",
448 "name": "x-a11-deadline",
449 "type": "string"
450 },
451 {
452 "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.",
453 "name": "x-a11-shell-id",
454 "type": "string"
455 },
456 {
457 "description": "OpenTelemetry baggage header.",
458 "name": "x-otel-baggage",
459 "type": "string"
460 },
461 {
462 "description": "OpenTelemetry traceparent header.",
463 "name": "x-otel-traceparent",
464 "type": "string"
465 },
466 {
467 "description": "OpenTelemetry tracestate header.",
468 "name": "x-otel-tracestate",
469 "type": "string"
470 }
471 ],
472 "inputs": [
473 {
474 "description": "The command to execute. When web-fetch is also offered, do not use curl, wget, or a language HTTP client here.",
475 "name": "command",
476 "type": "text/plain"
477 },
478 {
479 "description": "Execution parameters; defaults are used if omitted.",
480 "name": "parameters",
481 "type": "application/json"
482 }
483 ],
484 "name": "shell_execute",
485 "outputs": [
486 {
487 "description": "Output lines produced by the command, bounded by the requested limits and hard caps of 1000 lines and 128 KiB. A final marker says when output was truncated.",
488 "name": "output_lines",
489 "type": "text/plain",
490 "unary": false
491 }
492 ]
493 },
494 {
495 "description": "Terminate a shell started with shell_start, releasing its resources. Fails with NOT_FOUND if no shell with the given id is running.",
496 "headers": [
497 {
498 "description": "Id of the shell to terminate (required).",
499 "name": "x-a11-shell-id",
500 "type": "string"
501 }
502 ],
503 "name": "shell_exit"
504 },
505 {
506 "description": "List the ids of shells currently running in the caller's scope (the current Session, or the global scope when outside one).",
507 "name": "shell_list",
508 "outputs": [
509 {
510 "description": "Id of each running shell in the caller's scope.",
511 "name": "shell_ids",
512 "type": "text/plain",
513 "unary": false
514 }
515 ]
516 },
517 {
518 "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.",
519 "name": "shell_start",
520 "outputs": [
521 {
522 "description": "Id of the newly started shell.",
523 "name": "shell_id",
524 "required": true,
525 "type": "text/plain"
526 }
527 ]
528 },
529 {
530 "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.",
531 "headers": [
532 {
533 "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.",
534 "name": "x-a11-deadline",
535 "type": "string"
536 }
537 ],
538 "inputs": [
539 {
540 "description": "Speech recognition parameters; model is required.",
541 "name": "asr_options",
542 "type": "application/json;type=a11.sdk.SpeechRecognizerOptions"
543 },
544 {
545 "description": "Stream of AudioBuffers to transcribe; closing it ends the run.",
546 "name": "audio",
547 "required": true,
548 "type": "application/x-msgpack;type=a11.sdk.AudioBuffer",
549 "unary": false
550 }
551 ],
552 "name": "transcribe_audio",
553 "outputs": [
554 {
555 "description": "Stream of inference lifecycle events.",
556 "name": "events",
557 "type": "application/json;type=a11.sdk.TranscriptionEvent",
558 "unary": false
559 },
560 {
561 "description": "Recognized text pieces as utterances are decoded.",
562 "name": "transcription_pieces",
563 "type": "text/plain",
564 "unary": false
565 }
566 ]
567 },
568 {
569 "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.",
570 "headers": [
571 {
572 "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.",
573 "name": "x-a11-deadline",
574 "type": "string"
575 }
576 ],
577 "inputs": [
578 {
579 "description": "Request method; GET when omitted.",
580 "name": "method",
581 "type": "text/plain"
582 },
583 {
584 "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.",
585 "name": "options",
586 "type": "application/json"
587 },
588 {
589 "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.",
590 "name": "request_body",
591 "type": "application/octet-stream",
592 "unary": false
593 },
594 {
595 "description": "Absolute http or https URL to request.",
596 "name": "url",
597 "required": true,
598 "type": "text/plain"
599 }
600 ],
601 "name": "web-fetch",
602 "outputs": [
603 {
604 "description": "The body as it arrives, for a payload too large to hold.",
605 "name": "body",
606 "type": "application/octet-stream",
607 "unary": false
608 },
609 {
610 "description": "Response header fields as an object, lower-cased.",
611 "name": "headers",
612 "type": "application/json"
613 },
614 {
615 "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.",
616 "name": "items",
617 "type": "application/json",
618 "unary": false
619 },
620 {
621 "description": "The body parsed as JSON. Closes with nothing when it is not JSON, rather than failing the fetch.",
622 "name": "json",
623 "type": "application/json"
624 },
625 {
626 "description": "Whether the status is below 400.",
627 "name": "ok",
628 "type": "bool"
629 },
630 {
631 "description": "The response's status code.",
632 "name": "status_code",
633 "type": "integer"
634 },
635 {
636 "description": "The whole body as text.",
637 "name": "text",
638 "type": "text/plain"
639 }
640 ]
641 },
642 {
643 "description": "Render an HTTP(S) page with the platform WebKit engine and return the post-script HTML and rendered page text. Set options.include_image for a bounded PNG snapshot. In Flow, omit large representations that are not needed and filter or truncate `text` before routing it to a flow output. Use web-fetch when raw HTTP content is sufficient.",
644 "headers": [
645 {
646 "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.",
647 "name": "x-a11-deadline",
648 "type": "string"
649 }
650 ],
651 "inputs": [
652 {
653 "description": "Rendering settings: headers, user_agent, timeout, max_redirects, max_body_bytes, include_image, image_screen_heights (1 through 10), max_image_bytes, and omit.",
654 "name": "options",
655 "type": "application/json"
656 },
657 {
658 "description": "Absolute HTTP(S) URL to render.",
659 "name": "url",
660 "required": true,
661 "type": "text/plain"
662 }
663 ],
664 "name": "web-render",
665 "outputs": [
666 {
667 "description": "Final top-frame URL.",
668 "name": "final_url",
669 "type": "text/plain"
670 },
671 {
672 "description": "Final top-frame response headers, lower-cased.",
673 "name": "headers",
674 "type": "application/json"
675 },
676 {
677 "description": "Serialized post-render document HTML.",
678 "name": "html",
679 "type": "text/plain"
680 },
681 {
682 "description": "Optional rendered PNG, with pixel dimensions in chunk attributes.",
683 "name": "image",
684 "type": "image/png"
685 },
686 {
687 "description": "Whether the HTTP status is below 400.",
688 "name": "ok",
689 "type": "bool"
690 },
691 {
692 "description": "Final top-frame HTTP status code.",
693 "name": "status_code",
694 "type": "integer"
695 },
696 {
697 "description": "Visible page text extracted by the browser DOM.",
698 "name": "text",
699 "type": "text/plain"
700 }
701 ]
702 }
703 ],
704 "format": "flow.catalogue/v1",
705 "types": [
706 {
707 "description": "A message invoking a named action with input and output ports.",
708 "fields": [
709 {
710 "description": "Approximate in-memory size of the message in bytes.",
711 "name": "approx_bytes",
712 "type": "json"
713 },
714 {
715 "description": "Byte-string header map attached to the action.",
716 "name": "headers",
717 "type": "json"
718 },
719 {
720 "description": "Identifier of the action invocation.",
721 "name": "id",
722 "type": "json"
723 },
724 {
725 "description": "Input ports of the action.",
726 "name": "inputs",
727 "type": "json"
728 },
729 {
730 "description": "Name of the action being invoked.",
731 "name": "name",
732 "type": "json"
733 },
734 {
735 "description": "Output ports of the action.",
736 "name": "outputs",
737 "type": "json"
738 }
739 ],
740 "tag": "a11.ActionMessage"
741 },
742 {
743 "description": "A unit of node data with optional metadata and ref.",
744 "fields": [
745 {
746 "description": "Approximate in-memory size of the chunk in bytes.",
747 "name": "approx_bytes",
748 "type": "json"
749 },
750 {
751 "description": "Raw payload bytes of the chunk.",
752 "name": "data",
753 "type": "json"
754 },
755 {
756 "description": "Optional metadata describing the chunk.",
757 "name": "metadata",
758 "type": "json"
759 },
760 {
761 "description": "Reference identifying the chunk's stored payload.",
762 "name": "ref",
763 "type": "json"
764 }
765 ],
766 "tag": "a11.Chunk"
767 },
768 {
769 "description": "Metadata describing a chunk of node data.",
770 "fields": [
771 {
772 "description": "Approximate in-memory size of the metadata in bytes.",
773 "name": "approx_bytes",
774 "type": "json"
775 },
776 {
777 "description": "Byte-string attribute map attached to the chunk.",
778 "name": "attributes",
779 "type": "json"
780 },
781 {
782 "description": "MIME type describing the chunk payload.",
783 "name": "mimetype",
784 "type": "json"
785 },
786 {
787 "description": "Optional timestamp associated with the chunk.",
788 "name": "timestamp",
789 "type": "json"
790 }
791 ],
792 "tag": "a11.ChunkMetadata"
793 },
794 {
795 "fields": [
796 {
797 "description": "The duration as a whole number of nanoseconds.",
798 "name": "nanoseconds_value",
799 "type": "json"
800 }
801 ],
802 "tag": "a11.Duration"
803 },
804 {
805 "description": "A fragment of a logical node carrying a Chunk or NodeRef.",
806 "fields": [
807 {
808 "description": "Approximate in-memory size of the fragment in bytes.",
809 "name": "approx_bytes",
810 "type": "json"
811 },
812 {
813 "description": "Whether more fragments follow for this node.",
814 "name": "continued",
815 "type": "json"
816 },
817 {
818 "description": "Payload of the fragment as either a Chunk or a NodeRef.",
819 "name": "data",
820 "type": "json"
821 },
822 {
823 "description": "Identifier of the logical node this fragment belongs to.",
824 "name": "id",
825 "type": "json"
826 },
827 {
828 "description": "Optional sequence number of the fragment.",
829 "name": "seq",
830 "type": "json"
831 }
832 ],
833 "tag": "a11.NodeFragment"
834 },
835 {
836 "description": "Reference to a byte range of another logical node.",
837 "fields": [
838 {
839 "description": "Approximate in-memory size of the ref in bytes.",
840 "name": "approx_bytes",
841 "type": "json"
842 },
843 {
844 "description": "Identifier of the referenced node.",
845 "name": "id",
846 "type": "json"
847 },
848 {
849 "description": "Optional byte length of the referenced range.",
850 "name": "length",
851 "type": "json"
852 },
853 {
854 "description": "Byte offset into the referenced node.",
855 "name": "offset",
856 "type": "json"
857 }
858 ],
859 "tag": "a11.NodeRef"
860 },
861 {
862 "description": "A named input or output port of an action.",
863 "fields": [
864 {
865 "description": "Approximate in-memory size of the port in bytes.",
866 "name": "approx_bytes",
867 "type": "json"
868 },
869 {
870 "description": "Identifier of the node bound to the port.",
871 "name": "id",
872 "type": "json"
873 },
874 {
875 "description": "Name of the port.",
876 "name": "name",
877 "type": "json"
878 }
879 ],
880 "tag": "a11.Port"
881 },
882 {
883 "fields": [
884 {
885 "description": "The canonical status code.",
886 "name": "code",
887 "type": "json"
888 },
889 {
890 "description": "The structured status details, as a list.",
891 "name": "details",
892 "type": "json"
893 },
894 {
895 "description": "The human-readable status message.",
896 "name": "message",
897 "type": "json"
898 }
899 ],
900 "tag": "a11.Status"
901 },
902 {
903 "fields": [
904 {
905 "description": "The time as nanoseconds since the Unix epoch.",
906 "name": "nanoseconds_since_epoch",
907 "type": "json"
908 }
909 ],
910 "tag": "a11.Time"
911 },
912 {
913 "description": "A wire-format message bundling node fragments and actions.",
914 "fields": [
915 {
916 "description": "Action messages carried by the message.",
917 "name": "actions",
918 "type": "json"
919 },
920 {
921 "description": "Approximate in-memory size of the message in bytes.",
922 "name": "approx_bytes",
923 "type": "json"
924 },
925 {
926 "description": "Byte-string header map attached to the message.",
927 "name": "headers",
928 "type": "json"
929 },
930 {
931 "description": "Node fragments carried by the message.",
932 "name": "node_fragments",
933 "type": "json"
934 }
935 ],
936 "tag": "a11.WireMessage"
937 },
938 {
939 "description": "!!! abstract \"Usage Documentation\"",
940 "fields": [
941 {
942 "description": "Who should run the action.",
943 "name": "peer",
944 "type": "json"
945 },
946 {
947 "description": "A map of header names to autofill values.",
948 "name": "header_autofills",
949 "type": "object"
950 }
951 ],
952 "tag": "a11.sdk.ActionConfig"
953 },
954 {
955 "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.",
956 "fields": [
957 {
958 "description": "Best-effort instant the final sample in this buffer was taken.",
959 "name": "end_time",
960 "type": "json"
961 },
962 {
963 "description": "Number of channels in this buffer.",
964 "name": "num_channels",
965 "type": "json"
966 },
967 {
968 "description": "Number of samples per channel in this buffer.",
969 "name": "num_frames",
970 "type": "json"
971 },
972 {
973 "description": "Sample rate, in hertz, the samples were captured at.",
974 "name": "sample_rate",
975 "type": "json"
976 },
977 {
978 "description": "A zero-copy read-only ``(channels, frames)`` float view.",
979 "name": "samples",
980 "type": "json"
981 }
982 ],
983 "tag": "a11.sdk.AudioBuffer"
984 },
985 {
986 "description": "A capture lifecycle or dropped-buffer notification from capture_audio.",
987 "fields": [
988 {
989 "description": "Buffers dropped since the previous event.",
990 "name": "dropped",
991 "type": "json"
992 },
993 {
994 "description": "The event kind: 'started', 'buffers_dropped' or 'stopped'.",
995 "name": "kind",
996 "type": "json"
997 }
998 ],
999 "tag": "a11.sdk.AudioCaptureEvent"
1000 },
1001 {
1002 "description": "A command on an Action's control_events input; 'stop' finishes capture gracefully.",
1003 "fields": [
1004 {
1005 "description": "The command name, e.g. 'stop'.",
1006 "name": "command",
1007 "type": "json"
1008 }
1009 ],
1010 "tag": "a11.sdk.AudioControlEvent"
1011 },
1012 {
1013 "description": "How an AudioInput opens its capture stream.",
1014 "fields": [
1015 {
1016 "description": "Frames per PortAudio callback block.",
1017 "name": "block_frames",
1018 "type": "json"
1019 },
1020 {
1021 "description": "Frames per delivered subscription buffer, or 0 for the block size.",
1022 "name": "buffer_frames",
1023 "type": "json"
1024 },
1025 {
1026 "description": "Requested channel count, or 0 for the device's count.",
1027 "name": "channels",
1028 "type": "json"
1029 },
1030 {
1031 "description": "Device index to capture from, or negative for default.",
1032 "name": "device_index",
1033 "type": "json"
1034 },
1035 {
1036 "description": "Input device name to capture from; empty selects by index or the default input.",
1037 "name": "device_name",
1038 "type": "json"
1039 },
1040 {
1041 "description": "Depth of the internal callback-to-fiber ring, in blocks.",
1042 "name": "ring_blocks",
1043 "type": "json"
1044 },
1045 {
1046 "description": "Requested sample rate in hertz, or 0 for the default.",
1047 "name": "sample_rate",
1048 "type": "json"
1049 }
1050 ],
1051 "tag": "a11.sdk.AudioInputOptions"
1052 },
1053 {
1054 "description": "Parameters for one Claude Code session.",
1055 "fields": [
1056 {
1057 "description": "Claude Code's own tools. `false` offers the model A11 actions alone; `true` offers the full Claude Code toolset, which reads and writes the filesystem and runs commands; a list offers the named subset. Enabling a tool also permits it \u2014 a session driven through A11 answers no permission prompt \u2014 so name only what the turn should be able to do, and use `disallowed_tools` to carve back a command shape.",
1058 "name": "builtin_tools",
1059 "type": "json"
1060 },
1061 {
1062 "description": "Claude Code's permission mode, such as `plan` for a read-only session or `acceptEdits` for unattended file edits.",
1063 "name": "permission_mode",
1064 "type": "json"
1065 },
1066 {
1067 "description": "Tool names or scoped rules the model may never use, such as `Bash(rm *)`. A scoped rule is refused in every permission mode.",
1068 "element": "string",
1069 "name": "disallowed_tools",
1070 "type": "list"
1071 },
1072 {
1073 "description": "Maximum agent turns before the session stops.",
1074 "name": "max_turns",
1075 "type": "integer"
1076 },
1077 {
1078 "description": "Stop the session once the estimated cost reaches this.",
1079 "name": "max_budget_usd",
1080 "type": "number"
1081 },
1082 {
1083 "description": "Working directory for the session's tools.",
1084 "name": "cwd",
1085 "type": "string"
1086 },
1087 {
1088 "description": "Extra directories the session's tools may reach.",
1089 "element": "string",
1090 "name": "add_dirs",
1091 "type": "list"
1092 },
1093 {
1094 "description": "Which on-disk Claude Code settings to load. Omitted loads none, which keeps a session's behaviour independent of the host's configuration; include `project` to load CLAUDE.md.",
1095 "element": "json",
1096 "name": "setting_sources",
1097 "type": "list"
1098 },
1099 {
1100 "description": "Skills to make available, or `all`.",
1101 "name": "skills",
1102 "type": "json"
1103 },
1104 {
1105 "description": "Enable adaptive thinking so the model decides when and how much internal reasoning to spend.",
1106 "name": "thinking",
1107 "type": "bool"
1108 },
1109 {
1110 "description": "Stream summaries of the model's reasoning as it thinks.",
1111 "name": "thinking_summaries",
1112 "type": "bool"
1113 },
1114 {
1115 "description": "Overall thinking depth and token spend.",
1116 "name": "effort",
1117 "type": "json"
1118 },
1119 {
1120 "description": "Model to fall back to when the primary is unavailable.",
1121 "name": "fallback_model",
1122 "type": "string"
1123 },
1124 {
1125 "description": "Claude Code session id to continue. Also read from the newest assistant interaction's metadata when unset.",
1126 "name": "resume",
1127 "type": "string"
1128 },
1129 {
1130 "description": "Branch a resumed session instead of extending it.",
1131 "name": "fork_session",
1132 "type": "bool"
1133 },
1134 {
1135 "description": "Path to the `claude` executable.",
1136 "name": "cli_path",
1137 "type": "string"
1138 }
1139 ],
1140 "tag": "a11.sdk.InteractWithClaudeCodeConfig"
1141 },
1142 {
1143 "description": "Parameters for creating a Claude message.",
1144 "fields": [
1145 {
1146 "description": "Maximum number of tokens to generate.",
1147 "name": "max_tokens",
1148 "type": "integer"
1149 },
1150 {
1151 "description": "Enable adaptive thinking so the model decides when and how much internal reasoning to spend. Unsupported alongside tools and on Haiku models.",
1152 "name": "thinking",
1153 "type": "bool"
1154 },
1155 {
1156 "description": "Stream summaries of the model's reasoning as it thinks.",
1157 "name": "thinking_summaries",
1158 "type": "bool"
1159 },
1160 {
1161 "description": "Overall thinking depth and token spend. Only honoured on models that support the effort parameter.",
1162 "name": "effort",
1163 "type": "json"
1164 },
1165 {
1166 "description": "Enable the built-in web search tool.",
1167 "name": "web_search",
1168 "type": "bool"
1169 },
1170 {
1171 "description": "Enable the built-in web fetch tool.",
1172 "name": "web_fetch",
1173 "type": "bool"
1174 },
1175 {
1176 "description": "Enable the built-in code execution tool.",
1177 "name": "code_execution",
1178 "type": "bool"
1179 }
1180 ],
1181 "tag": "a11.sdk.InteractWithClaudeConfig"
1182 },
1183 {
1184 "description": "Options for a `codex exec --json` session.",
1185 "fields": [
1186 {
1187 "description": "Working directory exposed as Codex's primary workspace.",
1188 "name": "cwd",
1189 "type": "string"
1190 },
1191 {
1192 "description": "Additional writable directories.",
1193 "element": "string",
1194 "name": "add_dirs",
1195 "type": "list"
1196 },
1197 {
1198 "description": "Sandbox policy for Codex's built-in tools.",
1199 "name": "sandbox",
1200 "type": "json"
1201 },
1202 {
1203 "description": "Codex configuration profile.",
1204 "name": "profile",
1205 "type": "string"
1206 },
1207 {
1208 "description": "Model reasoning effort.",
1209 "name": "reasoning_effort",
1210 "type": "json"
1211 },
1212 {
1213 "description": "JSON Schema for the final response.",
1214 "name": "output_schema",
1215 "type": "object"
1216 },
1217 {
1218 "description": "Codex thread id to resume. The latest Codex interaction's metadata supplies it when omitted.",
1219 "name": "resume",
1220 "type": "string"
1221 },
1222 {
1223 "description": "Do not persist the Codex thread on disk.",
1224 "name": "ephemeral",
1225 "type": "bool"
1226 },
1227 {
1228 "description": "Allow Codex to run outside a Git repository.",
1229 "name": "skip_git_repo_check",
1230 "type": "bool"
1231 },
1232 {
1233 "description": "Ignore the user's config.toml while retaining authentication.",
1234 "name": "ignore_user_config",
1235 "type": "bool"
1236 },
1237 {
1238 "description": "Do not load user or project execpolicy rule files.",
1239 "name": "ignore_rules",
1240 "type": "bool"
1241 },
1242 {
1243 "description": "Additional Codex `-c key=value` settings.",
1244 "name": "config_overrides",
1245 "type": "object"
1246 },
1247 {
1248 "description": "Path to the Codex CLI executable.",
1249 "name": "cli_path",
1250 "type": "string"
1251 }
1252 ],
1253 "tag": "a11.sdk.InteractWithCodexConfig"
1254 },
1255 {
1256 "description": "Parameters for starting a Gemini interaction.",
1257 "fields": [
1258 {
1259 "description": "Maximum number of tokens to generate per step.",
1260 "name": "max_output_tokens",
1261 "type": "integer"
1262 },
1263 {
1264 "description": "How to carry conversation state across turns: resume by `previous_interaction_id` (`last-id`), replay the whole transcript every turn (`full-history`), or try the former and fall back to the latter (`auto`).",
1265 "name": "state_mode",
1266 "type": "json"
1267 },
1268 {
1269 "description": "How much internal reasoning the model may spend.",
1270 "name": "thinking_level",
1271 "type": "json"
1272 },
1273 {
1274 "description": "Stream summaries of the model's reasoning as it thinks.",
1275 "name": "thinking_summaries",
1276 "type": "bool"
1277 },
1278 {
1279 "description": "Enable the built-in Google Search grounding tool.",
1280 "name": "google_search",
1281 "type": "bool"
1282 },
1283 {
1284 "description": "Enable the built-in code execution tool.",
1285 "name": "code_execution",
1286 "type": "bool"
1287 },
1288 {
1289 "description": "Enable the built-in URL context tool.",
1290 "name": "url_context",
1291 "type": "bool"
1292 }
1293 ],
1294 "tag": "a11.sdk.InteractWithGeminiConfig"
1295 },
1296 {
1297 "description": "Parameters for one OpenAI chat completion.",
1298 "fields": [
1299 {
1300 "description": "Maximum generated tokens, including reasoning tokens.",
1301 "name": "max_completion_tokens",
1302 "type": "integer"
1303 },
1304 {
1305 "description": "Sampling temperature.",
1306 "name": "temperature",
1307 "type": "number"
1308 },
1309 {
1310 "description": "Nucleus-sampling probability.",
1311 "name": "top_p",
1312 "type": "number"
1313 },
1314 {
1315 "description": "Penalty applied when a token already appeared.",
1316 "name": "presence_penalty",
1317 "type": "number"
1318 },
1319 {
1320 "description": "Penalty scaled by a token's prior frequency.",
1321 "name": "frequency_penalty",
1322 "type": "number"
1323 },
1324 {
1325 "description": "Best-effort sampling seed.",
1326 "name": "seed",
1327 "type": "integer"
1328 },
1329 {
1330 "description": "Strings that end generation.",
1331 "element": "string",
1332 "name": "stop",
1333 "type": "list"
1334 },
1335 {
1336 "description": "Reasoning effort for models that support it.",
1337 "name": "reasoning_effort",
1338 "type": "json"
1339 },
1340 {
1341 "description": "Constrain the response to a JSON object.",
1342 "name": "json_output",
1343 "type": "bool"
1344 },
1345 {
1346 "description": "JSON Schema for a structured response.",
1347 "name": "json_schema",
1348 "type": "object"
1349 },
1350 {
1351 "description": "OpenAI processing tier.",
1352 "name": "service_tier",
1353 "type": "json"
1354 },
1355 {
1356 "description": "Additional OpenAI request fields.",
1357 "name": "extra_body",
1358 "type": "object"
1359 }
1360 ],
1361 "tag": "a11.sdk.InteractWithGptConfig"
1362 },
1363 {
1364 "description": "Parameters for a single Ollama chat turn.",
1365 "fields": [
1366 {
1367 "description": "Maximum number of tokens to generate. -1 lets the model run until it stops on its own (Ollama `options.num_predict`).",
1368 "name": "num_predict",
1369 "type": "integer"
1370 },
1371 {
1372 "description": "Enable the model's thinking, optionally at a given effort level. Only honoured by models that support it.",
1373 "name": "think",
1374 "type": "json"
1375 },
1376 {
1377 "description": "Sampling temperature (Ollama `options.temperature`).",
1378 "name": "temperature",
1379 "type": "number"
1380 },
1381 {
1382 "description": "Nucleus-sampling probability (Ollama `options.top_p`).",
1383 "name": "top_p",
1384 "type": "number"
1385 },
1386 {
1387 "description": "Top-k sampling cutoff (Ollama `options.top_k`).",
1388 "name": "top_k",
1389 "type": "integer"
1390 },
1391 {
1392 "description": "Sampling seed for reproducible output (Ollama `options.seed`).",
1393 "name": "seed",
1394 "type": "integer"
1395 },
1396 {
1397 "description": "How long to keep the model loaded in memory after the request (e.g. `5m`, or seconds as a number).",
1398 "name": "keep_alive",
1399 "type": "json"
1400 },
1401 {
1402 "description": "Constrain the model to emit valid JSON (Ollama `format=\"json\"`).",
1403 "name": "json_output",
1404 "type": "bool"
1405 }
1406 ],
1407 "tag": "a11.sdk.InteractWithOllamaConfig"
1408 },
1409 {
1410 "description": "Parameters for a single vLLM chat completion.",
1411 "fields": [
1412 {
1413 "description": "Maximum number of tokens to generate. -1 lets the model run until it stops on its own or reaches the deployment's context limit.",
1414 "name": "max_tokens",
1415 "type": "integer"
1416 },
1417 {
1418 "description": "Sampling temperature.",
1419 "name": "temperature",
1420 "type": "number"
1421 },
1422 {
1423 "description": "Nucleus-sampling probability.",
1424 "name": "top_p",
1425 "type": "number"
1426 },
1427 {
1428 "description": "Penalty applied to tokens that already appeared.",
1429 "name": "presence_penalty",
1430 "type": "number"
1431 },
1432 {
1433 "description": "Penalty scaled by how often a token already appeared.",
1434 "name": "frequency_penalty",
1435 "type": "number"
1436 },
1437 {
1438 "description": "Sampling seed for reproducible output.",
1439 "name": "seed",
1440 "type": "integer"
1441 },
1442 {
1443 "description": "Strings that end the generation when produced.",
1444 "element": "string",
1445 "name": "stop",
1446 "type": "list"
1447 },
1448 {
1449 "description": "Top-k sampling cutoff (vLLM `extra_body.top_k`).",
1450 "name": "top_k",
1451 "type": "integer"
1452 },
1453 {
1454 "description": "Minimum token probability, relative to the most likely token (vLLM `extra_body.min_p`).",
1455 "name": "min_p",
1456 "type": "number"
1457 },
1458 {
1459 "description": "Penalty applied to tokens from the prompt and the output so far (vLLM `extra_body.repetition_penalty`).",
1460 "name": "repetition_penalty",
1461 "type": "number"
1462 },
1463 {
1464 "description": "Constrain the model to emit valid JSON (`response_format={\"type\": \"json_object\"}`).",
1465 "name": "json_output",
1466 "type": "bool"
1467 },
1468 {
1469 "description": "A JSON Schema the output has to satisfy, enforced by vLLM's structured decoding. Takes precedence over `json_output`.",
1470 "name": "json_schema",
1471 "type": "object"
1472 },
1473 {
1474 "description": "Values passed to the model's chat template, such as `{\"enable_thinking\": true}` on models whose template gates reasoning (vLLM `extra_body.chat_template_kwargs`).",
1475 "name": "chat_template_kwargs",
1476 "type": "object"
1477 },
1478 {
1479 "description": "Additional request fields, merged into the request body last. Covers deployment-specific sampling parameters this config does not name.",
1480 "name": "extra_body",
1481 "type": "object"
1482 }
1483 ],
1484 "tag": "a11.sdk.InteractWithVllmConfig"
1485 },
1486 {
1487 "description": "!!! abstract \"Usage Documentation\"",
1488 "fields": [
1489 {
1490 "description": "The completion ID of this interaction",
1491 "name": "id",
1492 "type": "string"
1493 },
1494 {
1495 "description": "The role of the interaction.",
1496 "name": "role",
1497 "type": "json"
1498 },
1499 {
1500 "description": "The millisecond-since-epoch of the interaction.",
1501 "name": "created_at_millis",
1502 "type": "integer"
1503 },
1504 {
1505 "description": "The ID of the previous interaction.",
1506 "name": "previous_interaction_id",
1507 "type": "string"
1508 },
1509 {
1510 "description": "The model that produced the interaction.",
1511 "name": "model",
1512 "type": "string"
1513 },
1514 {
1515 "description": "The status of the interaction.",
1516 "name": "status",
1517 "type": "json"
1518 },
1519 {
1520 "description": "The system instructions of the interaction.",
1521 "element": "json",
1522 "name": "system_instructions",
1523 "type": "list"
1524 },
1525 {
1526 "description": "The action configs of the interaction.",
1527 "name": "action_configs",
1528 "type": "object"
1529 },
1530 {
1531 "description": "The content of the interaction.",
1532 "element": "json",
1533 "name": "content",
1534 "type": "list"
1535 },
1536 {
1537 "description": "The action calls of the interaction.",
1538 "element": "json",
1539 "name": "action_calls",
1540 "type": "list"
1541 },
1542 {
1543 "description": "The inputs of the interaction.",
1544 "name": "action_inputs",
1545 "type": "object"
1546 },
1547 {
1548 "description": "The outputs of the interaction.",
1549 "name": "action_outputs",
1550 "type": "object"
1551 },
1552 {
1553 "description": "The backend-specific metadata of the interaction. For example, Anthropic messages can have `container`, `stop_reason`, etc.",
1554 "name": "backend_specific_metadata",
1555 "type": "object"
1556 },
1557 {
1558 "description": "The usage metadata of the interaction.",
1559 "name": "usage_metadata",
1560 "type": "a11.sdk.UsageMetadata"
1561 }
1562 ],
1563 "tag": "a11.sdk.Interaction"
1564 },
1565 {
1566 "description": "!!! abstract \"Usage Documentation\"",
1567 "fields": [
1568 {
1569 "description": "The protocol to use for the A11 peer.",
1570 "name": "protocol",
1571 "type": "json"
1572 },
1573 {
1574 "description": "The scheme to use for the A11 action party.",
1575 "name": "scheme",
1576 "type": "json"
1577 },
1578 {
1579 "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.",
1580 "name": "identity",
1581 "type": "string"
1582 },
1583 {
1584 "description": "The endpoint to use for the peer.",
1585 "name": "endpoint",
1586 "type": "string"
1587 }
1588 ],
1589 "tag": "a11.sdk.Peer"
1590 },
1591 {
1592 "description": "Configuration for whisper.cpp transcription, a cheap energy VAD gate, and optional whisper.cpp Silero neural VAD.",
1593 "fields": [
1594 {
1595 "description": "Use flash attention when supported.",
1596 "name": "flash_attention",
1597 "type": "json"
1598 },
1599 {
1600 "description": "Decoder threads, or zero for the bounded default.",
1601 "name": "inference_threads",
1602 "type": "json"
1603 },
1604 {
1605 "description": "Optional initial decoder prompt.",
1606 "name": "initial_prompt",
1607 "type": "json"
1608 },
1609 {
1610 "description": "Whisper language code, or 'auto'.",
1611 "name": "language",
1612 "type": "json"
1613 },
1614 {
1615 "description": "Maximum utterance duration before splitting.",
1616 "name": "max_speech_seconds",
1617 "type": "json"
1618 },
1619 {
1620 "description": "Silence needed to endpoint speech.",
1621 "name": "min_silence_millis",
1622 "type": "json"
1623 },
1624 {
1625 "description": "Minimum voiced duration accepted.",
1626 "name": "min_speech_millis",
1627 "type": "json"
1628 },
1629 {
1630 "description": "Path to the whisper.cpp model; used by the transcription action (empty is rejected there).",
1631 "name": "model",
1632 "type": "json"
1633 },
1634 {
1635 "description": "Silero speech-probability threshold in (0, 1].",
1636 "name": "silero_threshold",
1637 "type": "json"
1638 },
1639 {
1640 "description": "Audio retained around an utterance.",
1641 "name": "speech_pad_millis",
1642 "type": "json"
1643 },
1644 {
1645 "description": "Duration of internally-created capture buffers.",
1646 "name": "subscription_buffer_millis",
1647 "type": "json"
1648 },
1649 {
1650 "description": "Translate speech to English.",
1651 "name": "translate",
1652 "type": "json"
1653 },
1654 {
1655 "description": "Carry decoder context between utterances.",
1656 "name": "use_context",
1657 "type": "json"
1658 },
1659 {
1660 "description": "Use a compiled GPU backend when available.",
1661 "name": "use_gpu",
1662 "type": "json"
1663 },
1664 {
1665 "description": "Path to a Silero VAD model; empty disables Silero VAD.",
1666 "name": "vad_model",
1667 "type": "json"
1668 },
1669 {
1670 "description": "Speech threshold relative to learned noise.",
1671 "name": "vad_noise_ratio",
1672 "type": "json"
1673 },
1674 {
1675 "description": "Absolute RMS speech threshold.",
1676 "name": "vad_threshold",
1677 "type": "json"
1678 },
1679 {
1680 "description": "RMS analysis window duration.",
1681 "name": "vad_window_millis",
1682 "type": "json"
1683 }
1684 ],
1685 "tag": "a11.sdk.SpeechRecognizerOptions"
1686 },
1687 {
1688 "description": "A capture/inference lifecycle notification from capture_transcription.",
1689 "fields": [
1690 {
1691 "description": "The event kind, e.g. 'inference_started'.",
1692 "name": "kind",
1693 "type": "json"
1694 }
1695 ],
1696 "tag": "a11.sdk.TranscriptionEvent"
1697 },
1698 {
1699 "description": "Provider-independent token accounting for a single interaction.",
1700 "fields": [
1701 {
1702 "description": "Prompt/input tokens consumed. Anthropic `input_tokens`, OpenAI `prompt_tokens`, Gemini `promptTokenCount`, Ollama `prompt_eval_count`.",
1703 "name": "input_tokens",
1704 "type": "integer"
1705 },
1706 {
1707 "description": "Completion/output tokens generated. Anthropic `output_tokens`, OpenAI `completion_tokens`, Gemini `candidatesTokenCount`, Ollama `eval_count`.",
1708 "name": "output_tokens",
1709 "type": "integer"
1710 },
1711 {
1712 "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.",
1713 "name": "total_tokens",
1714 "type": "integer"
1715 },
1716 {
1717 "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`.",
1718 "name": "cached_input_tokens",
1719 "type": "integer"
1720 },
1721 {
1722 "description": "Input tokens written to a prompt cache. Currently only reported by Anthropic (`cache_creation_input_tokens`).",
1723 "name": "cache_write_tokens",
1724 "type": "integer"
1725 },
1726 {
1727 "description": "Output tokens spent on internal reasoning/thinking. Anthropic `output_tokens_details.thinking_tokens`, OpenAI `completion_tokens_details.reasoning_tokens`, Gemini `thoughtsTokenCount`.",
1728 "name": "reasoning_tokens",
1729 "type": "integer"
1730 }
1731 ],
1732 "tag": "a11.sdk.UsageMetadata"
1733 }
1734 ]
1735}
1736)catalogue";
1737
1738} // namespace a11::flow::catalogue
1739
1740#endif // A11_FLOW_CATALOGUE_DATA_H_
What the language knows about the world it runs in.
Definition catalogue.cc:29
constexpr std::string_view kCatalogueSnapshot
Definition catalogue_data.h:29