{ "format": "wai.ops/1", "toolchain": "0.6.0", "envelope": "envelope/1", "exit_codes": [ { "exit": 0, "meaning": "done; every check held" }, { "exit": 1, "meaning": "ran, and a check failed" }, { "exit": 2, "meaning": "usage error or invalid input" }, { "exit": 3, "meaning": "authentication or permission" }, { "exit": 4, "meaning": "confirmation required; nothing changed" }, { "exit": 5, "meaning": "not found (file, target, room, operation)" }, { "exit": 6, "meaning": "target unavailable; safe to retry" }, { "exit": 7, "meaning": "internal error" } ], "agent_flags": [ { "flag": "--json", "summary": "one JSON envelope on stdout: {\"wai\": \"envelope/1\", \"op\", \"ok\", \"data\" | \"error\"}", "aliases": [] }, { "flag": "--dry-run", "summary": "write nothing and send nothing; say what would be done (an operation that only reads ignores it)", "aliases": [] }, { "flag": "--yes", "summary": "confirm a change that waits for confirmation; off a terminal, without it, exit 4", "aliases": [ { "flag": "--confirm", "deprecated": { "since": "0.3.0", "use_instead": "--yes" } } ] }, { "flag": "--no-input", "summary": "never ask: a change that waits for confirmation exits 4 unless --yes is given", "aliases": [] }, { "flag": "--fields", "summary": " with --json: data keeps only these members (each a member or a dotted path; of each item when data is a list); the envelope's own members (wai, op, ok, error, exit, dry_run, plan) are always kept", "aliases": [] } ], "operations": [ { "id": "toolchain.test", "summary": "WAI's four steps (name, dispatch, rebuild, receipt) on a picture made here, its receipt checked offline", "cli": "wai hello", "aliases": [], "usage": [ "wai hello [] WAI's four steps (name, dispatch, rebuild, receipt) on a sample, written to (wai-hello)" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "Where the object and its receipts are written (wai-hello).", "x-cli": { "positional": true } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai toolchain test", "mcp": null, "c": "wai_toolchain_test", "rust": "wai::toolchain::test", "sdk": "wai.toolchain.test" } }, { "id": "project.create", "summary": "A new project from one of the examples, written into a new or empty directory; --list names the templates", "cli": "wai create", "aliases": [], "usage": [ "wai create --template [--key ] | create --list a new project from one of the examples, with", " its receipt in /.wai/receipts/" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "A directory that does not exist or is empty.", "x-cli": { "positional": true } }, "template": { "type": "string", "description": "The template, one of `wai create --list`.", "x-cli": { "flag": "--template" } }, "list": { "type": "boolean", "description": "List the templates instead.", "x-cli": { "flag": "--list" } }, "key": { "type": "string", "description": "The key that signs the operation's receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.", "x-cli": { "flag": "--key" } } }, "required": [], "additionalProperties": false }, "output": { "type": "array", "items": { "type": "object", "required": [ "template", "title", "files" ] } }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": null, "names": { "cli": "wai project create", "mcp": null, "c": "wai_project_create", "rust": "wai::project::create", "sdk": "wai.project.create" } }, { "id": "project.lock", "summary": "wai.lock written beside wai.json: everything whose bytes change a result pinned by digest, the same bytes on any host; --check refuses a stale or edited lock", "cli": "wai lock", "aliases": [], "usage": [ "wai lock [] [--check] [--root ] [--packer BIN] [--key ] write wai.lock and its receipt; --check holds it", " to what it pins, exit 1 when it is stale or was edited" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "The project's directory (.).", "x-cli": { "positional": true } }, "check": { "type": "boolean", "description": "Write nothing: hold the file to what it pins.", "x-cli": { "flag": "--check" } }, "root": { "type": "string", "format": "path", "description": "The wai/ directory of a checkout of the standard, for the corpora conform.suites names (found from the current directory otherwise).", "x-cli": { "flag": "--root" } }, "packer": { "type": "string", "format": "path", "description": "wai-pack, for the policy package.policy names ($WAI_PACK_BIN, beside wai, or on PATH otherwise).", "x-cli": { "flag": "--packer" } }, "key": { "type": "string", "description": "The key that signs the operation's receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.", "x-cli": { "flag": "--key" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "file", "sha256" ], "description": "The lock file and its SHA-256; written, whether it changed, what it pins and what it leaves absent, and its receipt (its file, receipt hash, signer and the project's digest); with --check, each check as wai check reports it" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": true, "needs": null, "names": { "cli": "wai project lock", "mcp": "project_lock", "c": "wai_project_lock", "rust": "wai::project::lock", "sdk": "wai.project.lock" } }, { "id": "project.check", "summary": "A project validated without building it: wai.json, each file it states, its app, and wai.lock against what it pins, every finding reported; what could not run says not checked", "cli": "wai check", "aliases": [], "usage": [ "wai check [] [--root ] [--packer BIN] exit 1 when a check failed, 5 when none failed and one or more could not run" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "The project's directory (.).", "x-cli": { "positional": true } }, "root": { "type": "string", "format": "path", "description": "The wai/ directory of a checkout of the standard, for the corpora conform.suites names (found from the current directory otherwise).", "x-cli": { "flag": "--root" } }, "packer": { "type": "string", "format": "path", "description": "wai-pack, for the policy package.policy names ($WAI_PACK_BIN, beside wai, or on PATH otherwise).", "x-cli": { "flag": "--packer" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "project", "digest", "lock", "checks", "held", "failed", "not_checked" ], "description": "The project file and its canonical digest, the lock and its digest, and each check with what it found: held, failed or not checked, with a stable code, a hint for what did not hold or did not run, and fix, the command that fixes it where one does (run wai lock for a lock that is stale, was edited or is not there), null otherwise" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai project check", "mcp": "project_check", "c": "wai_project_check", "rust": "wai::project::check", "sdk": "wai.project.check" } }, { "id": "project.build", "summary": "dist/ written for a project whose checks hold: the same bytes from the same project and lock, with a build record naming the digests of wai.json and wai.lock", "cli": "wai build", "aliases": [], "usage": [ "wai build [] [--key ] [--packer BIN] [--root ] write dist/ and its receipt; refused, nothing", " written, when a check fails or the lock is stale" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "The project's directory (.).", "x-cli": { "positional": true } }, "key": { "type": "string", "format": "path", "description": "The seed file (64 hexadecimal digits) that signs a package's receipt, for a project with package, and the build's receipt (a key made for this run otherwise).", "x-cli": { "flag": "--key" } }, "packer": { "type": "string", "format": "path", "description": "wai-pack, for a project with package ($WAI_PACK_BIN, beside wai, or on PATH otherwise).", "x-cli": { "flag": "--packer" } }, "root": { "type": "string", "format": "path", "description": "The wai/ directory of a checkout of the standard, for the corpora conform.suites names (found from the current directory otherwise).", "x-cli": { "flag": "--root" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "dir", "record", "record_only", "project_sha256", "lock_sha256", "files", "left_out", "not_checked" ], "description": "The tree written and its build record with the record's SHA-256, the digests of the project file and the lock it names, its files (record_only when the project states nothing for wai to build), what the site holds that it left out and why, what could not be checked, and the build's receipt; refused, the checks as wai check reports them, each with its fix" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": true, "needs": null, "names": { "cli": "wai project build", "mcp": "project_build", "c": "wai_project_build", "rust": "wai::project::build", "sdk": "wai.project.build" } }, { "id": "dev.start", "summary": "A relay, a room service and the room page on one origin on this machine, for development; --check starts, checks every piece and stops", "cli": "wai dev", "aliases": [], "usage": [ "wai dev [--port P] [--dir D] [--site DIR] [--watch FILE [--watch-ms MS]] [--call] [--remote]", " [--show [--audience N]] [--messaging] [--e2ee] [--publishers N] [--check] [--for S] [--web DIR]", " [--relay BIN] [--room BIN] [--control] [--impair loss=P%,rtt=MS,jitter=MS]", " --port P the origin's port on 127.0.0.1 (8080; 0 picks a free one)", " --dir D keys, configuration and logs (.wai/dev)", " --site DIR your page: DIR is served at /, the room client beside it at /room/", " --publishers N places in the room (4)", " --watch FILE a watch room: everyone in it watches FILE together (.wav, .webm, .mp4,", " .ogg, .mp3); --watch-ms MS its duration, read from a WAV file's header", " --call the room is a call: /room/call.html places one, rings, answers", " --remote the room is one host's shared screen; prints the host's invitation", " --show the room is a show: hosts on camera, an audience that votes in polls", " the room's clock opens and signs (co-performance); --audience N each", " viewer's inputs to a poll (1)", " --messaging a conversation beside the room, at /msg-api/: /room/messages.html", " --e2ee every room end-to-end encrypted", " --check start, check every piece through the origin, report, stop", " --for S stop after S seconds", " --web DIR the room client's files (beside this binary: ../share/wai/web; $WAI_WEB)", " --relay BIN wai-relay (beside this binary, then $PATH; $WAI_RELAY_BIN)", " --room BIN wai-room (beside this binary, then $PATH; $WAI_ROOM_BIN)", " --control JSON control lines on standard input, answered by synthetic participants", " (wai-room participant): join, leave, session, test, load, describe, stop;", " the end of standard input stops the stack. Implies --json", " --impair SPEC the relay also listens for QUIC on loopback, and the synthetic participants", " enter over it through a path that drops (loss=P%), delays (rtt=MS) and", " spreads (jitter=MS) their datagrams; a page's WebSocket is not impaired", " wai-relay and wai-room must be of this wai's toolchain: a stale stack is refused, nothing", " started. While it runs, the stack is recorded in DIR/stack.json (wai room test reads it).", " WAI Studio is served at /_wai/ when its files are found ($WAI_STUDIO, or share/wai/studio", " beside this binary).", " A wai.json in the current directory (`wai create` writes one) gives the defaults; a flag", " wins over it. Ctrl-C stops everything. With --json and without --check, the first line", " is {\"ready\": true, ...}." ], "placement": "local", "effect": "runs", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "dev", "stability": "stable", "input": { "type": "object", "properties": { "port": { "type": "integer", "description": "The origin's port on 127.0.0.1 (8080; 0 picks a free one).", "x-cli": { "flag": "--port" } }, "dir": { "type": "string", "format": "path", "description": "Keys, configuration and logs (.wai/dev).", "x-cli": { "flag": "--dir" } }, "site": { "type": "string", "format": "path", "description": "A directory served at /.", "x-cli": { "flag": "--site" } }, "watch": { "type": "string", "format": "path", "description": "A file everyone in a watch room watches together.", "x-cli": { "flag": "--watch" } }, "watch_ms": { "type": "integer", "description": "The watch file's duration in milliseconds.", "x-cli": { "flag": "--watch-ms" } }, "call": { "type": "boolean", "description": "The room is a call.", "x-cli": { "flag": "--call" } }, "remote": { "type": "boolean", "description": "The room is one host's shared screen.", "x-cli": { "flag": "--remote" } }, "show": { "type": "boolean", "description": "The room is a show: hosts on camera, an audience that votes in polls.", "x-cli": { "flag": "--show" } }, "audience": { "type": "integer", "description": "With --show, each viewer's inputs to a poll (1).", "x-cli": { "flag": "--audience" } }, "messaging": { "type": "boolean", "description": "A conversation beside the room.", "x-cli": { "flag": "--messaging" } }, "e2ee": { "type": "boolean", "description": "Every room end-to-end encrypted.", "x-cli": { "flag": "--e2ee" } }, "publishers": { "type": "integer", "description": "Places in the room (4).", "x-cli": { "flag": "--publishers" } }, "check": { "type": "boolean", "description": "Start, check every piece, report and stop.", "x-cli": { "flag": "--check" } }, "for_s": { "type": "integer", "description": "Stop after this many seconds.", "x-cli": { "flag": "--for" } }, "web": { "type": "string", "format": "path", "description": "The room client's files.", "x-cli": { "flag": "--web" } }, "relay": { "type": "string", "format": "path", "description": "The relay's binary.", "x-cli": { "flag": "--relay" } }, "room": { "type": "string", "format": "path", "description": "The room service's binary.", "x-cli": { "flag": "--room" } }, "control": { "type": "boolean", "description": "Control lines on standard input, answered by synthetic participants; implies --json.", "x-cli": { "flag": "--control" } }, "impair": { "type": "string", "description": "The synthetic participants over QUIC through an impaired path: loss=P%,rtt=MS,jitter=MS.", "x-cli": { "flag": "--impair" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "ready", "seconds", "steps", "checks", "origin" ] }, "stream": { "type": "object", "required": [ "ready" ], "properties": { "ready": { "type": "boolean" }, "origin": { "type": "string" } } }, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai dev start", "mcp": "dev_start", "c": "wai_dev_start", "rust": "wai::dev::start", "sdk": "wai.dev.start" } }, { "id": "receipt.verify", "summary": "Every record under each path checked offline, each by the kind it is: receipt indexes and their receipts, delivery receipts, claims, room sessions, audit bundles, sealed playlists, operation receipts and origin claims, conformance results, fleet report bundles and envelopes", "cli": "wai verify", "aliases": [], "usage": [ "wai verify ... [--conformant [--root ]] [--owner --channel ...] every record under each", " path, checked offline by the kind it is, read from its name or, for a JSON record, from what it holds: receipt", " indexes (*.wai.receipts), delivery receipts and claims (by their kind), live-room sessions, stream audit bundles", " (for the owner --owner or WAI_AUDIT_OWNER names, serving each --channel), WAI media playlists with their manifest", " receipt (mr/.json beside them), the operation receipts (*.wai-receipt.json) and origin claims", " (*.wai-origin.json) the toolchain's writes leave, conformance results (*.wai-conform.json), fleet report bundles", " (*.wai-fleet.json) and envelopes' pins (*.wai); a file named that is none of these is refused (exit 2): a file an", " operation receipt names that has changed, or a receipt of another project, is refused; --conformant admits a", " result only for a run that passed against this checkout's corpus, and gives each area the results' suites are in a", " verdict" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "paths": { "type": "array", "items": { "type": "string" }, "description": "Files or directories holding records: receipt indexes, delivery receipts, claims, room sessions, audit bundles, sealed playlists, operation receipts, origin claims, conformance results, fleet report bundles or envelopes.", "x-cli": { "positional": true } }, "conformant": { "type": "boolean", "description": "Admit each conformance result only when its run passed, against the corpus of a checkout.", "x-cli": { "flag": "--conformant" } }, "root": { "type": "string", "format": "path", "description": "With --conformant, the wai/ directory of the checkout whose corpus a result names.", "x-cli": { "flag": "--root" } }, "owner": { "type": "string", "description": "For an audit bundle: the owner's key, 64 hexadecimal digits (WAI_AUDIT_OWNER otherwise).", "x-cli": { "flag": "--owner" } }, "channel": { "type": "array", "items": { "type": "string" }, "description": "For an audit bundle: a channel its owner serves; repeated.", "x-cli": { "flag": "--channel" } } }, "required": [ "paths" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai receipt verify", "mcp": "receipt_verify", "c": "wai_receipt_verify", "rust": "wai::receipt::verify", "sdk": "wai.receipt.verify" } }, { "id": "receipt.create", "summary": "A signed receipt for files made outside the toolchain, as its own writes leave one: their lineage from the project and each file they were made from to each of them, which wai verify reads", "cli": "wai receipt create", "aliases": [], "usage": [ "wai receipt create ... [--from ]... [--key ] a receipt for the files named: its lineage is the", " project (where it runs in one), each --from file read, then each file named, in order, every step its content hash;", " kept beside the last file named, or in the project's .wai/receipts/ for files inside a project" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "files": { "type": "array", "items": { "type": "string" }, "description": "The files the receipt is for, in order; the last is the one it is about.", "x-cli": { "positional": true } }, "from": { "type": "array", "items": { "type": "string" }, "description": "A file they were made from; repeated, in order.", "x-cli": { "flag": "--from" } }, "key": { "type": "string", "description": "The key that signs the receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.", "x-cli": { "flag": "--key" } } }, "required": [ "files" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": true, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai receipt create", "mcp": null, "c": "wai_receipt_create", "rust": "wai::receipt::create", "sdk": "wai.receipt.create" } }, { "id": "envelope.inspect", "summary": "What an envelope holds and whether this build decodes it: media, intent, pin, capability, fallback, the dispatch verdict and the conformance checks", "cli": "wai inspect", "aliases": [], "usage": [ "wai inspect what a WAI1 or WAI2 envelope holds, and the verdict of SPEC §4's dispatch here" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "path": { "type": "string", "format": "path", "description": "A .wai envelope.", "x-cli": { "positional": true } } }, "required": [ "path" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai envelope inspect", "mcp": "envelope_inspect", "c": "wai_envelope_inspect", "rust": "wai::envelope::inspect", "sdk": "wai.envelope.inspect" } }, { "id": "envelope.wrap", "summary": "Carry a registered capability's bytes in an envelope, byte for byte, under SPEC's intent, role and candidate rules", "cli": "wai wrap", "aliases": [], "usage": [ "wai wrap [-o out.wai] [--fallback ] [--intent ]", " [--companion ]... [--key ] WAI2: companions bound to the payload; the envelope's receipt beside", " it, or in the project's .wai/receipts/" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "capability": { "type": "string", "description": "A registered capability (`wai capabilities`).", "x-cli": { "positional": true } }, "payload": { "type": "string", "format": "path", "description": "The bytes to carry.", "x-cli": { "positional": true } }, "out": { "type": "string", "format": "path", "description": "The envelope (out.wai).", "x-cli": { "flag": "-o" } }, "fallback": { "type": "string", "description": "A WAI1 fallback capability.", "x-cli": { "flag": "--fallback" } }, "intent": { "type": "string", "description": "The envelope's intent (replicate where SPEC §7 allows it).", "x-cli": { "flag": "--intent" } }, "companion": { "type": "array", "items": { "type": "string" }, "description": "A companion capability and its payload, bound to the payload.", "x-cli": { "flag": "--companion" } }, "key": { "type": "string", "description": "The key that signs the operation's receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.", "x-cli": { "flag": "--key" } } }, "required": [ "capability", "payload" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": null, "names": { "cli": "wai envelope wrap", "mcp": "envelope_wrap", "c": "wai_envelope_wrap", "rust": "wai::envelope::wrap", "sdk": "wai.envelope.wrap" } }, { "id": "envelope.unwrap", "summary": "An envelope's capability and its checks, and with -o its payload or one component, exactly as wrapped", "cli": "wai unwrap", "aliases": [], "usage": [ "wai unwrap [-o payload] [--component ] [--key ] extract any registered capability's bytes; with -o,", " the payload's receipt" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "path": { "type": "string", "format": "path", "description": "A .wai envelope.", "x-cli": { "positional": true } }, "out": { "type": "string", "format": "path", "description": "Where the payload is written.", "x-cli": { "flag": "-o" } }, "component": { "type": "integer", "description": "A WAI2 component's index.", "x-cli": { "flag": "--component" } }, "key": { "type": "string", "description": "The key that signs the operation's receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.", "x-cli": { "flag": "--key" } } }, "required": [ "path" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": null, "names": { "cli": "wai envelope unwrap", "mcp": null, "c": "wai_envelope_unwrap", "rust": "wai::envelope::unwrap", "sdk": "wai.envelope.unwrap" } }, { "id": "media.encode", "summary": "Encode a file with a codec this build holds, in an envelope; AVC and HEVC through the device's own encoders, with a signed record", "cli": "wai encode", "aliases": [], "usage": [ "wai encode [-o out.wai] [-q quality] codecs: png jpeg avif jxl jxl-lossless opus flac av1 av1-lossless zstd xz", " a build with `floor` alone encodes png and zstd; the others need `codecs`", " image codecs: .rgb (with .meta holding 'H W') or a PNG/JPEG file; audio: .f32 (raw mono float32)", " with .meta holding the sample rate; video: packed RGB frames with .meta 'N H W fps_num fps_den';", " text codecs: any file", "wai encode avc|hevc [-o out.wai] [--encoder auto|platform|va|gpu-driver|software] [--library ]", " [--device ] [--hardware yes|no] [--kbps ] [--size WxH] [--idr-every |", " --idr-plan ] [--es ] [--record --key ] [--meter [--rounds ]]", " (a build with `platform_encode`)" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "codec": { "type": "string", "description": "png, jpeg, avif, jxl, jxl-lossless, opus, flac, av1, av1-lossless, zstd, xz; or avc, hevc.", "x-cli": { "positional": true } }, "input": { "type": "string", "format": "path", "description": "The file to encode.", "x-cli": { "positional": true } }, "out": { "type": "string", "format": "path", "description": "The envelope (out.wai).", "x-cli": { "flag": "-o" } }, "quality": { "type": "integer", "description": "Quality, 1 to 100 (75).", "x-cli": { "flag": "-q" } } }, "required": [ "codec", "input" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "any": [ "floor", "codecs", "platform_encode" ] }, "names": { "cli": "wai media encode", "mcp": null, "c": "wai_media_encode", "rust": "wai::media::encode", "sdk": "wai.media.encode" } }, { "id": "media.decode", "summary": "Decode an envelope through SPEC §4's dispatch to raw samples, with a .meta file beside them", "cli": "wai decode", "aliases": [], "usage": [ "wai decode -o [--key ] a build with `floor` decodes png, flac and zstd; `codecs` the rest;", " the samples' receipt beside them, or in the project's .wai/receipts/" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "path": { "type": "string", "format": "path", "description": "A .wai envelope.", "x-cli": { "positional": true } }, "out": { "type": "string", "format": "path", "description": "The decoded samples.", "x-cli": { "flag": "-o" } }, "key": { "type": "string", "description": "The key that signs the operation's receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.", "x-cli": { "flag": "--key" } } }, "required": [ "path", "out" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "any": [ "floor", "codecs" ] }, "names": { "cli": "wai media decode", "mcp": null, "c": "wai_media_decode", "rust": "wai::media::decode", "sdk": "wai.media.decode" } }, { "id": "media.generate", "summary": "Make a wai.generate.spectral picture natively and print its SHA-256, or write its instruction object", "cli": "wai generate", "aliases": [], "usage": [ "wai generate --model (--prompt --seed --steps | --instr ) --size WxH -o [--key ]", " make a wai.generate.spectral picture (RGB8) and print its SHA-256, with its receipt and its origin claim", " (extensions/synthesis.md §3.5); --sizes WxH,... --write-instr writes the instruction object of form v0", " (SPEC §5)" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "model": { "type": "string", "format": "path", "description": "The model file.", "x-cli": { "flag": "--model" } }, "prompt": { "type": "string", "description": "The prompt.", "x-cli": { "flag": "--prompt" } }, "seed": { "type": "integer", "description": "The seed.", "x-cli": { "flag": "--seed" } }, "steps": { "type": "integer", "description": "The steps.", "x-cli": { "flag": "--steps" } }, "instr": { "type": "string", "format": "path", "description": "An instruction object of form v0.", "x-cli": { "flag": "--instr" } }, "size": { "type": "string", "description": "WxH.", "x-cli": { "flag": "--size" } }, "out": { "type": "string", "format": "path", "description": "The picture, RGB8.", "x-cli": { "flag": "-o" } }, "key": { "type": "string", "description": "The key that signs the receipt and the origin claim: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.", "x-cli": { "flag": "--key" } } }, "required": [ "model" ], "additionalProperties": false }, "output": { "type": "object", "description": "The picture's or instruction object's digests, as `wai generate --json` prints them, with its receipt and the picture's origin claim (null where the build writes none)" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "generate" ] }, "names": { "cli": "wai media generate", "mcp": null, "c": "wai_media_generate", "rust": "wai::media::generate", "sdk": "wai.media.generate" } }, { "id": "media.inspect", "summary": "What a file is, from its bytes alone: the formats they fit with the bytes that say so, its tracks, its protection, and measures where no format is recognised", "cli": "wai identify", "aliases": [], "usage": [ "wai identify [--json] any file, not only an envelope (extensions/media-identify.md); unknown stays unknown" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "path": { "type": "string", "format": "path", "description": "Any file.", "x-cli": { "positional": true } } }, "required": [ "path" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "format", "size", "verdict", "candidates", "probes_accepted", "embedded", "embedded_capped", "measures" ], "description": "The formats the bytes fit, each with the bytes that say so and how far they were followed; what a probe accepted; signatures found inside; and measures that hold whatever the bytes are" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "identify" ] }, "names": { "cli": "wai media inspect", "mcp": "media_inspect", "c": "wai_media_inspect", "rust": "wai::media::inspect", "sdk": "wai.media.inspect" } }, { "id": "media.upscale", "summary": "Upscale a PNG exactly, by an integer network under a pinned prior, with a signed record a verifier recomputes", "cli": "wai upscale run", "aliases": [], "usage": [ "wai upscale run --prior [--derivation sr2|sr4] -o ", " [--record --envelope --key ] [--issued-at ] [--json]", " an 8-bit RGB PNG; --record signs what exact-upscale §7 recomputes from --envelope and the prior" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "path": { "type": "string", "format": "path", "description": "An 8-bit RGB PNG.", "x-cli": { "positional": true } }, "prior": { "type": "string", "format": "path", "description": "The WSR1 prior.", "x-cli": { "flag": "--prior" } }, "derivation": { "type": "string", "description": "sr2 (the default) or sr4.", "x-cli": { "flag": "--derivation" } }, "out": { "type": "string", "format": "path", "description": "The picture, a PNG.", "x-cli": { "flag": "-o" } }, "record": { "type": "string", "format": "path", "description": "The signed upscale record.", "x-cli": { "flag": "--record" } }, "envelope": { "type": "string", "format": "path", "description": "The WAI1 of the input, which the record names.", "x-cli": { "flag": "--envelope" } }, "key": { "type": "string", "description": "The record's signing key: its name in the keystore (wai key list), 64 hexadecimal digits, or a file holding them.", "x-cli": { "flag": "--key" } } }, "required": [ "path", "prior", "out" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "width", "height", "subpixels", "files" ], "description": "What `wai upscale run` or `wai tonemap run` made: the subpixels it would bill, each file it wrote with its digest, and the record's link hash" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "exact_upscale" ] }, "names": { "cli": "wai media upscale", "mcp": null, "c": "wai_media_upscale", "rust": "wai::media::upscale", "sdk": "wai.media.upscale" } }, { "id": "upscale.verify", "summary": "An upscale record recomputed from its input and its prior, and the picture held to it", "cli": "wai upscale verify", "aliases": [], "usage": [ "wai upscale verify --envelope --prior [--picture ]", " the record's outcome as JSON (extensions/exact-upscale.md §7, under require-proof); exit 1 when it is refused" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "record": { "type": "string", "format": "path", "description": "The upscale record.", "x-cli": { "positional": true } }, "envelope": { "type": "string", "format": "path", "description": "The WAI1 of the input, which the record names.", "x-cli": { "flag": "--envelope" } }, "prior": { "type": "string", "format": "path", "description": "The WSR1 prior the record names.", "x-cli": { "flag": "--prior" } }, "picture": { "type": "string", "format": "path", "description": "The picture: its samples are held to the record's output.", "x-cli": { "flag": "--picture" } } }, "required": [ "record", "envelope", "prior" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "outcome" ], "description": "accept, with the record's link hash and the subpixels it states; or refuse, with the reason and where" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "exact_upscale" ] }, "names": { "cli": "wai upscale verify", "mcp": null, "c": "wai_upscale_verify", "rust": "wai::upscale::verify", "sdk": "wai.upscale.verify" } }, { "id": "media.tonemap", "summary": "Render a still's gain map exactly at the headrooms named, with a signed record a verifier recomputes", "cli": "wai tonemap run", "aliases": [], "usage": [ "wai tonemap run --headrooms --out [--input-class ]", " [--record --key ] [--issued-at ] [--json]", " a WAI2 of a PNG base and its gain map; a headroom is in 1/10000 of a stop; each rendition is RGB16" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "path": { "type": "string", "format": "path", "description": "A WAI2 of a PNG base and its gain map.", "x-cli": { "positional": true } }, "headrooms": { "type": "string", "description": "The headrooms, in 1/10000 of a stop, joined by commas.", "x-cli": { "flag": "--headrooms" } }, "out": { "type": "string", "format": "path", "description": "The directory the renditions are written in.", "x-cli": { "flag": "--out" } }, "input_class": { "type": "string", "description": "The input's class (captured).", "x-cli": { "flag": "--input-class" } }, "record": { "type": "string", "format": "path", "description": "The signed rendition record.", "x-cli": { "flag": "--record" } }, "key": { "type": "string", "description": "The record's signing key: its name in the keystore (wai key list), 64 hexadecimal digits, or a file holding them.", "x-cli": { "flag": "--key" } } }, "required": [ "path", "headrooms", "out" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "width", "height", "subpixels", "files" ], "description": "What `wai upscale run` or `wai tonemap run` made: the subpixels it would bill, each file it wrote with its digest, and the record's link hash" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "exact_tonemap" ] }, "names": { "cli": "wai media tonemap", "mcp": null, "c": "wai_media_tonemap", "rust": "wai::media::tonemap", "sdk": "wai.media.tonemap" } }, { "id": "tonemap.verify", "summary": "A rendition record recomputed from its envelope, and the renditions held to it", "cli": "wai tonemap verify", "aliases": [], "usage": [ "wai tonemap verify --envelope [--renditions ]", " the record's outcome as JSON (extensions/exact-tonemap.md §8, under require-proof); exit 1 when it is refused" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "record": { "type": "string", "format": "path", "description": "The rendition record.", "x-cli": { "positional": true } }, "envelope": { "type": "string", "format": "path", "description": "The WAI2 the record names.", "x-cli": { "flag": "--envelope" } }, "renditions": { "type": "string", "format": "path", "description": "The directory `wai tonemap run` wrote: each rendition is held to its picture.", "x-cli": { "flag": "--renditions" } } }, "required": [ "record", "envelope" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "outcome" ], "description": "accept, with the record's link hash and the subpixels it states; or refuse, with the reason and where" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "exact_tonemap" ] }, "names": { "cli": "wai tonemap verify", "mcp": null, "c": "wai_tonemap_verify", "rust": "wai::tonemap::verify", "sdk": "wai.tonemap.verify" } }, { "id": "score.build", "summary": "A WSCR score from integer note fields", "cli": "wai score build", "aliases": [ "wai media score build" ], "usage": [ "wai score build -o a WSCR from integer note fields" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "notes": { "type": "string", "format": "path", "description": "The note fields, JSON.", "x-cli": { "positional": true } }, "out": { "type": "string", "format": "path", "description": "The score.", "x-cli": { "flag": "-o" } } }, "required": [ "notes", "out" ], "additionalProperties": false }, "output": { "type": "object", "description": "The score's digests, as `wai score build|render --json` print them" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "score" ] }, "names": { "cli": "wai score build", "mcp": null, "c": "wai_score_build", "rust": "wai::score::build", "sdk": "wai.score.build" } }, { "id": "score.decode", "summary": "A score's reference mixdown and its digests (pcm_sha256, mixdown_blake3, score_hash)", "cli": "wai score render", "aliases": [ "wai media score render" ], "usage": [ "wai score render [--pcm ] the reference mixdown and its digests" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "score": { "type": "string", "format": "path", "description": "A WSCR score.", "x-cli": { "positional": true } }, "pcm": { "type": "string", "format": "path", "description": "Where the mixdown is written.", "x-cli": { "flag": "--pcm" } } }, "required": [ "score" ], "additionalProperties": false }, "output": { "type": "object", "description": "The score's digests, as `wai score build|render --json` print them" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "score" ] }, "names": { "cli": "wai score decode", "mcp": null, "c": "wai_score_decode", "rust": "wai::score::decode", "sdk": "wai.score.decode" } }, { "id": "encoder.list", "summary": "What each encoder interface offers on this device, for AVC and HEVC", "cli": "wai encoders", "aliases": [], "usage": [ "wai encoders [--library ] what each encoder interface offers here" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "library": { "type": "string", "format": "path", "description": "A software encoder library.", "x-cli": { "flag": "--library" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "platform_encode" ] }, "names": { "cli": "wai encoder list", "mcp": null, "c": "wai_encoder_list", "rust": "wai::encoder::list", "sdk": "wai.encoder.list" } }, { "id": "encoder.verify", "summary": "A signed encode record checked, against the stream and its source where given", "cli": "wai encode-record verify", "aliases": [], "usage": [ "wai encode-record verify [--stream ] [--source ]" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "record": { "type": "string", "format": "path", "description": "The signed record.", "x-cli": { "positional": true } }, "stream": { "type": "string", "format": "path", "description": "The elementary stream it names.", "x-cli": { "flag": "--stream" } }, "source": { "type": "string", "format": "path", "description": "The source it names.", "x-cli": { "flag": "--source" } } }, "required": [ "record" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "platform_encode" ] }, "names": { "cli": "wai encoder verify", "mcp": null, "c": "wai_encoder_verify", "rust": "wai::encoder::verify", "sdk": "wai.encoder.verify" } }, { "id": "package.build", "summary": "A package packed by the reference packager wai-pack from a policy, a source per component and a supplied floor, with its signed package receipt", "cli": "wai package build", "aliases": [], "usage": [ "wai package build --policy --out --key [--source =]... [--floor ]", " [--signer-id ] [--meter none|model:] [--packer ] [wai-pack pack's other flags]", " the reference packager's pack (extensions/packaging.md): the policy's components packed into , new or empty,", " with the package receipt (package.receipt.json); the packer is --packer, $WAI_PACK_BIN, wai-pack beside wai,", " or wai-pack on PATH" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "policy": { "type": "string", "format": "path", "description": "The packaging policy (extensions/packaging.md §3).", "x-cli": { "flag": "--policy" } }, "out": { "type": "string", "format": "path", "description": "A new or empty directory, written with the package.", "x-cli": { "flag": "--out" } }, "key": { "type": "string", "format": "path", "description": "The packager's signing key: a 32-byte seed, in hexadecimal.", "x-cli": { "flag": "--key" } }, "source": { "type": "array", "items": { "type": "string" }, "description": "A component's source, =; each component's own by default.", "x-cli": { "flag": "--source" } }, "floor": { "type": "string", "format": "path", "description": "A supplied floor's directory (floor/ beside the policy by default).", "x-cli": { "flag": "--floor" } }, "signer_id": { "type": "string", "description": "The receipt's signer id (the key's did:key by default).", "x-cli": { "flag": "--signer-id" } }, "meter": { "type": "string", "description": "none, or model:: the meter of the receipt's figure.", "x-cli": { "flag": "--meter" } }, "packer": { "type": "string", "format": "path", "description": "The packer's binary (wai-pack).", "x-cli": { "flag": "--packer" } } }, "required": [ "policy", "out", "key" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": null, "names": { "cli": "wai package build", "mcp": null, "c": "wai_package_build", "rust": "wai::package::build", "sdk": "wai.package.build" } }, { "id": "package.verify", "summary": "A package verified by the reference packager wai-pack: every reason it is refused, or its counts and pack digest", "cli": "wai package verify", "aliases": [], "usage": [ "wai package verify [--parent ] [--packer ] the reference packager's verify", " (extensions/packaging.md §9): the package's receipt, stage indexes, objects and floor; with --parent, a re-pack against", " the package its receipt names; exit 1 when refused" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "The package's directory.", "x-cli": { "positional": true } }, "parent": { "type": "string", "format": "path", "description": "The package a re-pack's receipt names.", "x-cli": { "flag": "--parent" } }, "packer": { "type": "string", "format": "path", "description": "The packer's binary (wai-pack).", "x-cli": { "flag": "--packer" } } }, "required": [ "dir" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai package verify", "mcp": null, "c": "wai_package_verify", "rust": "wai::package::verify", "sdk": "wai.package.verify" } }, { "id": "registry.list", "summary": "Every registered capability with its fidelity, licence class, replicate class and role, and whether this build decodes it", "cli": "wai capabilities", "aliases": [], "usage": [ "wai capabilities the registered capabilities, their tier, licence, replicate class and role" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": {}, "required": [], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai registry list", "mcp": "registry_list", "c": "wai_registry_list", "rust": "wai::registry::list", "sdk": "wai.registry.list" } }, { "id": "registry.export", "summary": "Write, or with --check compare, the registry's machine-readable export and the generated table of REGISTRY.md", "cli": "wai registry export", "aliases": [], "usage": [ "wai registry export [--root ] [--check] write (or compare) registry/capabilities.json, its", " schema, vocab/v2.* and the generated table of REGISTRY.md" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "maintainer", "stability": "stable", "input": { "type": "object", "properties": { "root": { "type": "string", "format": "path", "description": "The wai/ directory.", "x-cli": { "flag": "--root" } }, "check": { "type": "boolean", "description": "Compare, write nothing.", "x-cli": { "flag": "--check" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai registry export", "mcp": null, "c": "wai_registry_export", "rust": "wai::registry::export", "sdk": "wai.registry.export" } }, { "id": "prior.list", "summary": "The listing of a parameter set (wai.prior.set) on stdout, and its pin on stderr", "cli": "wai prior-set", "aliases": [], "usage": [ "wai prior-set print the listing of a parameter set (wai.prior.set) and its pin" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "root": { "type": "string", "format": "path", "description": "The parameter set's directory.", "x-cli": { "positional": true } } }, "required": [ "root" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai prior list", "mcp": null, "c": "wai_prior_list", "rust": "wai::prior::list", "sdk": "wai.prior.list" } }, { "id": "prior.fetch", "summary": "A parameter set fetched by its pin from set roots (http-delivery §8.7), each response held only when its SHA-256 is the digest asked for, and written to --out", "cli": "wai prior fetch", "aliases": [], "usage": [ "wai prior fetch --out PATH [--form F] [--root ]... [--hint FILE] [--origin https://HOST] [--max-bytes N]", " the set of that SHA-256 asked of each set root in order (the roots given, a location hint's, then the origin's", " /.well-known/wai-sets/), a response's bytes held only when their digest is the pin's; a set of the form", " wai.prior.set (a listing) is written as a directory of its files, each fetched and checked by its own digest,", " anything else as one file. The hint is a WAI multivariant playlist (.m3u8) or a catalog's wai_priors entry", " (JSON). Exit 1 when no root holds it, with every request and what came of it; exit 6 when no root answered" ], "placement": "client", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "sha256": { "type": "string", "description": "The pin's digest: 64 lowercase hexadecimal digits.", "x-cli": { "positional": true } }, "out": { "type": "string", "format": "path", "description": "Where the set is written: a new or empty directory for a listing, a file otherwise.", "x-cli": { "flag": "--out" } }, "form": { "type": "string", "description": "The pin's form (wai.prior.set for a listing; a one-file set otherwise).", "x-cli": { "flag": "--form" } }, "root": { "type": "array", "items": { "type": "string" }, "description": "A set root to ask, https:// with a path ending in /; repeated, in order.", "x-cli": { "flag": "--root" } }, "hint": { "type": "string", "format": "path", "description": "A location hint: a WAI multivariant playlist, or a catalog's wai_priors entry as JSON.", "x-cli": { "flag": "--hint" } }, "origin": { "type": "string", "description": "An https:// origin whose /.well-known/wai-sets/ is asked last.", "x-cli": { "flag": "--origin" } }, "max_bytes": { "type": "integer", "description": "The most bytes read of each response (256 MiB).", "x-cli": { "flag": "--max-bytes" } } }, "required": [ "sha256", "out" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "sha256", "form", "out", "files", "attempts" ], "description": "The pin's digest and form, where the set was written, each file of it with its path and SHA-256, its usage statement where it binds one, and every request sent with what came of it (held, or the reason http-delivery §8.7 gives)" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": { "all": [ "prior_carriage", "cli_tls" ] }, "names": { "cli": "wai prior fetch", "mcp": null, "c": "wai_prior_fetch", "rust": "wai::prior::fetch", "sdk": "wai.prior.fetch" } }, { "id": "prior.verify", "summary": "Whether a parameter set is the one a pin names: a directory's listing (wai.prior.set), or a file's bytes, and its SHA-256 against the pin's", "cli": "wai prior verify", "aliases": [], "usage": [ "wai prior verify --sha256 <64 hex> [--form F] a directory read as a set of the form wai.prior.set (its listing,", " as wai prior-set prints it) or a file as its bytes, its SHA-256 held to the pin's. Exit 1 when they differ" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "path": { "type": "string", "format": "path", "description": "The set: a directory (a listing's files), or a file.", "x-cli": { "positional": true } }, "sha256": { "type": "string", "description": "The pin's digest: 64 lowercase hexadecimal digits.", "x-cli": { "flag": "--sha256" } }, "form": { "type": "string", "description": "The pin's form: a directory is read as wai.prior.set and refused under another; a file is read as its bytes.", "x-cli": { "flag": "--form" } } }, "required": [ "path", "sha256" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "path", "form", "pin", "sha256", "held" ], "properties": { "held": { "type": "boolean" } }, "description": "The path checked, the form it was read as (wai.prior.set for a directory, its listing), the pin's digest and the one computed here, and whether they are the same" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai prior verify", "mcp": null, "c": "wai_prior_verify", "rust": "wai::prior::verify", "sdk": "wai.prior.verify" } }, { "id": "stage.encode", "summary": "A refinement layer over a base and the layers below it, toward a target", "cli": "wai stage refine", "aliases": [], "usage": [ "wai stage refine --base [--on ]... --toward --q N [--predictor identity|up2|rate:NUM/DEN]", " [--span F:C] [--out-dims D0,D1,D2] [--max-symbols N] [--table-per-unit] -o L.wai" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "base": { "type": "string", "format": "path", "description": "The base envelope.", "x-cli": { "flag": "--base" } }, "toward": { "type": "string", "format": "path", "description": "The samples the layer refines toward (--target, deprecated, is the same).", "x-cli": { "flag": "--toward", "aliases": [ { "flag": "--target", "deprecated": { "since": "0.5.0", "use_instead": "--toward" } } ] } }, "q": { "type": "integer", "description": "The quantiser.", "x-cli": { "flag": "--q" } }, "out": { "type": "string", "format": "path", "description": "The layer.", "x-cli": { "flag": "-o" } } }, "required": [ "base", "toward", "q", "out" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "staged", "video_int", "audio_int", "splat_int" ] }, "names": { "cli": "wai stage encode", "mcp": null, "c": "wai_stage_encode", "rust": "wai::stage::encode", "sdk": "wai.stage.encode" } }, { "id": "stage.decode", "summary": "Envelopes taken in order: each layer offered, each base decoded and refined, with each report and the units", "cli": "wai stage apply", "aliases": [], "usage": [ "wai stage apply ... each layer offered, a base decoded (SPEC §4) and refined; the reports and units, or a JSON trace" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "envelopes": { "type": "array", "items": { "type": "string" }, "description": "The base, then its layers.", "x-cli": { "positional": true } } }, "required": [ "envelopes" ], "additionalProperties": false }, "output": { "description": "The trace of every stage reached, as `wai stage apply --json` prints it" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "staged", "video_int", "audio_int", "splat_int" ] }, "names": { "cli": "wai stage decode", "mcp": null, "c": "wai_stage_decode", "rust": "wai::stage::decode", "sdk": "wai.stage.decode" } }, { "id": "stage.build", "summary": "A wai.video.int_motion base of N frames of RGB8 (WIV1, keyframe 0, zero motion)", "cli": "wai stage base", "aliases": [], "usage": [ "wai stage base --frames --dims N,H,W --q Q -o base.wai" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "frames": { "type": "string", "format": "path", "description": "The frames, packed RGB8.", "x-cli": { "flag": "--frames" } }, "dims": { "type": "string", "description": "N,H,W.", "x-cli": { "flag": "--dims" } }, "q": { "type": "integer", "description": "The quantiser.", "x-cli": { "flag": "--q" } }, "out": { "type": "string", "format": "path", "description": "The base envelope.", "x-cli": { "flag": "-o" } } }, "required": [ "frames", "dims", "q", "out" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "staged", "video_int", "audio_int", "splat_int" ] }, "names": { "cli": "wai stage build", "mcp": null, "c": "wai_stage_build", "rust": "wai::stage::build", "sdk": "wai.stage.build" } }, { "id": "stage.inspect", "summary": "A refinement layer's refines, its WIR1 header and its declared cost", "cli": "wai stage inspect", "aliases": [], "usage": [ "wai stage inspect " ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "layer": { "type": "string", "format": "path", "description": "A layer envelope.", "x-cli": { "positional": true } } }, "required": [ "layer" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "staged", "video_int", "audio_int", "splat_int" ] }, "names": { "cli": "wai stage inspect", "mcp": null, "c": "wai_stage_inspect", "rust": "wai::stage::inspect", "sdk": "wai.stage.inspect" } }, { "id": "stage.wrap", "summary": "WAI1 envelopes packed into one WAI2, their manifests verbatim", "cli": "wai stage pack", "aliases": [], "usage": [ "wai stage pack ... -o x.wai" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "envelopes": { "type": "array", "items": { "type": "string" }, "description": "The base, then its layers.", "x-cli": { "positional": true } }, "out": { "type": "string", "format": "path", "description": "The WAI2 envelope.", "x-cli": { "flag": "-o" } } }, "required": [ "envelopes", "out" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "staged", "video_int", "audio_int", "splat_int" ] }, "names": { "cli": "wai stage wrap", "mcp": null, "c": "wai_stage_wrap", "rust": "wai::stage::wrap", "sdk": "wai.stage.wrap" } }, { "id": "stage.unwrap", "summary": "One component of a WAI2 envelope as its WAI1 envelope", "cli": "wai stage explode", "aliases": [], "usage": [ "wai stage explode [-o out.wai]" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "path": { "type": "string", "format": "path", "description": "A WAI2 envelope.", "x-cli": { "positional": true } }, "index": { "type": "integer", "description": "The component's index.", "x-cli": { "positional": true } }, "out": { "type": "string", "format": "path", "description": "The WAI1 envelope.", "x-cli": { "flag": "-o" } } }, "required": [ "path", "index" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "staged", "video_int", "audio_int", "splat_int" ] }, "names": { "cli": "wai stage unwrap", "mcp": null, "c": "wai_stage_unwrap", "rust": "wai::stage::unwrap", "sdk": "wai.stage.unwrap" } }, { "id": "http.export", "summary": "Envelopes named by their content hash, each with its head proof and entity tag, ready for an origin", "cli": "wai http publish", "aliases": [], "usage": [ "wai http publish ... --out " ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "envelopes": { "type": "array", "items": { "type": "string" }, "description": "The envelopes.", "x-cli": { "positional": true } }, "out": { "type": "string", "format": "path", "description": "The directory.", "x-cli": { "flag": "--out" } } }, "required": [ "envelopes", "out" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "http" ] }, "names": { "cli": "wai http export", "mcp": null, "c": "wai_http_export", "rust": "wai::http::export", "sdk": "wai.http.export" } }, { "id": "http.inspect", "summary": "The codecs parameter a sequence of envelopes advertises: its union and its floor", "cli": "wai http codecs", "aliases": [], "usage": [ "wai http codecs ..." ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "envelopes": { "type": "array", "items": { "type": "string" }, "description": "The envelopes.", "x-cli": { "positional": true } } }, "required": [ "envelopes" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "http" ] }, "names": { "cli": "wai http inspect", "mcp": null, "c": "wai_http_inspect", "rust": "wai::http::inspect", "sdk": "wai.http.inspect" } }, { "id": "http.start", "summary": "An origin on loopback serving a published directory with http-delivery's headers, ranges and If-Range", "cli": "wai http origin", "aliases": [], "usage": [ "wai http origin --root [--port P] [--delay-range FIRST-LAST:MS]" ], "placement": "local", "effect": "runs", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "root": { "type": "string", "format": "path", "description": "The published directory.", "x-cli": { "flag": "--root" } }, "port": { "type": "integer", "description": "The port on 127.0.0.1.", "x-cli": { "flag": "--port" } } }, "required": [ "root" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "http" ] }, "names": { "cli": "wai http start", "mcp": null, "c": "wai_http_start", "rust": "wai::http::start", "sdk": "wai.http.start" } }, { "id": "hls.build", "summary": "An HLS rendition of published objects", "cli": "wai http hls", "aliases": [], "usage": [ "wai http hls --objects --out [--master NAME]" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "objects": { "type": "string", "format": "path", "description": "The objects, JSON.", "x-cli": { "flag": "--objects" } }, "out": { "type": "string", "format": "path", "description": "The directory.", "x-cli": { "flag": "--out" } } }, "required": [ "objects", "out" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "http" ] }, "names": { "cli": "wai hls build", "mcp": null, "c": "wai_hls_build", "rust": "wai::hls::build", "sdk": "wai.hls.build" } }, { "id": "dash.build", "summary": "A DASH manifest of published objects", "cli": "wai http mpd", "aliases": [], "usage": [ "wai http mpd --objects --out [--period-id ID] [--set-id N]" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "objects": { "type": "string", "format": "path", "description": "The objects, JSON.", "x-cli": { "flag": "--objects" } }, "out": { "type": "string", "format": "path", "description": "The manifest.", "x-cli": { "flag": "--out" } } }, "required": [ "objects", "out" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "http" ] }, "names": { "cli": "wai dash build", "mcp": null, "c": "wai_dash_build", "rust": "wai::dash::build", "sdk": "wai.dash.build" } }, { "id": "playlist.lock", "summary": "A media playlist sealed with a signed manifest receipt", "cli": "wai http seal-playlist", "aliases": [], "usage": [ "wai http seal-playlist --key [--signer-id ID] [--content-id ID] [--parent ] [--out ]" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "playlist": { "type": "string", "format": "path", "description": "The playlist.", "x-cli": { "positional": true } }, "key": { "type": "string", "description": "The signing key: its name in the keystore (wai key list), 64 hexadecimal digits, or a file holding them.", "x-cli": { "flag": "--key" } } }, "required": [ "playlist", "key" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "http", "video_manifest" ] }, "names": { "cli": "wai playlist lock", "mcp": null, "c": "wai_playlist_lock", "rust": "wai::playlist::lock", "sdk": "wai.playlist.lock" } }, { "id": "playlist.verify", "summary": "A media playlist checked against its manifest receipt", "cli": "wai http check-playlist", "aliases": [], "usage": [ "wai http check-playlist --receipt [--parent ] [--classical ]" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "playlist": { "type": "string", "format": "path", "description": "The playlist.", "x-cli": { "positional": true } }, "receipt": { "type": "string", "format": "path", "description": "Its manifest receipt.", "x-cli": { "flag": "--receipt" } } }, "required": [ "playlist", "receipt" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "http", "video_manifest" ] }, "names": { "cli": "wai playlist verify", "mcp": null, "c": "wai_playlist_verify", "rust": "wai::playlist::verify", "sdk": "wai.playlist.verify" } }, { "id": "corpus.generate", "summary": "The HTTP conformance corpus: generated, verified, or its differential and fuzz cases written", "cli": "wai http vectors", "aliases": [], "usage": [ "wai http vectors gen|verify ", "wai http vectors diff|fuzz --seed S --count N --out F" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "maintainer", "stability": "preview", "input": { "type": "object", "properties": { "mode": { "type": "string", "description": "gen, verify, diff or fuzz.", "x-cli": { "positional": true } }, "dir": { "type": "string", "format": "path", "description": "The corpus directory.", "x-cli": { "positional": true } } }, "required": [ "mode", "dir" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "http" ] }, "names": { "cli": "wai corpus generate", "mcp": null, "c": "wai_corpus_generate", "rust": "wai::corpus::generate", "sdk": "wai.corpus.generate" } }, { "id": "http.load", "summary": "An object fetched by the byte-range procedure, repeatedly, and the record of each run", "cli": "wai http bench", "aliases": [], "usage": [ "wai http bench --url URL --runs N --advertise CAP [--advertise CAP]... --out F" ], "placement": "client", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "url": { "type": "string", "description": "The object's URL.", "x-cli": { "flag": "--url" } }, "runs": { "type": "integer", "description": "How many runs.", "x-cli": { "flag": "--runs" } }, "advertise": { "type": "array", "items": { "type": "string" }, "description": "A capability this sink advertises.", "x-cli": { "flag": "--advertise" } }, "out": { "type": "string", "format": "path", "description": "The record.", "x-cli": { "flag": "--out" } } }, "required": [ "url", "runs", "advertise", "out" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "http" ] }, "names": { "cli": "wai http load", "mcp": null, "c": "wai_http_load", "rust": "wai::http::load", "sdk": "wai.http.load" } }, { "id": "receipt.fetch", "summary": "An object's receipt index fetched over HTTP and checked, its signers confirmed under the origin's key log where named", "cli": "wai http receipts", "aliases": [], "usage": [ "wai http receipts --url URL [--advertise CAP]... [--held fetch|none] [--join] [--max-walk N] [--fetch-budget N]", " [--deadline-ms MS] [--key-origin https://HOST[:PORT] [--pin-key-log FILE | --test-plaintext-connect HOST:PORT]]" ], "placement": "client", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "url": { "type": "string", "description": "The object's URL.", "x-cli": { "flag": "--url" } } }, "required": [ "url" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "http", "receipt_claims" ] }, "names": { "cli": "wai receipt fetch", "mcp": null, "c": "wai_receipt_fetch", "rust": "wai::receipt::fetch", "sdk": "wai.receipt.fetch" } }, { "id": "cmcd.encode", "summary": "An observation's CMCD report (delivery-telemetry §5): its mode, the report and, in request mode, its headers, as the corpus's tool writes them", "cli": "wai cmcd encode", "aliases": [], "usage": [ "wai cmcd encode the CMCD report of one observation (delivery-telemetry §5), as JSON, as", " wai_telemetry encode prints it" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "observation": { "type": "string", "format": "path", "description": "An observation (delivery-telemetry §4), JSON.", "x-cli": { "positional": true } } }, "required": [ "observation" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "mode", "report", "headers" ], "properties": { "mode": { "enum": [ "request", "event", "none" ] } }, "description": "The observation's CMCD report: its mode, the report as a CMCD dictionary (null when none is sent), and in request mode its header form" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": { "all": [ "telemetry" ] }, "names": { "cli": "wai cmcd encode", "mcp": null, "c": "wai_cmcd_encode", "rust": "wai::cmcd::encode", "sdk": "wai.cmcd.encode" } }, { "id": "cmcd.decode", "summary": "A CMCD dictionary read back, each member by its key as JSON, as the corpus's tool reads it", "cli": "wai cmcd decode", "aliases": [], "usage": [ "wai cmcd decode a CMCD dictionary (RFC 9651) read back, each member as JSON, as wai_telemetry decode", " prints it" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "dictionary": { "type": "string", "description": "A CMCD dictionary, as a query or a header carries it.", "x-cli": { "positional": true } } }, "required": [ "dictionary" ], "additionalProperties": false }, "output": { "type": "object", "description": "Each member of the dictionary by its key: an integer, a boolean, {\"string\": ...}, {\"token\": ...} or a list of integers" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": { "all": [ "telemetry" ] }, "names": { "cli": "wai cmcd decode", "mcp": null, "c": "wai_cmcd_decode", "rust": "wai::cmcd::decode", "sdk": "wai.cmcd.decode" } }, { "id": "cmcd.verify", "summary": "The delivery-telemetry corpus checked: every observation read back to its own bytes and every expected file recomputed, byte for byte", "cli": "wai cmcd verify", "aliases": [], "usage": [ "wai cmcd verify telemetry-conformance/ checked as wai_telemetry verify checks it (delivery-telemetry", " §9.2): every expected file recomputed, every invalid observation refused; exit 1 on a failure" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "corpus": { "type": "string", "format": "path", "description": "The corpus's directory (wai/telemetry-conformance).", "x-cli": { "positional": true } } }, "required": [ "corpus" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": { "all": [ "telemetry" ] }, "names": { "cli": "wai cmcd verify", "mcp": null, "c": "wai_cmcd_verify", "rust": "wai::cmcd::verify", "sdk": "wai.cmcd.verify" } }, { "id": "compat.check", "summary": "What the working tree breaks against a git ref, by category (wire, record, api); a break passes once the CHANGELOG names it, or in a project once breaking.allow accepts it with a reason", "cli": "wai breaking", "aliases": [], "usage": [ "wai breaking --against [--category wire|record|api] [--only ,...] [--skip ,...]", " [--root ] [--target-dir ] [--all] exit 1 on a break the CHANGELOG does not acknowledge", "wai breaking (--against | --baseline ) [--project ] [--category ...] [--only ...] [--skip ...]", " in a project (a directory with wai.json): its package's sink classes and the API it names under breaking.api,", " against the project at or as published in (the project, or its package alone); exit 1 on a", " break breaking.allow does not accept" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "against": { "type": "string", "description": "The git ref to compare with (required outside a project).", "x-cli": { "flag": "--against" } }, "baseline": { "type": "string", "format": "path", "description": "In a project, the directory to compare with instead of a git ref: the project as published, or its package.", "x-cli": { "flag": "--baseline" } }, "project": { "type": "string", "format": "path", "description": "The project to check (a directory with wai.json; the current one when it has one).", "x-cli": { "flag": "--project" } }, "category": { "type": "string", "description": "wire, record or api: the categories checked, cumulative (api).", "x-cli": { "flag": "--category" } }, "only": { "type": "string", "description": "Only these surfaces, comma-separated.", "x-cli": { "flag": "--only" } }, "skip": { "type": "string", "description": "Not these surfaces, comma-separated.", "x-cli": { "flag": "--skip" } }, "root": { "type": "string", "format": "path", "description": "The repository's root (.).", "x-cli": { "flag": "--root" } }, "target_dir": { "type": "string", "format": "path", "description": "Where the Rust API's description is built.", "x-cli": { "flag": "--target-dir" } }, "all": { "type": "boolean", "description": "List every finding, compatible ones too.", "x-cli": { "flag": "--all" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "against", "findings" ], "description": "Each finding's id, category, what changed and whether the CHANGELOG acknowledges it (in a project, whether breaking.allow accepts it, and its reason); a preview operation's change, which the changelog is owed a line for; and a break no line acknowledges, with why" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai compat check", "mcp": null, "c": "wai_compat_check", "rust": "wai::compat::check", "sdk": "wai.compat.check" } }, { "id": "conformance.run", "summary": "WAI's conformance corpus run against another implementation, through a command or an HTTP adapter or, for a relay, the MOQT interop client, or every corpus's independent verifier; each result a signed record wai verify checks", "cli": "wai conform", "aliases": [], "usage": [ "wai conform --suite --impl [--independent] [--key ] [--out ]", " [--root ] [--timeout ] [--name ] [--version ] [--python ] [--all]", " [--level required|all] [--format text|json|junit|html] [--yes] `wai conformance list` names the kinds and", " suites; --independent runs the corpus's independent verifier beside the implementation, and both must conform;", " a case is required unless its corpus marks it informative, and --level all counts every case", "wai conform relay --suite moqt --impl [--draft 22|18|16] [--tls-disable-verify] [--out ]", " [--root ] [--timeout ] [--name ] [--version ] [--format text|json|junit|html] [--yes]", " a relay held to the MOQT interop cases by joule-moq-interop, found beside wai, on PATH or at WAI_MOQ_INTEROP_BIN", "wai conform --independent [--suite [,...]] [--out ] [--key ] [--root ]", " [--timeout ] [--python ] [--format text|json|junit|html] [--yes] every corpus's", " independent verifier (or those named), a record each in ; a record that exists is replaced only with", " --yes (--confirm, deprecated, is the same)" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "kind": { "type": "string", "description": "The kind of implementation (wai conformance list): a decoder, a verifier, an origin, a cache, a packager, a sink, a relay; none with --independent alone.", "x-cli": { "positional": true } }, "suite": { "type": "string", "description": "The suite (wai conformance list); with --independent alone, areas and independent verifiers, comma-separated.", "x-cli": { "flag": "--suite" } }, "impl": { "type": "string", "description": "The implementation: a command with {case}/{in}/{out}/{corpus}/{model} placeholders (a cache's: {port} and {origin}), or a URL (a relay's: moqt:// or https://); required with a kind.", "x-cli": { "flag": "--impl" } }, "independent": { "type": "boolean", "description": "Run the corpus's independent verifier beside the implementation, held to the same cases; without a kind, every independent verifier.", "x-cli": { "flag": "--independent" } }, "key": { "type": "string", "format": "path", "description": "The seed the records are signed with.", "x-cli": { "flag": "--key" } }, "out": { "type": "string", "format": "path", "description": "The record (.wai-conform.json); with --independent alone, a directory for a record a corpus.", "x-cli": { "flag": "--out" } }, "root": { "type": "string", "format": "path", "description": "The wai/ directory whose corpora are run.", "x-cli": { "flag": "--root" } }, "timeout": { "type": "integer", "description": "Seconds a case may take (60), or an independent verifier its whole corpus (1800).", "x-cli": { "flag": "--timeout" } }, "name": { "type": "string", "description": "The implementation's name, for the record.", "x-cli": { "flag": "--name" } }, "version": { "type": "string", "description": "The implementation's version, for the record.", "x-cli": { "flag": "--version" } }, "python": { "type": "string", "description": "The Python the independent verifiers run with (python3).", "x-cli": { "flag": "--python" } }, "format": { "type": "string", "description": "What is printed: text, json (the envelope, as --json), junit (JUnit XML) or html, the last two from the records.", "x-cli": { "flag": "--format" } }, "all": { "type": "boolean", "description": "List every case, passed ones too.", "x-cli": { "flag": "--all" } }, "level": { "type": "string", "description": "required (the default: a case the corpus marks informative is reported, not counted) or all (every case counted); for a suite whose corpus marks a case informative.", "x-cli": { "flag": "--level" } }, "draft": { "type": "integer", "description": "A relay's MOQT draft, 22, 18 (the default) or 16: the one the interop client speaks to it.", "x-cli": { "flag": "--draft" } }, "tls_disable_verify": { "type": "boolean", "description": "A relay's certificate is not verified (one it made for itself).", "x-cli": { "flag": "--tls-disable-verify" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "conformant", "cases", "passed", "failed" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai conformance run", "mcp": "conformance_run", "c": "wai_conformance_run", "rust": "wai::conformance::run", "sdk": "wai.conformance.run" } }, { "id": "conformance.list", "summary": "The kinds and suites wai conform runs, each suite's corpus and its cases, and every corpus's independent verifier", "cli": "wai conformance list", "aliases": [], "usage": [ "wai conformance list [--root ] the kinds and suites, and the independent verifiers (also wai conform --list)" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "root": { "type": "string", "format": "path", "description": "The wai/ directory whose corpora are listed.", "x-cli": { "flag": "--root" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "suites" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai conformance list", "mcp": "conformance_list", "c": "wai_conformance_list", "rust": "wai::conformance::list", "sdk": "wai.conformance.list" } }, { "id": "conformance.generate", "summary": "A conformance corpus written by its generator, the tool the conformance workflow verifies it with, or verified by it", "cli": "wai conformance gen", "aliases": [], "usage": [ "wai conformance gen --suite [,...] [--verify] [--root ] [--bin-dir ] each corpus written by", " its tool's generator (cargo run in /wai-rs, or the tool built in ); --verify runs its verifier instead;", " `wai conformance list` names the corpora" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "maintainer", "stability": "preview", "input": { "type": "object", "properties": { "suite": { "type": "string", "description": "The corpora, comma-separated (wai conformance list).", "x-cli": { "flag": "--suite" } }, "verify": { "type": "boolean", "description": "Run each tool's verifier, which writes nothing, instead of its generator.", "x-cli": { "flag": "--verify" } }, "root": { "type": "string", "format": "path", "description": "The wai/ directory of the checkout whose corpora are written.", "x-cli": { "flag": "--root" } }, "bin_dir": { "type": "string", "format": "path", "description": "Where the tools are built; without it each is built and run with cargo.", "x-cli": { "flag": "--bin-dir" } } }, "required": [ "suite" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "corpora" ], "description": "Each corpus named, its tool, its directory and the command each mode ran with its exit status; passed and failed count the corpora" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai conformance generate", "mcp": null, "c": "wai_conformance_generate", "rust": "wai::conformance::generate", "sdk": "wai.conformance.generate" } }, { "id": "enrolment.create", "summary": "A node's enrolment signed with the organisation key, written to a file and, with --target, given to a fleet service", "cli": "wai enrolment create", "aliases": [], "usage": [ "wai enrolment create --role --key [--label L] [--from µs] [--until µs] [--out F]", " [--target ] [--yes] a node's enrolment (WFE1), signed with the organisation key, written to F", " (.wfe without --target) and, with --target, given to the fleet service it names (never to the target in", " use unless named); changing the service or replacing a file waits for --yes (--confirm, deprecated, is the same)" ], "placement": "client", "effect": "writes-target", "dry_run": true, "confirm": "when-changing-the-target-or-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "node": { "type": "string", "description": "The node's Ed25519 public key, 64 hexadecimal digits.", "x-cli": { "positional": true } }, "role": { "type": "string", "description": "relay, compositor, ingest, room, ledger or audit.", "x-cli": { "flag": "--role" } }, "key": { "type": "string", "description": "The organisation key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.", "x-cli": { "flag": "--key" } }, "label": { "type": "string", "description": "The node's label, at most 64 bytes.", "x-cli": { "flag": "--label" } }, "from": { "type": "integer", "description": "The start of the span it holds, microseconds since 1970 (0).", "x-cli": { "flag": "--from" } }, "until": { "type": "integer", "description": "The end of that span, microseconds since 1970 (none).", "x-cli": { "flag": "--until" } }, "out": { "type": "string", "format": "path", "description": "The enrolment's file (.wfe when no --target is given).", "x-cli": { "flag": "--out" } }, "target": { "type": "string", "description": "The service it acts on: a target's name (wai target list) or a service's http:// or https:// address.", "x-cli": { "flag": "--target" } } }, "required": [ "node", "role", "key" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "node", "role", "organisation", "digest", "enrolment" ], "description": "The enrolment (WFE1, hexadecimal), its digest, and the file and service it went to" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "fleet" ] }, "names": { "cli": "wai enrolment create", "mcp": null, "c": "wai_enrolment_create", "rust": "wai::enrolment::create", "sdk": "wai.enrolment.create" } }, { "id": "enrolment.list", "summary": "The nodes a fleet service holds enrolled, each with its role, label and how many records it gave", "cli": "wai enrolment list", "aliases": [], "usage": [ "wai enrolment list [--target ] the nodes the fleet service holds enrolled (the target in use when none is named)" ], "placement": "client", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "target": { "type": "string", "description": "The service it acts on: a target's name (wai target list) or a service's http:// or https:// address.", "x-cli": { "flag": "--target" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "enrolments" ], "description": "Each node the fleet service holds enrolled: its key, role, label and records" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai enrolment list", "mcp": null, "c": "wai_enrolment_list", "rust": "wai::enrolment::list", "sdk": "wai.enrolment.list" } }, { "id": "report.create", "summary": "The fleet report of a period, signed by a fleet service over the enrolments and records it holds", "cli": "wai report create", "aliases": [], "usage": [ "wai report create [--target ] --start µs --end µs [--yes] the fleet report of [start, end), signed by the", " fleet service (the target in use when none is named); it changes the service, so it waits for --yes (--confirm,", " deprecated, is the same)" ], "placement": "client", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "target": { "type": "string", "description": "The service it acts on: a target's name (wai target list) or a service's http:// or https:// address.", "x-cli": { "flag": "--target" } }, "start": { "type": "integer", "description": "The period's start, microseconds since 1970.", "x-cli": { "flag": "--start" } }, "end": { "type": "integer", "description": "The period's end, after its start.", "x-cli": { "flag": "--end" } } }, "required": [ "start", "end" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "report", "outcome" ], "description": "The report's digest and its outcome as extensions/fleet.md §7.3 states it" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": null, "names": { "cli": "wai report create", "mcp": null, "c": "wai_report_create", "rust": "wai::report::create", "sdk": "wai.report.create" } }, { "id": "report.export", "summary": "A fleet report's bundle fetched from a fleet service, its report recomputed here, then written to a file", "cli": "wai report export", "aliases": [], "usage": [ "wai report export [--target ] [--out F] [--yes] the report's bundle from the fleet service", " (the target in use when none is named), recomputed by this build and written to F (.wai-fleet.json) for", " `wai verify`; replacing a file waits for --yes (--confirm, deprecated, is the same)" ], "placement": "client", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "digest": { "type": "string", "description": "The report's digest, 64 hexadecimal digits.", "x-cli": { "positional": true } }, "target": { "type": "string", "description": "The service it acts on: a target's name (wai target list) or a service's http:// or https:// address.", "x-cli": { "flag": "--target" } }, "out": { "type": "string", "format": "path", "description": "The bundle's file (.wai-fleet.json).", "x-cli": { "flag": "--out" } } }, "required": [ "digest" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "file", "outcome" ], "description": "The bundle's file and its outcome, recomputed here" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "fleet" ] }, "names": { "cli": "wai report export", "mcp": null, "c": "wai_report_export", "rust": "wai::report::export", "sdk": "wai.report.export" } }, { "id": "route.verify", "summary": "A route record checked offline against its request, price book and routing policy, and against its hops' OER/2 receipts where given", "cli": "wai route verify", "aliases": [], "usage": [ "wai route verify a verification document (extensions/route-record.md §7.1): the record's outcome", " (§7.3) as JSON, recomputed from the request, the price book and the policy; exit 1 when it is refused" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "document": { "type": "string", "format": "path", "description": "The verification document: the request, price book, policy and record, and the hops' receipts.", "x-cli": { "positional": true } } }, "required": [ "document" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "outcome" ], "description": "The outcome of extensions/route-record.md §7.3: accept with the record's digest, the served and billed hops, the deadline, the order, the decision, the removals and the unmetered hops; or refuse with the reason and where" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "route_record" ] }, "names": { "cli": "wai route verify", "mcp": null, "c": "wai_route_verify", "rust": "wai::route::verify", "sdk": "wai.route.verify" } }, { "id": "channel.import", "summary": "A linear channel's feeds (an XMLTV schedule, Media RSS catalogues or the JSON form, and a Media Playlist's SCTE-35 date ranges) imported into its signed receipt, its signed lineup and its breaks' cues", "cli": "wai channel import", "aliases": [], "usage": [ "wai channel import --channel ID (--xmltv F [--mrss F]... | --mrss F... | --feed F) [--playlist F] --key K", " [--mrss-owner O]... [--owner O] [--signer-id S] [--id-system N] [--xmltv-channel X] [--start-ms T] [--artwork DIR]", " [--window-start T --window-end T] [--parent HEX] [--out-dir D] [--yes] the receipt (channel.json), the lineup", " (lineup.wlu) and the cues (cues.json), written to D (.); a refusal's code is its reason; replacing a file waits", " for --yes (--confirm, deprecated, is the same)" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "channel": { "type": "string", "description": "The channel id.", "x-cli": { "flag": "--channel" } }, "xmltv": { "type": "string", "format": "path", "description": "An XMLTV document: the schedule.", "x-cli": { "flag": "--xmltv" } }, "mrss": { "type": "array", "items": { "type": "string" }, "description": "A Media RSS document: a catalogue. Repeated.", "x-cli": { "flag": "--mrss" } }, "mrss_owner": { "type": "array", "items": { "type": "string" }, "description": "The rights holder of each --mrss document's items, in their order: none, or one each.", "x-cli": { "flag": "--mrss-owner" } }, "feed": { "type": "string", "format": "path", "description": "The JSON form of a schedule, its catalogue and its breaks.", "x-cli": { "flag": "--feed" } }, "playlist": { "type": "string", "format": "path", "description": "The channel's HLS Media Playlist, whose SCTE-35 date ranges are its breaks.", "x-cli": { "flag": "--playlist" } }, "key": { "type": "string", "description": "The operator's key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.", "x-cli": { "flag": "--key" } }, "owner": { "type": "string", "description": "The rights holder of every asset no other input gives one.", "x-cli": { "flag": "--owner" } }, "signer_id": { "type": "string", "description": "The receipt's signer id (the operator key's did:key).", "x-cli": { "flag": "--signer-id" } }, "id_system": { "type": "string", "description": "The XMLTV episode-num system that names a programme's asset (wai-asset-id).", "x-cli": { "flag": "--id-system" } }, "xmltv_channel": { "type": "string", "description": "The XMLTV channel id whose programmes are read (the channel id).", "x-cli": { "flag": "--xmltv-channel" } }, "start_ms": { "type": "integer", "description": "Where a schedule of Media RSS items alone begins, milliseconds since 1970.", "x-cli": { "flag": "--start-ms" } }, "artwork": { "type": "string", "format": "path", "description": "The directory holding the artwork files the feeds' icons and thumbnails name.", "x-cli": { "flag": "--artwork" } }, "window_start": { "type": "integer", "description": "The receipt's window's start (the schedule's first start).", "x-cli": { "flag": "--window-start" } }, "window_end": { "type": "integer", "description": "The receipt's window's end (the schedule's last end).", "x-cli": { "flag": "--window-end" } }, "parent": { "type": "string", "description": "The receipt hash of the window before this one, 64 hexadecimal digits.", "x-cli": { "flag": "--parent" } }, "out_dir": { "type": "string", "format": "path", "description": "Where channel.json, lineup.wlu and cues.json are written (.).", "x-cli": { "flag": "--out-dir" } } }, "required": [ "channel", "key" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "channel", "receipt", "receipt_hash", "schedule_root", "lineup", "lineup_digest", "cues" ], "description": "The files written (the receipt, the lineup, the cues), the receipt's identity and schedule root, the lineup's digest, and their counts" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "channel_lineup" ] }, "names": { "cli": "wai channel import", "mcp": null, "c": "wai_channel_import", "rust": "wai::channel::import", "sdk": "wai.channel.import" } }, { "id": "channel.guide", "summary": "A channel's guide, an XMLTV document or a now/next document, rendered from its receipt and its lineup and naming both", "cli": "wai channel guide", "aliases": [], "usage": [ "wai channel guide --receipt R --lineup L [--from T --to T | --now-next --at T] [--out F] [--yes] the XMLTV guide", " of a range (the whole schedule), or the now/next document of an instant, written to F (guide.xml, now-next.json);", " replacing a file waits for --yes (--confirm, deprecated, is the same)" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "receipt": { "type": "string", "format": "path", "description": "The channel receipt, in its JSON carriage.", "x-cli": { "flag": "--receipt" } }, "lineup": { "type": "string", "format": "path", "description": "The lineup's file.", "x-cli": { "flag": "--lineup" } }, "from": { "type": "integer", "description": "The range's start, milliseconds since 1970 (the schedule's first start).", "x-cli": { "flag": "--from" } }, "to": { "type": "integer", "description": "The range's end (the schedule's last end).", "x-cli": { "flag": "--to" } }, "now_next": { "type": "boolean", "description": "The now/next document of --at instead.", "x-cli": { "flag": "--now-next" } }, "at": { "type": "integer", "description": "The instant of a now/next document, milliseconds since 1970.", "x-cli": { "flag": "--at" } }, "out": { "type": "string", "format": "path", "description": "The guide's file (guide.xml, or now-next.json).", "x-cli": { "flag": "--out" } } }, "required": [ "receipt", "lineup" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "file", "format", "schedule_root", "lineup" ], "description": "The guide's file and format (xmltv or now-next), the sources it names, and its range or instant" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "channel_lineup" ] }, "names": { "cli": "wai channel guide", "mcp": null, "c": "wai_channel_guide", "rust": "wai::channel::guide", "sdk": "wai.channel.guide" } }, { "id": "channel.verify", "summary": "A channel's receipt, its lineup and a guide verified together: the guide recomputed from the two and compared, each programme with whether it aired", "cli": "wai channel verify", "aliases": [], "usage": [ "wai channel verify --receipt R --lineup L [--guide G] the receipt, the lineup and the guide checked together;", " exit 1 with the reason when one does not verify" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "receipt": { "type": "string", "format": "path", "description": "The channel receipt, in its JSON carriage.", "x-cli": { "flag": "--receipt" } }, "lineup": { "type": "string", "format": "path", "description": "The lineup's file.", "x-cli": { "flag": "--lineup" } }, "guide": { "type": "string", "format": "path", "description": "An XMLTV guide or a now/next document.", "x-cli": { "flag": "--guide" } } }, "required": [ "receipt", "lineup" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "verdict", "part", "receipt", "lineup", "guide", "entry" ], "description": "What extensions/channel-lineup.md §8.3 states: the verdict and the part it is about, the receipt's identity, the lineup's digest, and the guide's programmes, each with whether it aired" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "channel_lineup" ] }, "names": { "cli": "wai channel verify", "mcp": null, "c": "wai_channel_verify", "rust": "wai::channel::verify", "sdk": "wai.channel.verify" } }, { "id": "audit.create", "summary": "A channel's stream-audit report recomputed from a collector's stored sessions and signed with the owner's key, by wai-audit itself", "cli": "wai audit report", "aliases": [], "usage": [ "wai audit report [--audit BIN] wai-audit report (extensions/stream-audit.md §11): the", " channel's report over .. (microseconds since 1970) from the sessions stored under , signed with the", " key WAI_AUDIT_KEY names; what it prints and its exit status are wai-audit's. The program is --audit,", " $WAI_AUDIT_BIN, wai-audit beside wai, or wai-audit on PATH" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "data": { "type": "string", "format": "path", "description": "The collector's data directory, where it stored the sessions.", "x-cli": { "positional": true } }, "channel": { "type": "string", "description": "The channel's name.", "x-cli": { "positional": true } }, "from": { "type": "integer", "description": "The period's start, microseconds since 1970.", "x-cli": { "positional": true } }, "to": { "type": "integer", "description": "The period's end, microseconds since 1970.", "x-cli": { "positional": true } }, "audit": { "type": "string", "format": "path", "description": "The collector's program (wai-audit).", "x-cli": { "flag": "--audit" } } }, "required": [ "data", "channel", "from", "to" ], "additionalProperties": false }, "output": { "type": "object", "description": "The channel's report as wai-audit report prints it: the report over the period with the owner's signature (extensions/stream-audit.md §11), or the collector's error" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai audit create", "mcp": null, "c": "wai_audit_create", "rust": "wai::audit::create", "sdk": "wai.audit.create" } }, { "id": "audit.check", "summary": "A served stream-audit report checked against the session bundles it reads, recomputed from them and its signature the owner's, by wai-audit itself", "cli": "wai audit check", "aliases": [], "usage": [ "wai audit check ... [--owner ] [--audit BIN] wai-audit check", " (extensions/stream-audit.md §11.4): the report recomputed from the bundles given and its signature checked against", " the owner's key (--owner, or WAI_AUDIT_OWNER); exit 1 when it is refused; what it prints and its exit status are", " wai-audit's. The program is --audit, $WAI_AUDIT_BIN, wai-audit beside wai, or wai-audit on PATH" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "served": { "type": "string", "format": "path", "description": "The report as the collector served it, JSON.", "x-cli": { "positional": true } }, "channel": { "type": "string", "description": "The channel's name.", "x-cli": { "positional": true } }, "bundles": { "type": "array", "items": { "type": "string" }, "description": "The session bundles the report reads.", "x-cli": { "positional": true } }, "owner": { "type": "string", "description": "The owner's key, 64 hexadecimal digits (WAI_AUDIT_OWNER otherwise).", "x-cli": { "flag": "--owner" } }, "audit": { "type": "string", "format": "path", "description": "The collector's program (wai-audit).", "x-cli": { "flag": "--audit" } } }, "required": [ "served", "channel", "bundles" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai audit check", "mcp": null, "c": "wai_audit_check", "rust": "wai::audit::check", "sdk": "wai.audit.check" } }, { "id": "audit.verify", "summary": "A stream-audit session bundle verified for its owner and the channels it serves, its outcome as JSON, by wai-audit itself", "cli": "wai audit verify", "aliases": [], "usage": [ "wai audit verify ... [--owner ] [--audit BIN] wai-audit verify (extensions/stream-audit.md", " §9, §10): the bundle's outcome for the owner's key (--owner, or WAI_AUDIT_OWNER) and the channels named; exit 1 when it", " is refused; what it prints and its exit status are wai-audit's. wai verify reads a bundle the same way" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "bundle": { "type": "string", "format": "path", "description": "The session bundle, JSON.", "x-cli": { "positional": true } }, "channels": { "type": "array", "items": { "type": "string" }, "description": "The channels the owner serves.", "x-cli": { "positional": true } }, "owner": { "type": "string", "description": "The owner's key, 64 hexadecimal digits (WAI_AUDIT_OWNER otherwise).", "x-cli": { "flag": "--owner" } }, "audit": { "type": "string", "format": "path", "description": "The collector's program (wai-audit).", "x-cli": { "flag": "--audit" } } }, "required": [ "bundle", "channels" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "outcome" ], "description": "The bundle's outcome as wai-audit verify prints it (extensions/stream-audit.md §10): accept with the session's record, or refuse with the reason and where" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai audit verify", "mcp": null, "c": "wai_audit_verify", "rust": "wai::audit::verify", "sdk": "wai.audit.verify" } }, { "id": "service.start", "summary": "A service of the toolchain started on this machine by its own program, wai-, from its configuration; --check holds the configuration to the program and starts nothing", "cli": "wai serve", "aliases": [], "usage": [ "wai serve [--config ] [--check] [--bin ] the role's program, run as itself: relay (wai-relay),", " room (wai-room), ingest (wai-ingest) and key-release (wai-key-release) from the configuration file --config names;", " audit (wai-audit), fleet (wai-fleet), ledger (wai-ledger) and quantum-service (wai-quantum-service) from their", " environment, as each program's own documentation states it. --check has the program read the file as it would", " start from it, report, and start nothing (exit 1 when it does not hold). What it prints and its exit status are the", " program's. The program is --bin, $WAI__BIN, the program beside wai, or on PATH; one that is not there is exit 5" ], "placement": "local", "effect": "runs", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "role": { "type": "string", "description": "relay, room, ingest, key-release, audit, fleet, ledger or quantum-service.", "x-cli": { "positional": true } }, "config": { "type": "string", "format": "path", "description": "The role's configuration file (relay, room, ingest and key-release).", "x-cli": { "flag": "--config" } }, "check": { "type": "boolean", "description": "Have the program read the configuration and report, starting nothing.", "x-cli": { "flag": "--check" } }, "bin": { "type": "string", "format": "path", "description": "The role's program (wai-).", "x-cli": { "flag": "--bin" } } }, "required": [ "role" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai service start", "mcp": null, "c": "wai_service_start", "rust": "wai::service::start", "sdk": "wai.service.start" } }, { "id": "quantum.run", "summary": "An OpenQASM program run on this machine as the quantum job service plans it, its result signed with this user's key, by wai-quantum itself", "cli": "wai quantum run", "aliases": [], "usage": [ "wai quantum run [] [wai-quantum run's options] [--quantum BIN] wai-quantum run: what it prints (with", " --json, its JSON) and its exit status are wai-quantum's. The program is --quantum, $WAI_QUANTUM_BIN, wai-quantum beside", " wai, or wai-quantum on PATH" ], "placement": "local", "effect": "runs", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "quantum", "stability": "preview", "input": { "type": "object", "properties": { "program": { "type": "string", "format": "path", "description": "The OpenQASM program; standard input when it is left out.", "x-cli": { "positional": true } }, "quantum": { "type": "string", "format": "path", "description": "The quantum command line (wai-quantum).", "x-cli": { "flag": "--quantum" } } }, "required": [], "additionalProperties": false }, "output": { "description": "What wai-quantum prints for the verb with --json: its own JSON, unchanged" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai quantum run", "mcp": "quantum_run", "c": "wai_quantum_run", "rust": "wai::quantum::run", "sdk": "wai.quantum.run" } }, { "id": "quantum.inspect", "summary": "The method an OpenQASM program would run on and why, with the memory and work it would take, without running it, by wai-quantum itself", "cli": "wai quantum plan", "aliases": [], "usage": [ "wai quantum plan [] [wai-quantum plan's options] [--quantum BIN] wai-quantum plan: what it prints and", " its exit status are wai-quantum's" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "quantum", "stability": "preview", "input": { "type": "object", "properties": { "program": { "type": "string", "format": "path", "description": "The OpenQASM program; standard input when it is left out.", "x-cli": { "positional": true } }, "quantum": { "type": "string", "format": "path", "description": "The quantum command line (wai-quantum).", "x-cli": { "flag": "--quantum" } } }, "required": [], "additionalProperties": false }, "output": { "description": "What wai-quantum prints for the verb with --json: its own JSON, unchanged" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai quantum inspect", "mcp": "quantum_inspect", "c": "wai_quantum_inspect", "rust": "wai::quantum::inspect", "sdk": "wai.quantum.inspect" } }, { "id": "quantum.check", "summary": "An OpenQASM program read as the engine reads it, each problem with its line, by wai-quantum itself", "cli": "wai quantum lint", "aliases": [], "usage": [ "wai quantum lint [] [wai-quantum lint's options] [--quantum BIN] wai-quantum lint: what it prints and", " its exit status are wai-quantum's" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "quantum", "stability": "preview", "input": { "type": "object", "properties": { "program": { "type": "string", "format": "path", "description": "The OpenQASM program; standard input when it is left out.", "x-cli": { "positional": true } }, "quantum": { "type": "string", "format": "path", "description": "The quantum command line (wai-quantum).", "x-cli": { "flag": "--quantum" } } }, "required": [], "additionalProperties": false }, "output": { "description": "What wai-quantum prints for the verb with --json: its own JSON, unchanged" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai quantum check", "mcp": "quantum_check", "c": "wai_quantum_check", "rust": "wai::quantum::check", "sdk": "wai.quantum.check" } }, { "id": "quantum.verify", "summary": "A quantum result's receipt checked: one from a run here, from the job service or from a lab tool, by wai-quantum itself", "cli": "wai quantum verify", "aliases": [], "usage": [ "wai quantum verify [wai-quantum verify's options] [--quantum BIN] wai-quantum verify: what it prints", " and its exit status are wai-quantum's" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "quantum", "stability": "preview", "input": { "type": "object", "properties": { "result": { "type": "string", "format": "path", "description": "A result with its receipt (run --json, submit --json, the service's), or a lab receipt.", "x-cli": { "positional": true } }, "quantum": { "type": "string", "format": "path", "description": "The quantum command line (wai-quantum).", "x-cli": { "flag": "--quantum" } } }, "required": [ "result" ], "additionalProperties": false }, "output": { "description": "What wai-quantum prints for the verb with --json: its own JSON, unchanged" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai quantum verify", "mcp": "quantum_verify", "c": "wai_quantum_verify", "rust": "wai::quantum::verify", "sdk": "wai.quantum.verify" } }, { "id": "quantum.list", "summary": "Each simulation method, what it takes and how far it reaches in a job's memory here, by wai-quantum itself", "cli": "wai quantum methods", "aliases": [], "usage": [ "wai quantum methods [wai-quantum methods' options] [--quantum BIN] wai-quantum methods: what it prints and its exit", " status are wai-quantum's" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "quantum", "stability": "preview", "input": { "type": "object", "properties": { "quantum": { "type": "string", "format": "path", "description": "The quantum command line (wai-quantum).", "x-cli": { "flag": "--quantum" } } }, "required": [], "additionalProperties": false }, "output": { "description": "What wai-quantum prints for the verb with --json: its own JSON, unchanged" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai quantum list", "mcp": "quantum_list", "c": "wai_quantum_list", "rust": "wai::quantum::list", "sdk": "wai.quantum.list" } }, { "id": "mcp.start", "summary": "WAI's operations as tools for a coding agent: a Model Context Protocol server on standard input and output, in toolsets", "cli": "wai mcp", "aliases": [], "usage": [ "wai mcp [--toolset core,dev,app,quantum] [--read-only] [--project DIR] [--spec-root DIR] [--room-bin BIN] [--relay-bin BIN]", " [--quantum-bin BIN] [--target [--allow-write]] serves until standard input closes; --dry-run names the", " tools it would serve and serves nothing. The quantum toolset's tools are wai-quantum's own, each answered by", " wai-quantum mcp on this machine. With --target, the operations of the service's API are tools too, each sent to its", " route on that target alone: those that read it, and those that change it where the server may (a target on", " this machine, or another with --allow-write; never with --read-only or to a read-only target)" ], "placement": "client", "effect": "runs", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "toolset": { "type": "string", "description": "The toolsets to offer, comma-separated (core when none is named).", "x-cli": { "flag": "--toolset" } }, "read_only": { "type": "boolean", "description": "Offer only the tools that read or run a verifier.", "x-cli": { "flag": "--read-only" } }, "project": { "type": "string", "format": "path", "description": "The directory the server may write in (the current one).", "x-cli": { "flag": "--project" } }, "spec_root": { "type": "string", "format": "path", "description": "The wai/ directory whose text and corpora the tools read.", "x-cli": { "flag": "--spec-root" } }, "room_bin": { "type": "string", "format": "path", "description": "The room service the development stack runs.", "x-cli": { "flag": "--room-bin" } }, "relay_bin": { "type": "string", "format": "path", "description": "The relay the development stack runs.", "x-cli": { "flag": "--relay-bin" } }, "quantum_bin": { "type": "string", "format": "path", "description": "The quantum command line whose server answers the quantum toolset (wai-quantum).", "x-cli": { "flag": "--quantum-bin" } }, "target": { "type": "string", "description": "The service it acts on: a target's name (wai target list) or a service's http:// or https:// address.", "x-cli": { "flag": "--target" } }, "allow_write": { "type": "boolean", "description": "Offer the tools that change the target where it is on another machine.", "x-cli": { "flag": "--allow-write" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": { "description": "One JSON-RPC 2.0 message per line, the Model Context Protocol" }, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "mcp" ] }, "names": { "cli": "wai mcp start", "mcp": null, "c": "wai_mcp_start", "rust": "wai::mcp::start", "sdk": "wai.mcp.start" } }, { "id": "agent.setup", "summary": "A project made ready for coding agents: AGENTS.md, an import of it in a CLAUDE.md already there, and wai mcp registered in its MCP configuration", "cli": "wai setup-agent", "aliases": [], "usage": [ "wai setup-agent [--dir D] [--all] [--only FILE,...] [--toolset core,dev,app] [--command PROGRAM]", " a file that exists changes only once confirmed (--yes, or yes at a terminal); --dry-run shows each diff" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "The project directory (the current one).", "x-cli": { "flag": "--dir" } }, "all": { "type": "boolean", "description": "Write every agent's configuration file, not only those whose directory is there.", "x-cli": { "flag": "--all" } }, "only": { "type": "string", "description": "Only these files, comma-separated.", "x-cli": { "flag": "--only" } }, "toolset": { "type": "string", "description": "The toolsets the registered server offers.", "x-cli": { "flag": "--toolset" } }, "command": { "type": "string", "description": "The program the registration runs (wai).", "x-cli": { "flag": "--command" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "project", "dry_run", "files" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai agent setup", "mcp": null, "c": "wai_agent_setup", "rust": "wai::agent::setup", "sdk": "wai.agent.setup" } }, { "id": "app.guide", "summary": "The line language and every WAI widget, as a model writing a WAI app is told them", "cli": "wai app guide", "aliases": [], "usage": [ "wai app guide what a model writing an app made with Create is told" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "app", "stability": "preview", "input": { "type": "object", "properties": {}, "required": [], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "app" ] }, "names": { "cli": "wai app guide", "mcp": "app_guide", "c": "wai_app_guide", "rust": "wai::app::guide", "sdk": "wai.app.guide" } }, { "id": "app.check", "summary": "An app program checked against the WAI registry and WAI's rules, every error with its line and reason code; in a project, its room and runtime too", "cli": "wai app check", "aliases": [], "usage": [ "wai app check [ | ] exit 1 when something does not hold, each failure named" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "app", "stability": "preview", "input": { "type": "object", "properties": { "program": { "type": "string", "format": "path", "description": "A project directory or a program (.).", "x-cli": { "positional": true } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "program", "errors", "failures", "checked" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "app" ] }, "names": { "cli": "wai app check", "mcp": "app_check", "c": "wai_app_check", "rust": "wai::app::check", "sdk": "wai.app.check" } }, { "id": "app.export", "summary": "An app made with Create written as a project: the program, wai.json naming its room, the page and its runtime, a README, AGENTS.md and the licence", "cli": "wai app export", "aliases": [], "usage": [ "wai app export [--runtime DIR] the same as wai create --from " ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "app", "stability": "preview", "input": { "type": "object", "properties": { "program": { "type": "string", "format": "path", "description": "The program made with Create.", "x-cli": { "positional": true } }, "dir": { "type": "string", "format": "path", "description": "A directory that does not exist or is empty.", "x-cli": { "positional": true } }, "runtime": { "type": "string", "format": "path", "description": "A Create runtime ($WAI_APP_RUNTIME, or share/wai/app beside wai).", "x-cli": { "flag": "--runtime" } } }, "required": [ "program", "dir" ], "additionalProperties": false }, "output": { "type": "object", "properties": { "text": { "type": "string" } }, "required": [ "text" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "app" ] }, "names": { "cli": "wai app export", "mcp": "app_export", "c": "wai_app_export", "rust": "wai::app::export", "sdk": "wai.app.export" } }, { "id": "app.stream", "summary": "A program streamed into the person's open Create page through the bridge wai mcp runs on loopback", "cli": null, "aliases": [], "usage": [ "wai (wai mcp --toolset app: app_stream)" ], "placement": "local", "effect": "runs", "dry_run": false, "confirm": null, "route": null, "doors": { "cli": false, "mcp": true, "http": false }, "toolset": "app", "stability": "preview", "input": { "type": "object", "properties": { "program": { "type": "string", "description": "The program's text." }, "chunk": { "type": "integer", "description": "Characters a chunk (24)." }, "pace_ms": { "type": "integer", "description": "Milliseconds between chunks (30)." } }, "required": [ "program" ], "additionalProperties": false }, "output": { "description": "The tool's structured result" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "app" ] }, "names": { "cli": null, "mcp": "app_stream", "c": "wai_app_stream", "rust": "wai::app::stream", "sdk": "wai.app.stream" } }, { "id": "registry.show", "summary": "One capability's registry entry, whether this build decodes it, its role, and the specification lines that name it", "cli": "wai registry show", "aliases": [], "usage": [ "wai registry show [--spec-root ] one capability's registry entry, whether this build decodes it,", " its role, and the specification lines that name it, where the specification's text is here (--spec-root,", " $WAI_SPEC_ROOT, or the tree this binary was built from)" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "capability": { "type": "string", "description": "A capability string, e.g. wai.image.avif.", "x-cli": { "positional": true } }, "spec_root": { "type": "string", "format": "path", "description": "The wai/ directory whose text is read, on the command line (wai mcp has a --spec-root of its own).", "x-cli": { "flag": "--spec-root" } } }, "required": [ "capability" ], "additionalProperties": false }, "output": { "description": "The tool's structured result" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "mcp" ] }, "names": { "cli": "wai registry show", "mcp": "registry_show", "c": "wai_registry_show", "rust": "wai::registry::show", "sdk": "wai.registry.show" } }, { "id": "docs.search", "summary": "Lines of the specification and its extensions holding every word of a query, each with its file, line and section", "cli": "wai docs search", "aliases": [], "usage": [ "wai docs search ... [--limit N] [--spec-root ] the lines of the specification and its extensions that hold", " every word, with each one's file, line and section, offline; the text is --spec-root's, $WAI_SPEC_ROOT's, or the", " tree this binary was built from" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "query": { "type": "string", "description": "Words that must all appear on a line.", "x-cli": { "positional": true } }, "limit": { "type": "integer", "description": "At most this many hits (20).", "x-cli": { "flag": "--limit" } }, "spec_root": { "type": "string", "format": "path", "description": "The wai/ directory whose text is searched, on the command line (wai mcp has a --spec-root of its own).", "x-cli": { "flag": "--spec-root" } } }, "required": [ "query" ], "additionalProperties": false }, "output": { "description": "The tool's structured result" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "mcp" ] }, "names": { "cli": "wai docs search", "mcp": "docs_search", "c": "wai_docs_search", "rust": "wai::docs::search", "sdk": "wai.docs.search" } }, { "id": "dev.stop", "summary": "The development relay and room service a wai mcp server started, stopped", "cli": null, "aliases": [], "usage": [ "wai (wai mcp: dev_stop)" ], "placement": "local", "effect": "runs", "dry_run": false, "confirm": null, "route": null, "doors": { "cli": false, "mcp": true, "http": false }, "toolset": "dev", "stability": "stable", "input": { "type": "object", "properties": {}, "required": [], "additionalProperties": false }, "output": { "description": "The tool's structured result" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": null, "mcp": "dev_stop", "c": "wai_dev_stop", "rust": "wai::dev::stop", "sdk": "wai.dev.stop" } }, { "id": "room.join", "summary": "A test principal enters the development room with its grant, publishes its tracks, and is seen joined by the room's clock", "cli": "wai room join", "aliases": [], "usage": [ "wai room join --principal NAME [--dir D] [--objects N] on the stack wai dev runs on this machine (D/stack.json; D is", " .wai/dev by default): the test principal NAME, its key derived from its name as wai mcp derives it, is granted", " the publisher role by the stack's room service, enters the room with a proof of its key, publishes its audio and", " video tracks, N objects on each (1) with their receipts, and is seen joined by the room's clock. It stays in the", " room until wai room leave. A stale record or stack is refused" ], "placement": "client", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "dev", "stability": "stable", "input": { "type": "object", "properties": { "target": { "type": "string", "description": "local: the development room on this machine." }, "principal": { "type": "string", "description": "A test principal's name; on the command line it is granted the publisher role first, and in wai mcp it is one room_grant granted that role.", "x-cli": { "flag": "--principal" } }, "objects": { "type": "integer", "description": "Objects on each track (1, at most 64).", "x-cli": { "flag": "--objects" } }, "receipts": { "type": "boolean", "description": "Each object with its receipt (true); without, the relay drops them." }, "dir": { "type": "string", "format": "path", "description": "The stack's directory, whose stack.json wai dev writes (.wai/dev).", "x-cli": { "flag": "--dir" } } }, "required": [ "principal" ], "additionalProperties": false }, "output": { "description": "The tool's structured result" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "ed25519" ] }, "names": { "cli": "wai room join", "mcp": "room_join", "c": "wai_room_join", "rust": "wai::room::join", "sdk": "wai.room.join" } }, { "id": "room.leave", "summary": "A test principal's session in the development room closed, and its leave seen by the room's clock", "cli": "wai room leave", "aliases": [], "usage": [ "wai room leave --principal NAME [--dir D] the session of the test principal NAME in the room of the stack wai dev runs", " on this machine (D/stack.json) closed, and its leave seen by the room's clock" ], "placement": "client", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "dev", "stability": "stable", "input": { "type": "object", "properties": { "target": { "type": "string", "description": "local: the development room on this machine." }, "principal": { "type": "string", "description": "The test principal's name.", "x-cli": { "flag": "--principal" } }, "dir": { "type": "string", "format": "path", "description": "The stack's directory, whose stack.json wai dev writes (.wai/dev).", "x-cli": { "flag": "--dir" } } }, "required": [ "principal" ], "additionalProperties": false }, "output": { "description": "The tool's structured result" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "ed25519" ] }, "names": { "cli": "wai room leave", "mcp": "room_leave", "c": "wai_room_leave", "rust": "wai::room::leave", "sdk": "wai.room.leave" } }, { "id": "session.show", "summary": "The development room's session as a verifier is given it: descriptor, grants, key-log head and the clock's event chain", "cli": "wai session show", "aliases": [], "usage": [ "wai session show [--dir D] the room of the stack wai dev runs on this machine (D/stack.json) as a verifier is given", " it: its descriptor, grants, key-log head and the clock's event chain, as JSON (wai mcp's receipt_verify takes it)" ], "placement": "client", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "dev", "stability": "stable", "input": { "type": "object", "properties": { "target": { "type": "string", "description": "local: the development room on this machine." }, "dir": { "type": "string", "format": "path", "description": "The stack's directory, whose stack.json wai dev writes (.wai/dev).", "x-cli": { "flag": "--dir" } } }, "required": [], "additionalProperties": false }, "output": { "description": "The tool's structured result" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai session show", "mcp": "session_show", "c": "wai_session_show", "rust": "wai::session::show", "sdk": "wai.session.show" } }, { "id": "room.test", "summary": "Synthetic participants on the development stack: a publisher's objects with their receipts received by a viewer, how many, how late, and the path as QUIC measured it", "cli": "wai room test", "aliases": [], "usage": [ "wai room test [--dir D] [--objects N] [--every-ms MS] [--room BIN] a publisher and a viewer of fresh keys on the", " stack wai dev runs on this machine (recorded in D/stack.json; D is .wai/dev by default): the objects", " received of those sent (50, one every 20 ms), how late, and over QUIC, when the stack was started with", " --impair, the packets QUIC declared lost and its round trip beside the datagrams the impaired path", " dropped. A record whose stack is not running, or a stack of another toolchain, is refused as stale.", " Exit 1 when an object did not arrive" ], "placement": "client", "effect": "runs", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "dev", "stability": "preview", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "The stack's directory, whose stack.json wai dev writes (.wai/dev).", "x-cli": { "flag": "--dir" } }, "objects": { "type": "integer", "description": "Objects sent (50, at most 1000).", "x-cli": { "flag": "--objects" } }, "every_ms": { "type": "integer", "description": "Milliseconds between objects (20).", "x-cli": { "flag": "--every-ms" } }, "room": { "type": "string", "format": "path", "description": "The room service's binary, whose participant mode runs them (the stack's).", "x-cli": { "flag": "--room" } } }, "required": [], "additionalProperties": false }, "output": { "description": "The tool's structured result" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai room test", "mcp": "room_test", "c": "wai_room_test", "rust": "wai::room::test", "sdk": "wai.room.test" } }, { "id": "room.load", "summary": "Synthetic participants load the development stack: one publisher, many viewers, the deliveries made of those owed and how late; the client half alone", "cli": "wai room load", "aliases": [], "usage": [ "wai room load [--dir D] [--viewers N] [--objects N] [--every-ms MS] [--room BIN] one publisher and N viewers (8, at", " most 64) of fresh keys on the stack wai dev runs on this machine (D/stack.json): the deliveries made of", " those owed, how late, how long the viewers took to enter, and the path over QUIC. The client half alone:", " nothing measures what the relay spends. A stale record or stack is refused. Exit 1 when a delivery", " was not made" ], "placement": "client", "effect": "runs", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "dev", "stability": "preview", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "The stack's directory, whose stack.json wai dev writes (.wai/dev).", "x-cli": { "flag": "--dir" } }, "viewers": { "type": "integer", "description": "Viewers (8, at most 64).", "x-cli": { "flag": "--viewers" } }, "objects": { "type": "integer", "description": "Objects sent (50, at most 1000).", "x-cli": { "flag": "--objects" } }, "every_ms": { "type": "integer", "description": "Milliseconds between objects (20).", "x-cli": { "flag": "--every-ms" } }, "room": { "type": "string", "format": "path", "description": "The room service's binary, whose participant mode runs them (the stack's).", "x-cli": { "flag": "--room" } } }, "required": [], "additionalProperties": false }, "output": { "description": "The tool's structured result" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai room load", "mcp": "room_load", "c": "wai_room_load", "rust": "wai::room::load", "sdk": "wai.room.load" } }, { "id": "room.invite", "summary": "An invitation to host the development room's remote desktop, signed by the room's authority from the stack's keys", "cli": "wai room invite", "aliases": [], "usage": [ "wai room invite [--dir D] [--seconds S] [--room BIN] an invitation, in hexadecimal, signed by the authority of the", " room wai dev keeps in D (D/room-keys.toml; D is .wai/dev by default) by its room service's invite mode, good for S", " seconds (3600, at most 30 days) and bound to the first key that presents it: what the host of a room started with", " wai dev --remote enters with. Nothing is sent and nothing written" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "dev", "stability": "preview", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "The stack's directory, which holds its room's keys (.wai/dev).", "x-cli": { "flag": "--dir" } }, "seconds": { "type": "integer", "description": "How long the invitation holds, in seconds (3600, at most 2592000).", "x-cli": { "flag": "--seconds" } }, "room": { "type": "string", "format": "path", "description": "The room service's binary, whose invite mode signs it (the stack's, else wai-room beside wai or on PATH).", "x-cli": { "flag": "--room" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "development_only", "invitation", "valid_s", "keys" ], "description": "An invitation to host the development room's remote desktop, in hexadecimal, signed by the room's authority (the keys file named) and good for valid_s seconds, bound to the first key that presents it" }, "stream": null, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai room invite", "mcp": null, "c": "wai_room_invite", "rust": "wai::room::invite", "sdk": "wai.room.invite" } }, { "id": "log.tail", "summary": "A log of the development stack, read from its directory: the relay's, the room service's, the conversation's or the synthetic participants'; --follow reads on as it grows", "cli": "wai log tail", "aliases": [], "usage": [ "wai log tail [--dir D] [--name relay|room|conversation|participants] [--from BYTE] [--follow] [--for S] the log", " wai dev keeps in D (.wai/dev by default; relay by default) from BYTE on, or its last 64 KiB; with --follow it", " goes on reading whole lines as the log grows, while the stack recorded there runs (D/stack.json) or for S", " seconds, and with --json writes each read as one JSON line" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "dev", "stability": "preview", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "The stack's directory, where wai dev keeps its logs (.wai/dev).", "x-cli": { "flag": "--dir" } }, "name": { "type": "string", "description": "The log: relay, room, conversation or participants (relay).", "x-cli": { "flag": "--name" } }, "from": { "type": "integer", "description": "The byte to read from (the last 64 KiB otherwise).", "x-cli": { "flag": "--from" } }, "follow": { "type": "boolean", "description": "Read on as the log grows, while the stack runs.", "x-cli": { "flag": "--follow" } }, "for": { "type": "integer", "description": "With --follow, stop after this many seconds.", "x-cli": { "flag": "--for" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "name", "file", "from", "next", "text" ], "properties": { "name": { "type": "string" }, "file": { "type": "string" }, "from": { "type": "integer" }, "next": { "type": "integer" }, "text": { "type": "string" } }, "description": "The log's name and file, the text from the byte from to the byte next, and where a later read starts (next)" }, "stream": { "type": "object", "required": [ "name", "from", "next", "text" ], "properties": { "name": { "type": "string" }, "from": { "type": "integer" }, "next": { "type": "integer" }, "text": { "type": "string" } }, "description": "What the log gained: whole lines, from the byte from to the byte next" }, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai log tail", "mcp": null, "c": "wai_log_tail", "rust": "wai::log::tail", "sdk": "wai.log.tail" } }, { "id": "session.list", "summary": "The sessions the development stack's relay has closed, each its signed summary as the relay wrote it; --follow lists each as it closes", "cli": "wai session list", "aliases": [], "usage": [ "wai session list [--dir D] [--last N] [--follow] [--for S] the signed session summaries the stack's relay wrote in D", " (D/sessions.jsonl; D is .wai/dev by default), the last N (50; 0 for all), oldest first; with --follow each new one", " as the relay writes it, while the stack recorded there runs (D/stack.json) or for S seconds, and with --json each", " as one JSON line" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "dev", "stability": "preview", "input": { "type": "object", "properties": { "dir": { "type": "string", "format": "path", "description": "The stack's directory, where its relay writes sessions.jsonl (.wai/dev).", "x-cli": { "flag": "--dir" } }, "last": { "type": "integer", "description": "How many of the latest to list (50; 0 lists every one).", "x-cli": { "flag": "--last" } }, "follow": { "type": "boolean", "description": "List each new summary as the relay writes it, while the stack runs.", "x-cli": { "flag": "--follow" } }, "for": { "type": "integer", "description": "With --follow, stop after this many seconds.", "x-cli": { "flag": "--for" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "file", "sessions", "unread" ], "properties": { "file": { "type": "string" }, "sessions": { "type": "array", "items": { "type": "object", "required": [ "summary", "signature" ] } }, "unread": { "type": "integer" } }, "description": "The relay's signed session summaries (sessions.jsonl), oldest first, each as the relay wrote it, and how many lines did not read as one" }, "stream": { "type": "object", "required": [ "summary", "signature" ], "description": "One signed session summary, as the relay wrote it" }, "since": "0.6.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai session list", "mcp": null, "c": "wai_session_list", "rust": "wai::session::list", "sdk": "wai.session.list" } }, { "id": "service.show", "summary": "The service's health", "cli": "wai service show", "aliases": [], "usage": [ "wai service show [--target ] [--query =]... GET / on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai service show", "mcp": null, "c": "wai_service_show", "rust": "wai::service::show", "sdk": "wai.service.show" } }, { "id": "service.check", "summary": "The service's health", "cli": "wai service check", "aliases": [], "usage": [ "wai service check [--target ] [--query =]... GET /health on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/health" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1health/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai service check", "mcp": null, "c": "wai_service_check", "rust": "wai::service::check", "sdk": "wai.service.check" } }, { "id": "room.show", "summary": "The current room", "cli": "wai room show", "aliases": [], "usage": [ "wai room show [--target ] [--query =]... GET /room on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/room" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1room/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai room show", "mcp": null, "c": "wai_room_show", "rust": "wai::room::show", "sdk": "wai.room.show" } }, { "id": "room.grant", "summary": "A grant for a key", "cli": "wai room grant", "aliases": [], "usage": [ "wai room grant [--target ] [--body |@] [--yes] POST /grant on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/grant" }, "doors": { "cli": true, "mcp": true, "http": true }, "toolset": "dev", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1grant/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai room grant", "mcp": "room_grant", "c": "wai_room_grant", "rust": "wai::room::grant", "sdk": "wai.room.grant" } }, { "id": "admission.show", "summary": "The room's admission receipt so far", "cli": "wai admission show", "aliases": [], "usage": [ "wai admission show [--target ] [--query =]... GET /age/receipt on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/age/receipt" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1age~1receipt/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai admission show", "mcp": null, "c": "wai_admission_show", "rust": "wai::admission::show", "sdk": "wai.admission.show" } }, { "id": "mls.tail", "summary": "The room's log of MLS messages", "cli": "wai mls tail", "aliases": [], "usage": [ "wai mls tail [--target ] [--query =]... GET /mls on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/mls" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1mls/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai mls tail", "mcp": null, "c": "wai_mls_tail", "rust": "wai::mls::tail", "sdk": "wai.mls.tail" } }, { "id": "mls.import", "summary": "A KeyPackage for a granted principal's Add", "cli": "wai mls import", "aliases": [], "usage": [ "wai mls import [--target ] [--body |@] [--yes] POST /mls/key-package on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/mls/key-package" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1mls~1key-package/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai mls import", "mcp": null, "c": "wai_mls_import", "rust": "wai::mls::import", "sdk": "wai.mls.import" } }, { "id": "mls.update", "summary": "A GroupInfo, or a commit and its Welcome", "cli": "wai mls update", "aliases": [], "usage": [ "wai mls update [--target ] [--body |@] [--yes] POST /mls/post on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/mls/post" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1mls~1post/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai mls update", "mcp": null, "c": "wai_mls_update", "rust": "wai::mls::update", "sdk": "wai.mls.update" } }, { "id": "performance.list", "summary": "The clock's log of objects", "cli": "wai performance list", "aliases": [], "usage": [ "wai performance list [--target ] [--query =]... GET /co/objects on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/co/objects" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1objects/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai performance list", "mcp": null, "c": "wai_performance_list", "rust": "wai::performance::list", "sdk": "wai.performance.list" } }, { "id": "performance.show", "summary": "The room's co-performance as the clock holds it", "cli": "wai performance show", "aliases": [], "usage": [ "wai performance show [--target ] [--query =]... GET /co/state on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/co/state" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1state/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai performance show", "mcp": null, "c": "wai_performance_show", "rust": "wai::performance::show", "sdk": "wai.performance.show" } }, { "id": "schedule.create", "summary": "A turn schedule the clock signs", "cli": "wai schedule create", "aliases": [], "usage": [ "wai schedule create [--target ] [--body |@] [--yes] POST /co/schedule on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/co/schedule" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1schedule/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai schedule create", "mcp": null, "c": "wai_schedule_create", "rust": "wai::schedule::create", "sdk": "wai.schedule.create" } }, { "id": "handover.create", "summary": "A handover the clock signs", "cli": "wai handover create", "aliases": [], "usage": [ "wai handover create [--target ] [--body |@] [--yes] POST /co/handover on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/co/handover" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1handover/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai handover create", "mcp": null, "c": "wai_handover_create", "rust": "wai::handover::create", "sdk": "wai.handover.create" } }, { "id": "window.create", "summary": "A selection window the clock signs", "cli": "wai window create", "aliases": [], "usage": [ "wai window create [--target ] [--body |@] [--yes] POST /co/window on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/co/window" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1window/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai window create", "mcp": null, "c": "wai_window_create", "rust": "wai::window::create", "sdk": "wai.window.create" } }, { "id": "fidelity.create", "summary": "A fidelity statement now", "cli": "wai fidelity create", "aliases": [], "usage": [ "wai fidelity create [--target ] [--body |@] [--yes] POST /co/fidelity on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/co/fidelity" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1fidelity/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai fidelity create", "mcp": null, "c": "wai_fidelity_create", "rust": "wai::fidelity::create", "sdk": "wai.fidelity.create" } }, { "id": "time.show", "summary": "The service's clock", "cli": "wai time show", "aliases": [], "usage": [ "wai time show [--target ] [--query =]... GET /watch/time on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/watch/time" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1time/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai time show", "mcp": null, "c": "wai_time_show", "rust": "wai::time::show", "sdk": "wai.time.show" } }, { "id": "source.fetch", "summary": "The watch room's source, whole", "cli": "wai source fetch", "aliases": [], "usage": [ "wai source fetch [--target ] [--query =]... GET /watch/source on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/watch/source" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1source/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai source fetch", "mcp": null, "c": "wai_source_fetch", "rust": "wai::source::fetch", "sdk": "wai.source.fetch" } }, { "id": "watch.setup", "summary": "A challenge for a join's proof", "cli": "wai watch setup", "aliases": [], "usage": [ "wai watch setup [--target ] [--query =]... [--yes] GET /watch/challenge on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "GET", "path": "/watch/challenge" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1challenge/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai watch setup", "mcp": null, "c": "wai_watch_setup", "rust": "wai::watch::setup", "sdk": "wai.watch.setup" } }, { "id": "watch.tail", "summary": "The watch room's log", "cli": "wai watch tail", "aliases": [], "usage": [ "wai watch tail [--target ] [--query =]... GET /watch on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/watch" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai watch tail", "mcp": null, "c": "wai_watch_tail", "rust": "wai::watch::tail", "sdk": "wai.watch.tail" } }, { "id": "watch.show", "summary": "The room as a co-watch verifier is given it", "cli": "wai watch show", "aliases": [], "usage": [ "wai watch show [--target ] [--query =]... GET /watch/room on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/watch/room" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1room/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai watch show", "mcp": null, "c": "wai_watch_show", "rust": "wai::watch::show", "sdk": "wai.watch.show" } }, { "id": "watch.join", "summary": "A viewer enters by a proof of its key", "cli": "wai watch join", "aliases": [], "usage": [ "wai watch join [--target ] [--body |@] [--yes] POST /watch/join on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/watch/join" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1join/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai watch join", "mcp": null, "c": "wai_watch_join", "rust": "wai::watch::join", "sdk": "wai.watch.join" } }, { "id": "watch.update", "summary": "A viewer's events, checked and carried in order", "cli": "wai watch update", "aliases": [], "usage": [ "wai watch update [--target ] [--body |@] [--yes] POST /watch/post on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/watch/post" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1post/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai watch update", "mcp": null, "c": "wai_watch_update", "rust": "wai::watch::update", "sdk": "wai.watch.update" } }, { "id": "control.grant", "summary": "The host hands control over", "cli": "wai control grant", "aliases": [], "usage": [ "wai control grant [--target ] [--body |@] [--yes] POST /remote/control on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/remote/control" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1remote~1control/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai control grant", "mcp": null, "c": "wai_control_grant", "rust": "wai::control::grant", "sdk": "wai.control.grant" } }, { "id": "remote.show", "summary": "The session as the clock holds it", "cli": "wai remote show", "aliases": [], "usage": [ "wai remote show [--target ] [--query =]... GET /remote/room on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/remote/room" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1remote~1room/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai remote show", "mcp": null, "c": "wai_remote_show", "rust": "wai::remote::show", "sdk": "wai.remote.show" } }, { "id": "remote.verify", "summary": "That session verified", "cli": "wai remote verify", "aliases": [], "usage": [ "wai remote verify [--target ] [--query =]... GET /remote/state on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/remote/state" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1remote~1state/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai remote verify", "mcp": null, "c": "wai_remote_verify", "rust": "wai::remote::verify", "sdk": "wai.remote.verify" } }, { "id": "conversation.show", "summary": "The conversation", "cli": "wai conversation show", "aliases": [], "usage": [ "wai conversation show [--target ] [--query =]... GET /msg on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/msg" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai conversation show", "mcp": null, "c": "wai_conversation_show", "rust": "wai::conversation::show", "sdk": "wai.conversation.show" } }, { "id": "conversation.setup", "summary": "A challenge for a proof", "cli": "wai conversation setup", "aliases": [], "usage": [ "wai conversation setup [--target ] [--query =]... [--yes] GET /msg/challenge on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "GET", "path": "/msg/challenge" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1challenge/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai conversation setup", "mcp": null, "c": "wai_conversation_setup", "rust": "wai::conversation::setup", "sdk": "wai.conversation.setup" } }, { "id": "conversation.join", "summary": "A key that proves itself is admitted", "cli": "wai conversation join", "aliases": [], "usage": [ "wai conversation join [--target ] [--body |@] [--yes] POST /msg/join on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/msg/join" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1join/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai conversation join", "mcp": null, "c": "wai_conversation_join", "rust": "wai::conversation::join", "sdk": "wai.conversation.join" } }, { "id": "conversation.tail", "summary": "The log as it is owed to the caller", "cli": "wai conversation tail", "aliases": [], "usage": [ "wai conversation tail [--target ] [--query =]... GET /msg/log on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/msg/log" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1log/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai conversation tail", "mcp": null, "c": "wai_conversation_tail", "rust": "wai::conversation::tail", "sdk": "wai.conversation.tail" } }, { "id": "conversation.import", "summary": "A member's KeyPackage", "cli": "wai conversation import", "aliases": [], "usage": [ "wai conversation import [--target ] [--body |@] [--yes] POST /msg/key-package on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/msg/key-package" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1key-package/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai conversation import", "mcp": null, "c": "wai_conversation_import", "rust": "wai::conversation::import", "sdk": "wai.conversation.import" } }, { "id": "conversation.update", "summary": "A GroupInfo, or a commit and its Welcome", "cli": "wai conversation update", "aliases": [], "usage": [ "wai conversation update [--target ] [--body |@] [--yes] POST /msg/mls on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/msg/mls" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1mls/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai conversation update", "mcp": null, "c": "wai_conversation_update", "rust": "wai::conversation::update", "sdk": "wai.conversation.update" } }, { "id": "message.create", "summary": "A message", "cli": "wai message create", "aliases": [], "usage": [ "wai message create [--target ] [--body |@] [--yes] POST /msg/post on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/msg/post" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1post/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai message create", "mcp": null, "c": "wai_message_create", "rust": "wai::message::create", "sdk": "wai.message.create" } }, { "id": "acknowledgement.create", "summary": "An acknowledgement", "cli": "wai acknowledgement create", "aliases": [], "usage": [ "wai acknowledgement create [--target ] [--body |@] [--yes] POST /msg/ack on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/msg/ack" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1ack/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai acknowledgement create", "mcp": null, "c": "wai_acknowledgement_create", "rust": "wai::acknowledgement::create", "sdk": "wai.acknowledgement.create" } }, { "id": "conversation.leave", "summary": "The caller leaves", "cli": "wai conversation leave", "aliases": [], "usage": [ "wai conversation leave [--target ] [--body |@] [--yes] POST /msg/leave on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/msg/leave" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1leave/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai conversation leave", "mcp": null, "c": "wai_conversation_leave", "rust": "wai::conversation::leave", "sdk": "wai.conversation.leave" } }, { "id": "member.delete", "summary": "The owner removes a member", "cli": "wai member delete", "aliases": [], "usage": [ "wai member delete [--target ] [--body |@] [--yes] POST /msg/remove on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/msg/remove" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1remove/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai member delete", "mcp": null, "c": "wai_member_delete", "rust": "wai::member::delete", "sdk": "wai.member.delete" } }, { "id": "call.setup", "summary": "A challenge for a proof", "cli": "wai call setup", "aliases": [], "usage": [ "wai call setup [--target ] [--query =]... [--yes] GET /call/challenge on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "GET", "path": "/call/challenge" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1call~1challenge/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai call setup", "mcp": null, "c": "wai_call_setup", "rust": "wai::call::setup", "sdk": "wai.call.setup" } }, { "id": "call.create", "summary": "Place a call", "cli": "wai call create", "aliases": [], "usage": [ "wai call create [--target ] [--body |@] [--yes] POST /call/place on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/call/place" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1call~1place/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai call create", "mcp": null, "c": "wai_call_create", "rust": "wai::call::create", "sdk": "wai.call.create" } }, { "id": "call.invite", "summary": "Ring invitees", "cli": "wai call invite", "aliases": [], "usage": [ "wai call invite [--target ] [--body |@] [--yes] POST /call/ring on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/call/ring" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1call~1ring/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai call invite", "mcp": null, "c": "wai_call_invite", "rust": "wai::call::invite", "sdk": "wai.call.invite" } }, { "id": "inbox.show", "summary": "The caller's inbox", "cli": "wai inbox show", "aliases": [], "usage": [ "wai inbox show [--target ] [--query =]... GET /inbox on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/inbox" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1inbox/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai inbox show", "mcp": null, "c": "wai_inbox_show", "rust": "wai::inbox::show", "sdk": "wai.inbox.show" } }, { "id": "answer.create", "summary": "Accept, decline or cancel", "cli": "wai answer create", "aliases": [], "usage": [ "wai answer create [--target ] [--body |@] [--yes] POST /call/answer on the room service" ], "placement": "service", "effect": "writes-target", "dry_run": true, "confirm": "always", "route": { "service": "wai-room", "method": "POST", "path": "/call/answer" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1call~1answer/post" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai answer create", "mcp": null, "c": "wai_answer_create", "rust": "wai::answer::create", "sdk": "wai.answer.create" } }, { "id": "call.show", "summary": "The current call", "cli": "wai call show", "aliases": [], "usage": [ "wai call show [--target ] [--query =]... GET /call on the room service" ], "placement": "service", "effect": "reads", "dry_run": false, "confirm": "never", "route": { "service": "wai-room", "method": "GET", "path": "/call" }, "doors": { "cli": true, "mcp": false, "http": true }, "toolset": "core", "stability": "preview", "input": { "$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1call/get" }, "output": { "type": "object", "required": [ "target", "request", "status", "body" ], "description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai call show", "mcp": null, "c": "wai_call_show", "rust": "wai::call::show", "sdk": "wai.call.show" } }, { "id": "contract.create", "summary": "A channel's share contract from its terms, signed with the operator key; each owner countersigns it", "cli": "wai contract create", "aliases": [], "usage": [ "wai contract create --key [--out F] [--yes] the share contract (WRC1) of the terms, signed", " with the operator key, every countersignature still to come, written to F (.wrc); each owner adds", " its own with `wai contract accept`; replacing a file waits for --yes (--confirm, deprecated, is the same)" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "terms": { "type": "string", "format": "path", "description": "The terms: start, end, currency, channel, channel_signer, rule, between, carriers, owners, splits and assets.", "x-cli": { "positional": true } }, "key": { "type": "string", "description": "The operator key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.", "x-cli": { "flag": "--key" } }, "out": { "type": "string", "format": "path", "description": "The contract's file (.wrc).", "x-cli": { "flag": "--out" } } }, "required": [ "terms", "key" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "digest", "operator", "channel", "owners", "in_force", "contract", "file" ], "description": "The share contract (WRC1, hexadecimal), its digest, each owner and whether it has countersigned, and the file it went to" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "revenue_share" ] }, "names": { "cli": "wai contract create", "mcp": null, "c": "wai_contract_create", "rust": "wai::contract::create", "sdk": "wai.contract.create" } }, { "id": "contract.update", "summary": "An owner's countersignature added to a share contract, after its rules and the operator's signature are checked", "cli": "wai contract accept", "aliases": [], "usage": [ "wai contract accept --key [--out F] [--yes] the owner's countersignature added to the contract,", " written to F (the contract's own file when F is not given); replacing a file waits for --yes (--confirm,", " deprecated, is the same)" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "contract": { "type": "string", "format": "path", "description": "The contract's file (WRC1).", "x-cli": { "positional": true } }, "key": { "type": "string", "description": "The owner key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.", "x-cli": { "flag": "--key" } }, "out": { "type": "string", "format": "path", "description": "Where the countersigned contract goes (the contract's own file).", "x-cli": { "flag": "--out" } } }, "required": [ "contract", "key" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "digest", "operator", "channel", "owners", "in_force", "contract", "file" ], "description": "The share contract (WRC1, hexadecimal), its digest, each owner and whether it has countersigned, and the file it went to" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "revenue_share" ] }, "names": { "cli": "wai contract update", "mcp": null, "c": "wai_contract_update", "rust": "wai::contract::update", "sdk": "wai.contract.update" } }, { "id": "statement.create", "summary": "A party's revenue-share statement for a period, recomputed from the ledger's invoices and the channel's program-as-run, signed with the operator key", "cli": "wai statement create", "aliases": [], "usage": [ "wai statement create --party --start µs --end µs --key [--out F] [--yes] the statement", " (WRS1) of the party for [start, end), computed from a verification document without its statement (the", " contract, other contracts, runs and ledger documents), signed with the operator key and written with its", " document to F (.wai-share.json) for `wai statement verify`; replacing a file waits for --yes" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "inputs": { "type": "string", "format": "path", "description": "A verification document without its statement: contract, contracts, runs and ledgers.", "x-cli": { "positional": true } }, "party": { "type": "string", "description": "The party's key, 64 hexadecimal digits: the operator or an owner.", "x-cli": { "flag": "--party" } }, "start": { "type": "integer", "description": "The period's start, microseconds since 1970.", "x-cli": { "flag": "--start" } }, "end": { "type": "integer", "description": "The period's end, after its start.", "x-cli": { "flag": "--end" } }, "key": { "type": "string", "description": "The operator key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.", "x-cli": { "flag": "--key" } }, "out": { "type": "string", "format": "path", "description": "The verification document's file (.wai-share.json).", "x-cli": { "flag": "--out" } } }, "required": [ "inputs", "party", "start", "end", "key" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "file", "statement", "outcome" ], "description": "The statement (WRS1, hexadecimal), the file its verification document went to, and its outcome, recomputed here" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "revenue_share" ] }, "names": { "cli": "wai statement create", "mcp": null, "c": "wai_statement_create", "rust": "wai::statement::create", "sdk": "wai.statement.create" } }, { "id": "statement.verify", "summary": "A revenue-share statement's verification document checked: every line recomputed from the public records, or the reason it is refused", "cli": "wai statement verify", "aliases": [], "usage": [ "wai statement verify the outcome of a statement's verification document: each line, each split's", " division and each impression's attribution, recomputed; exit 1 with the reason on a refusal" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "document": { "type": "string", "format": "path", "description": "The verification document: contract, contracts, statement, runs and ledgers.", "x-cli": { "positional": true } } }, "required": [ "document" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "outcome", "statement", "contract", "party", "role", "lines", "total" ], "description": "An accepted statement's outcome (revenue-share §8.3): its lines, each split's division, every impression attributed, and the total" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "revenue_share" ] }, "names": { "cli": "wai statement verify", "mcp": null, "c": "wai_statement_verify", "rust": "wai::statement::verify", "sdk": "wai.statement.verify" } }, { "id": "opportunity.create", "summary": "A party's opportunity report for a period: the ad breaks a channel's signed cues and program-as-run prove in the programmes it shares in, signed with the issuer key", "cli": "wai opportunity create", "aliases": [], "usage": [ "wai opportunity create --party --start µs --end µs --key [--out F] [--yes] the report", " (WOR1) of the party for [start, end), computed from a verification document without its report (the", " contract, other contracts, runs and rooms), signed with the issuer key and written with its document to F", " (.wai-opportunity.json) for `wai opportunity verify`; replacing a file waits for --yes" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "inputs": { "type": "string", "format": "path", "description": "A verification document without its report: contract, contracts, runs and rooms.", "x-cli": { "positional": true } }, "party": { "type": "string", "description": "The party's key, 64 hexadecimal digits: the operator or an owner.", "x-cli": { "flag": "--party" } }, "start": { "type": "integer", "description": "The period's start, microseconds since 1970.", "x-cli": { "flag": "--start" } }, "end": { "type": "integer", "description": "The period's end, after its start.", "x-cli": { "flag": "--end" } }, "key": { "type": "string", "description": "The issuer key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.", "x-cli": { "flag": "--key" } }, "out": { "type": "string", "format": "path", "description": "The verification document's file (.wai-opportunity.json).", "x-cli": { "flag": "--out" } } }, "required": [ "inputs", "party", "start", "end", "key" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "file", "report", "outcome" ], "description": "The opportunity report (WOR1, hexadecimal), the file its verification document went to, and its outcome, recomputed here" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "opportunity_report" ] }, "names": { "cli": "wai opportunity create", "mcp": null, "c": "wai_opportunity_create", "rust": "wai::opportunity::create", "sdk": "wai.opportunity.create" } }, { "id": "opportunity.verify", "summary": "An opportunity report's or a statement check's verification document checked: every break, line and flag recomputed from the records, or the reason it is refused", "cli": "wai opportunity verify", "aliases": [], "usage": [ "wai opportunity verify the outcome of a report's or a check's verification document: each break", " attributed, each line and flag recomputed; exit 1 with the reason on a refusal" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "document": { "type": "string", "format": "path", "description": "The verification document: a report's (contract, contracts, report, runs, rooms) or a check's (report, reported, statement, check).", "x-cli": { "positional": true } } }, "required": [ "document" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "outcome" ], "description": "An accepted report's outcome (opportunity-report §8.3: every break attributed, each line and the totals) or an accepted check's (§11.3: each line's opportunities, reported and signed figures and flags)" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": { "all": [ "opportunity_report" ] }, "names": { "cli": "wai opportunity verify", "mcp": null, "c": "wai_opportunity_verify", "rust": "wai::opportunity::verify", "sdk": "wai.opportunity.verify" } }, { "id": "statement.check", "summary": "A platform's reported statement checked against an opportunity report and, when given, the operator's signed statement, signed with the issuer key", "cli": "wai statement check", "aliases": [], "usage": [ "wai statement check [--statement ] [--floor ppm] [--ceiling ppm] --key [--out F] [--yes]", " the check (WCK1) of a reported statement (JSON, or CSV for a file named .csv) beside a report's verification", " document and a signed statement's, at the bounds given (500000 and 2000000 when not), signed with the issuer", " key and written with its document to F (.wai-check.json); replacing a file waits for --yes" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "report": { "type": "string", "format": "path", "description": "A report's verification document, with its report.", "x-cli": { "positional": true } }, "reported": { "type": "string", "format": "path", "description": "The reported statement: JSON, or CSV for a file named .csv.", "x-cli": { "positional": true } }, "statement": { "type": "string", "format": "path", "description": "A signed revenue-share statement's verification document of the same party and period.", "x-cli": { "flag": "--statement" } }, "floor": { "type": "integer", "description": "The lower bound, in millionths of the period's rate (500000).", "x-cli": { "flag": "--floor" } }, "ceiling": { "type": "integer", "description": "The upper bound, in millionths of the period's rate (2000000).", "x-cli": { "flag": "--ceiling" } }, "key": { "type": "string", "description": "The issuer key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.", "x-cli": { "flag": "--key" } }, "out": { "type": "string", "format": "path", "description": "The verification document's file (.wai-check.json).", "x-cli": { "flag": "--out" } } }, "required": [ "report", "reported", "key" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "file", "check", "outcome" ], "description": "The statement check (WCK1, hexadecimal), the file its verification document went to, and its outcome, recomputed here" }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": true, "needs": { "all": [ "opportunity_report" ] }, "names": { "cli": "wai statement check", "mcp": null, "c": "wai_statement_check", "rust": "wai::statement::check", "sdk": "wai.statement.check" } }, { "id": "key.create", "summary": "A new Ed25519 signing key kept under a name, for one role, its secret in macOS's keychain or in a seed file; every signing operation's --key takes the name", "cli": "wai key create", "aliases": [], "usage": [ "wai key create --for [--store keychain|file] [--keystore DIR] a new signing key named ", " (1 to 48 of a-z, 0-9, - and _), for one role: origin, signer, room, audit, ledger, release, remote-host,", " quantum or dev. Its secret is kept in the login keychain (--store keychain, the default on macOS) or in a", " file of the keystore (--store file, the default elsewhere: mode 0600 on Unix; on Windows an access list for", " this account alone, inheritance off), and is never printed; a seed file another account may read is refused.", " The keystore is DIR, $WAI_KEYSTORE, or ~/.config/wai/keys (%APPDATA%\\wai\\keys on Windows). --key signs", " with it" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "name": { "type": "string", "description": "The key's name: 1 to 48 of a-z, 0-9, - and _, beginning with a letter or a digit.", "x-cli": { "positional": true } }, "role": { "type": "string", "description": "The key's role: origin, signer, room, audit, ledger, release, remote-host, quantum or dev.", "x-cli": { "flag": "--for" } }, "store": { "type": "string", "description": "Where the secret is kept: keychain (the default on macOS) or file (the default elsewhere: mode 0600 on Unix; on Windows, an access list for this account alone).", "x-cli": { "flag": "--store" } }, "keystore": { "type": "string", "format": "path", "description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).", "x-cli": { "flag": "--keystore" } } }, "required": [ "name", "role" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "name", "role", "id", "key", "store", "keystore" ], "description": "The key kept: its name, role and key id, its public key in hexadecimal and its did:key (null in a dry run, which makes no key), where its secret is kept (store: keychain or file), and the keystore" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": true, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai key create", "mcp": null, "c": "wai_key_create", "rust": "wai::key::create", "sdk": "wai.key.create" } }, { "id": "key.list", "summary": "Every key of the keystore: its name, role, key id, public key, status and where its secret is kept", "cli": "wai key list", "aliases": [], "usage": [ "wai key list [--for ] [--keystore DIR] every key of the keystore, its newest version, and where its secret is kept" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "role": { "type": "string", "description": "Only the keys of this role.", "x-cli": { "flag": "--for" } }, "keystore": { "type": "string", "format": "path", "description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).", "x-cli": { "flag": "--keystore" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "keystore", "keys" ], "description": "Each key of the keystore: its name, role, newest key id, public key, did:key and status, and where its secret is kept" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai key list", "mcp": null, "c": "wai_key_list", "rust": "wai::key::list", "sdk": "wai.key.list" } }, { "id": "key.show", "summary": "One key: its public key and did:key, its role, every version with its status as a key log states it, and the version --key signs with", "cli": "wai key show", "aliases": [], "usage": [ "wai key show [--keystore DIR] one key's versions, each active, retired (until) or revoked (compromised since), as", " jwp-receipts §7.2's key log states them, and the one --key signs with" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "name": { "type": "string", "description": "The key's name.", "x-cli": { "positional": true } }, "keystore": { "type": "string", "format": "path", "description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).", "x-cli": { "flag": "--keystore" } } }, "required": [ "name" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "keystore", "name", "role", "signs_with", "versions" ], "description": "The key's versions, oldest first, each with its key id, public key, did:key, status (active, retired, revoked) and times as a key log states them (jwp-receipts §7.2), and where its secret is kept (store; null once destroyed); and the key id --key signs with" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai key show", "mcp": null, "c": "wai_key_show", "rust": "wai::key::show", "sdk": "wai.key.show" } }, { "id": "key.rotate", "summary": "A key's successor made under the same name and a new key id, the old version retired now and its secret destroyed", "cli": "wai key rotate", "aliases": [], "usage": [ "wai key rotate [--store keychain|file] [--keystore DIR] [--yes] a successor under a new key id (.),", " which --key signs with from now; the old version is retired now and its secret destroyed (jwp-receipts", " §7.6), so it waits for --yes" ], "placement": "local", "effect": "destructive", "dry_run": true, "confirm": "always", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "name": { "type": "string", "description": "The key's name.", "x-cli": { "positional": true } }, "store": { "type": "string", "description": "Where the successor's secret is kept (where the old one's was).", "x-cli": { "flag": "--store" } }, "keystore": { "type": "string", "format": "path", "description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).", "x-cli": { "flag": "--keystore" } } }, "required": [ "name" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "name", "previous", "id", "key", "store" ], "description": "The version retired (previous, with until) and the successor made: its key id, public key (null in a dry run) and where its secret is kept (store)" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": true, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai key rotate", "mcp": null, "c": "wai_key_rotate", "rust": "wai::key::rotate", "sdk": "wai.key.rotate" } }, { "id": "key.revoke", "summary": "A key's version revoked as compromised from a time, its secret destroyed, so --key signs nothing with it", "cli": "wai key revoke", "aliases": [], "usage": [ "wai key revoke [--id ] [--compromised-since ] [--keystore DIR] [--yes] the key's newest", " version (or --id's) revoked, compromised since the time given (now; YYYY-MM-DDTHH:MM:SSZ), and its secret", " destroyed (jwp-receipts §7.6); it waits for --yes" ], "placement": "local", "effect": "destructive", "dry_run": true, "confirm": "always", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "name": { "type": "string", "description": "The key's name.", "x-cli": { "positional": true } }, "id": { "type": "string", "description": "The version to revoke, by its key id (the newest).", "x-cli": { "flag": "--id" } }, "compromised_since": { "type": "string", "description": "From when another party may have held it: a date-time in UTC, YYYY-MM-DDTHH:MM:SSZ (now).", "x-cli": { "flag": "--compromised-since" } }, "keystore": { "type": "string", "format": "path", "description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).", "x-cli": { "flag": "--keystore" } } }, "required": [ "name" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "name", "id", "compromised_since" ], "description": "The version revoked, the time from which it is held compromised, and whether its secret was destroyed" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": true, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai key revoke", "mcp": null, "c": "wai_key_revoke", "rust": "wai::key::revoke", "sdk": "wai.key.revoke" } }, { "id": "key.import", "summary": "A key file's seed kept under a name, as wai key create keeps a new one; a published test seed is refused unless named one", "cli": "wai key import", "aliases": [], "usage": [ "wai key import --for --from [--store keychain|file] [--published-test-seed] [--keystore DIR]", " the seed of a key file (64 hexadecimal digits or the 32 bytes, as every --key file holds) kept as wai key create", " keeps one; a seed of one byte repeated 32 times, the form of every seed WAI publishes, is refused unless", " --published-test-seed names it a test key" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "name": { "type": "string", "description": "The key's name.", "x-cli": { "positional": true } }, "role": { "type": "string", "description": "The key's role: origin, signer, room, audit, ledger, release, remote-host, quantum or dev.", "x-cli": { "flag": "--for" } }, "from": { "type": "string", "format": "path", "description": "The key file: 64 hexadecimal digits, or the 32 bytes.", "x-cli": { "flag": "--from" } }, "store": { "type": "string", "description": "Where the secret is kept: keychain (the default on macOS) or file.", "x-cli": { "flag": "--store" } }, "published_test_seed": { "type": "boolean", "description": "Keep a published test seed, marked as one.", "x-cli": { "flag": "--published-test-seed" } }, "keystore": { "type": "string", "format": "path", "description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).", "x-cli": { "flag": "--keystore" } } }, "required": [ "name", "role", "from" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "name", "role", "id", "key", "store", "keystore" ], "description": "The key kept: its name, role and key id, its public key in hexadecimal and its did:key (null in a dry run, which makes no key), where its secret is kept (store: keychain or file), and the keystore" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": true, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai key import", "mcp": null, "c": "wai_key_import", "rust": "wai::key::import", "sdk": "wai.key.import" } }, { "id": "key.export", "summary": "A key's public half, never its secret: in hexadecimal, as a did:key, as key-log entries, or as the line wai-keys lists it by", "cli": "wai key export", "aliases": [], "usage": [ "wai key export [--format hex|did-key|entry|wai-keys] [--may-sign ,...] [--out F] [--keystore DIR]", " the public half alone: hex (the default), did-key, entry (each version as a key-log entry, jwp-receipts §7.2) or", " wai-keys (the newest as wai-keys init --key and append --add take it); entry and wai-keys name the authorities", " an origin gives it (--may-sign); to stdout, or to F (replacing a file waits for --yes)" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "name": { "type": "string", "description": "The key's name.", "x-cli": { "positional": true } }, "format": { "type": "string", "description": "hex (the default), did-key, entry or wai-keys.", "x-cli": { "flag": "--format" } }, "may_sign": { "type": "string", "description": "With entry and wai-keys: the authorities an origin gives the key (jwp-receipts §7.5), comma-separated.", "x-cli": { "flag": "--may-sign" } }, "out": { "type": "string", "format": "path", "description": "Write it to this file.", "x-cli": { "flag": "--out" } }, "keystore": { "type": "string", "format": "path", "description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).", "x-cli": { "flag": "--keystore" } } }, "required": [ "name" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "name", "id", "format", "text" ], "description": "The key's public half in the format asked for (the text, and for entry the key-log entries), and the file it went to" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": true, "needs": { "all": [ "quickstart" ] }, "names": { "cli": "wai key export", "mcp": null, "c": "wai_key_export", "rust": "wai::key::export", "sdk": "wai.key.export" } }, { "id": "credential.create", "summary": "The key a service takes, read from standard input and kept for its origin in the keychain or a file only its owner reads", "cli": "wai auth login", "aliases": [], "usage": [ "wai auth login --url [--store keychain|file] [--yes] the key for the service at URL, read from standard input", " (one line; never from the command line), kept for its origin: in the login keychain on macOS, else in a file of", " the configuration directory that only its owner reads; WAI_TOKEN, when set, is sent ahead of every kept key.", " A key goes over https://, or over http:// to this machine alone. Replacing an origin's key waits for --yes" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "url": { "type": "string", "description": "The service's http:// or https:// address; the key is kept for its origin.", "x-cli": { "flag": "--url" } }, "store": { "type": "string", "description": "keychain (the default on macOS) or file (the default elsewhere).", "x-cli": { "flag": "--store" } } }, "required": [ "url" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "origin", "store" ], "description": "The origin a key is kept for and where it is kept (keychain or file), never the key" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai credential create", "mcp": null, "c": "wai_credential_create", "rust": "wai::credential::create", "sdk": "wai.credential.create" } }, { "id": "credential.list", "summary": "The origins a key is kept for and where each is kept, never a key, and whether WAI_TOKEN is set", "cli": "wai auth status", "aliases": [], "usage": [ "wai auth status each origin a key is kept for (wai auth login) and where it is kept, and whether WAI_TOKEN is set; no key is printed" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": {}, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "credentials", "wai_token" ], "description": "Each origin a key is kept for and where it is kept (keychain or file), never a key; and whether WAI_TOKEN is set, which every request sends ahead of them" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai credential list", "mcp": null, "c": "wai_credential_list", "rust": "wai::credential::list", "sdk": "wai.credential.list" } }, { "id": "credential.delete", "summary": "The key kept for a service's origin removed from the keychain or its file", "cli": "wai auth logout", "aliases": [], "usage": [ "wai auth logout --url [--yes] the key kept for URL's origin removed, from the keychain or its file; it waits for --yes" ], "placement": "local", "effect": "destructive", "dry_run": true, "confirm": "always", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "url": { "type": "string", "description": "The service's address; the key kept for its origin is removed.", "x-cli": { "flag": "--url" } } }, "required": [ "url" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "origin", "store" ], "description": "The origin a key is kept for and where it is kept (keychain or file), never the key" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai credential delete", "mcp": null, "c": "wai_credential_delete", "rust": "wai::credential::delete", "sdk": "wai.credential.delete" } }, { "id": "target.create", "summary": "A target: a name for a service's address, kept in the project's wai.json or in the person's own list, and never with a key", "cli": "wai target add", "aliases": [], "usage": [ "wai target add --url [--read-only] [--user] [--yes] kept in ./wai.json where there is one, else (or with", " --user) in the person's own list; --read-only refuses every operation that would change the service; a target is", " never kept with a key (wai auth login keeps it). Replacing a target of that name waits for --yes" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-a-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "name": { "type": "string", "description": "The target's name: lowercase letters, digits and hyphens, beginning with a letter (local is the development room's).", "x-cli": { "positional": true } }, "url": { "type": "string", "description": "The service's http:// or https:// address, with no user, query or fragment.", "x-cli": { "flag": "--url" } }, "read_only": { "type": "boolean", "description": "Refuse every operation that would change the service.", "x-cli": { "flag": "--read-only" } }, "user": { "type": "boolean", "description": "Keep it in the person's own list, not the project's wai.json.", "x-cli": { "flag": "--user" } } }, "required": [ "name", "url" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "name", "url", "read_only", "kept_in" ], "description": "The target: its name, its service's address, whether it refuses every operation that would change the service, and the file it is kept in (the project's wai.json, or the person's own list)" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai target create", "mcp": null, "c": "wai_target_create", "rust": "wai::target::create", "sdk": "wai.target.create" } }, { "id": "target.update", "summary": "The target an operation that needs a service acts on when --target names none", "cli": "wai target use", "aliases": [], "usage": [ "wai target use | --none the target taken where --target names none, kept in the person's own list; --none", " takes none" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "name": { "type": "string", "description": "A target's name (wai target list).", "x-cli": { "positional": true } }, "none": { "type": "boolean", "description": "Take no target where none is named.", "x-cli": { "flag": "--none" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "use", "targets" ], "description": "Each target: its name, address, whether it is read-only, the file it is kept in, whether a key is kept for its origin, and whether another of that name hides it; and the target in use" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai target update", "mcp": null, "c": "wai_target_update", "rust": "wai::target::update", "sdk": "wai.target.update" } }, { "id": "target.list", "summary": "Every target, its address, whether it is read-only, where it is kept and whether a key is kept for it; and the one in use", "cli": "wai target list", "aliases": [], "usage": [ "wai target list the project's targets (./wai.json) and the person's own, and the one in use" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": {}, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "use", "targets" ], "description": "Each target: its name, address, whether it is read-only, the file it is kept in, whether a key is kept for its origin, and whether another of that name hides it; and the target in use" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai target list", "mcp": null, "c": "wai_target_list", "rust": "wai::target::list", "sdk": "wai.target.list" } }, { "id": "target.delete", "summary": "A target removed from the project's wai.json or the person's own list", "cli": "wai target remove", "aliases": [], "usage": [ "wai target remove [--user] [--yes] from ./wai.json where it is kept there, else (or with --user) from the", " person's own list; it waits for --yes" ], "placement": "local", "effect": "destructive", "dry_run": true, "confirm": "always", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "name": { "type": "string", "description": "The target's name.", "x-cli": { "positional": true } }, "user": { "type": "boolean", "description": "Remove it from the person's own list.", "x-cli": { "flag": "--user" } } }, "required": [ "name" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "name", "url", "read_only", "kept_in" ], "description": "The target: its name, its service's address, whether it refuses every operation that would change the service, and the file it is kept in (the project's wai.json, or the person's own list)" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai target delete", "mcp": null, "c": "wai_target_delete", "rust": "wai::target::delete", "sdk": "wai.target.delete" } }, { "id": "ops.list", "summary": "Every operation of this catalogue: its id, command line, effect and whether this build holds it", "cli": "wai ops list", "aliases": [], "usage": [ "wai ops list every operation, its id and command line" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": {}, "required": [], "additionalProperties": false }, "output": { "type": "array", "items": { "type": "object", "required": [ "id", "summary", "cli", "effect", "placement", "toolset", "stability", "available" ] } }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai ops list", "mcp": null, "c": "wai_ops_list", "rust": "wai::ops::list", "sdk": "wai.ops.list" } }, { "id": "ops.search", "summary": "The operations that match a task, ranked, offline: up to five", "cli": "wai ops search", "aliases": [], "usage": [ "wai ops search \"\" up to five operations that match, ranked, offline" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "task": { "type": "string", "description": "What you want to do, in words.", "x-cli": { "positional": true } } }, "required": [ "task" ], "additionalProperties": false }, "output": { "type": "array", "maxItems": 5, "items": { "type": "object", "required": [ "id", "summary", "cli", "score" ], "properties": { "id": { "type": "string" }, "summary": { "type": "string" }, "cli": { "type": [ "string", "null" ] }, "score": { "type": "integer" } } } }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai ops search", "mcp": "ops_search", "c": "wai_ops_search", "rust": "wai::ops::search", "sdk": "wai.ops.search" } }, { "id": "ops.show", "summary": "One operation's entry: its input and output schemas, effect, placement and command line", "cli": "wai ops show", "aliases": [ "wai ops schema" ], "usage": [ "wai ops show one operation's entry, as JSON (also wai ops schema)" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "id": { "type": "string", "description": "An operation id, noun.verb.", "x-cli": { "positional": true } } }, "required": [ "id" ], "additionalProperties": false }, "output": { "type": "object", "required": [ "id", "summary", "input", "output", "effect", "placement" ] }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai ops show", "mcp": "ops_show", "c": "wai_ops_show", "rust": "wai::ops::show", "sdk": "wai.ops.show" } }, { "id": "ops.export", "summary": "The catalogue as JSON (wai.ops/1), what other tools and CI read; --check compares a file with it", "cli": "wai ops export", "aliases": [], "usage": [ "wai ops export [--out FILE | --check FILE] the catalogue as JSON, to stdout, to FILE, or compared with FILE" ], "placement": "local", "effect": "writes-project", "dry_run": true, "confirm": "when-replacing-an-unnamed-file", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "stable", "input": { "type": "object", "properties": { "out": { "type": "string", "format": "path", "description": "Write the export here.", "x-cli": { "flag": "--out" } }, "check": { "type": "string", "format": "path", "description": "Compare this file with the export; exit 1 when they differ.", "x-cli": { "flag": "--check" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "format", "toolchain", "envelope", "operations" ], "properties": { "format": { "const": "wai.ops/1" } } }, "stream": null, "since": "0.3.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai ops export", "mcp": null, "c": "wai_ops_export", "rust": "wai::ops::export", "sdk": "wai.ops.export" } }, { "id": "toolchain.show", "summary": "This wai's version, the digests of its catalogue and its registry, the release of the standard it implements, and the build features it holds", "cli": "wai --version", "aliases": [ "wai version" ], "usage": [ "wai --version [--json] this binary's version, the SHA-256 of its catalogue (wai/catalogue/ops.json) and of its", " registry (wai/registry/capabilities.json), the release of the standard it implements with the envelope formats", " it reads, and the build features it holds (also wai version; wai/VERSIONING.md says what each promises)" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": false, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": {}, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "toolchain", "catalogue", "envelope", "registry", "specification", "features" ], "description": "This binary's version, its catalogue's format, operations and SHA-256, the JSON envelope's version, its registry's capabilities and SHA-256, the release of the standard it implements with the envelope formats it reads, and the build features it holds" }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai toolchain show", "mcp": null, "c": "wai_toolchain_show", "rust": "wai::toolchain::show", "sdk": "wai.toolchain.show" } }, { "id": "toolchain.doctor", "summary": "Whether this machine can run the toolchain: this wai and PATH, the relay and room service, the local stack's ports, browsers, and where keys are kept", "cli": "wai doctor", "aliases": [], "usage": [ "wai doctor [--keystore DIR] [--json] one check to a line: pass, FAIL with its fix, or not checked with the reason. Exit 1 when", " one failed; result says passed, failed, or passed-with-not-checked. No secret is read and no prompt raised (wai/quickstart/README.md)" ], "placement": "local", "effect": "reads", "dry_run": false, "confirm": "never", "route": null, "doors": { "cli": true, "mcp": true, "http": false }, "toolset": "core", "stability": "preview", "input": { "type": "object", "properties": { "keystore": { "type": "string", "format": "path", "description": "The keystore to look at (default: where wai key keeps keys).", "x-cli": { "flag": "--keystore" } } }, "required": [], "additionalProperties": false }, "output": { "type": "object", "required": [ "result", "counts", "checks" ], "description": "The result (passed, failed, or passed-with-not-checked), how many checks are in each state, and each check: its id, its state (pass, fail, not-checked, or not-applicable), what it found or why it could not be run, the fix when it failed, and what it found as data", "properties": { "result": { "enum": [ "passed", "failed", "passed-with-not-checked" ] }, "counts": { "type": "object", "required": [ "pass", "fail", "not_checked", "not_applicable" ] }, "checks": { "type": "array", "items": { "type": "object", "required": [ "id", "state", "message", "fix", "facts" ], "properties": { "state": { "enum": [ "pass", "fail", "not-checked", "not-applicable" ] } } } } } }, "stream": null, "since": "0.5.0", "deprecated": null, "receipt": false, "needs": null, "names": { "cli": "wai toolchain doctor", "mcp": "toolchain_doctor", "c": "wai_toolchain_doctor", "rust": "wai::toolchain::doctor", "sdk": "wai.toolchain.doctor" } } ] }