Some checks failed
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 1m7s
wai-app and Create / wai-app · does this change touch it (push) Successful in 1m44s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 1m46s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 2m41s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 19s
wai-quantum energy-landscape jobs / does this change touch it (push) Successful in 23s
wai-key-proxy / does this change touch it (push) Successful in 1m54s
wai-quantum studio and desktop / does this change touch it (push) Successful in 1m51s
WAI operation catalogue / does this change touch it (push) Successful in 3m25s
wai key · Windows / does this change touch it (push) Successful in 1m58s
wai-fleet service / does this change touch it (push) Successful in 2m22s
wai-quantum for JavaScript / does this change touch it (push) Successful in 1m56s
wai-audit collector and player integration / does this change touch it (push) Successful in 3m34s
wai-ledger service / does this change touch it (push) Successful in 1m56s
wai-sink-android native sink library / does this change touch it (push) Successful in 1m28s
wai-sink-swift native sink package / does this change touch it (push) Successful in 1m26s
WAI Studio / does this change touch it (push) Successful in 1m32s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Successful in 1m32s
wai-quantum energy-landscape jobs / the same bits · macos (push) Successful in 5m53s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Successful in 8m50s
wai-fleet service / service · macos (push) Successful in 1m21s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 4m43s
wai-ledger service / service · macos (push) Successful in 1m48s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 1m59s
WAI Studio / Studio in Chromium and Firefox · macos (push) Failing after 2m51s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Failing after 14m14s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 6m29s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Successful in 31s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
wai-audit collector and player integration / collector · linux (push) Has been cancelled
WAI operation catalogue / the catalogue and every door · linux (push) Has been cancelled
wai-quantum for JavaScript / javascript · linux (push) Has been cancelled
wai-quantum studio and desktop / studio · browser (push) Has been cancelled
wai-quantum studio and desktop / desktop app · linux (push) Has been cancelled
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Has been cancelled
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Has been cancelled
WAI Studio / Studio in WebKit · linux (push) Has been cancelled
wai-quantum studio and desktop / desktop app · windows (push) Has been cancelled
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Has been cancelled
wai key · Windows / wai key and the toolchain's tests · windows (push) Failing after 1m40s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Failing after 1m51s
wai-key-proxy / proxy · linux (push) Successful in 1m25s
wai-ledger service / service · linux (push) Successful in 2m16s
wai-quantum energy-landscape jobs / the module under wasm32-wasip2 (wasmtime) (push) Successful in 3m46s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 5m14s
wai-quantum energy-landscape jobs / native against WebAssembly, over many seeds (push) Successful in 6m33s
wai-fleet service / service · linux (push) Successful in 7m5s
wai-quantum energy-landscape jobs / reader, kernels, answers and the stated result · linux, release (push) Successful in 11m35s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Successful in 2m6s
joule-moq-room room service / joule-moq-room, every target (push) Successful in 5m44s
wai-quantum energy-landscape jobs / the same bits · linux-arm64 (push) Successful in 7m52s
- wai target add|use|list|remove (target.create, .update, .list, .delete): a name for a service's address, kept in the project's wai.json (its new targets member, in the schema) or the person's own list, never with a key; --read-only refuses every change (exit 3, target-read-only). - wai auth login|status|logout (credential.create, .list, .delete): the key read from standard input, kept for its origin in the keychain on macOS or a file only its owner reads; WAI_TOKEN ahead of it; sent as a bearer over https:// or to this machine alone; never in wai.json, a list, output, a plan, a log or an error, a service's echo of it redacted. - --target is catalogue::TARGET wherever it is taken, on operations placed off this machine: the fleet's four take a target's name or an address; an unknown name is exit 5, target-not-found. - The forty operations of the room service's API answer to their mechanical form, sent to their route under the target (--query, --body), a change waiting for --yes, a dry run sending nothing. - wai mcp --target serves them as tools, changes only to a target on this machine or with --allow-write; never with --read-only or to a read-only target. - wai stage refine --toward, --target its deprecated spelling there (wai/DEPRECATIONS.md). - tests/cli_target.rs, against a stand-in service; ops.json and Studio's actions regenerated. Co-Authored-By: Claude Opus 5.5 <[email protected]>
161 lines
7 KiB
JSON
161 lines
7 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://wai.transaction.science/schema/wai.json/1",
|
|
"title": "wai.json, a WAI project file, version 1",
|
|
"description": "The project file `wai create` writes and `wai dev`, `wai app check`, `wai create`, `wai lock`, `wai check` and `wai build` read. Every member is optional; a member not listed here is refused. Paths are relative to the file's directory. A whole number may be written with a zero fraction (4.0 is 4), and none is above 9007199254740991 (2^53 - 1), the largest every JSON reader holds exactly. Secrets never belong in it.",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"$schema": {
|
|
"description": "This schema: an editor or an agent validates the file with it.",
|
|
"const": "https://wai.transaction.science/schema/wai.json/1"
|
|
},
|
|
"wai": {
|
|
"description": "The project file's version. A file without it is of version 1; a reader of version 1 refuses a later one.",
|
|
"const": 1
|
|
},
|
|
"name": {
|
|
"description": "The project's machine name, the name it is deployed by: a DNS label, lowercase letters, digits and hyphens, at most 63, beginning with a letter and not ending with a hyphen. `wai create` names a project for its directory.",
|
|
"type": "string",
|
|
"pattern": "^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$"
|
|
},
|
|
"template": {
|
|
"description": "The template the project was made from.",
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"description": "The project's title, for people.",
|
|
"type": "string"
|
|
},
|
|
"summary": {
|
|
"description": "One line on what the project does.",
|
|
"type": "string"
|
|
},
|
|
"app": {
|
|
"description": "A program made with Create (app.oui), which the project's page renders: a path relative to the file.",
|
|
"type": "string"
|
|
},
|
|
"requires": {
|
|
"description": "What the project needs; `wai check` holds it to this wai's registry.",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"capabilities": {
|
|
"description": "The registered capabilities the project needs. One that decodes against a parameter set needs a parameter set named under `priors`.",
|
|
"type": "array",
|
|
"items": { "type": "string" }
|
|
}
|
|
}
|
|
},
|
|
"priors": {
|
|
"description": "Each parameter set the project decodes against, by the name it goes by: a path relative to the file, a directory (a wai.prior.set, whose listing is pinned) or one file. `wai lock` pins each by its digest.",
|
|
"type": "object",
|
|
"additionalProperties": { "type": "string" }
|
|
},
|
|
"package": {
|
|
"description": "What `wai build` packages with the reference packager, into dist/.",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["policy"],
|
|
"properties": {
|
|
"policy": {
|
|
"description": "The packaging policy (wai.pack.policy/1): a path relative to the file. `wai lock` pins its canonical digest.",
|
|
"type": "string"
|
|
},
|
|
"sources": {
|
|
"description": "A component's source by its id, where it is not the one the policy names: a path relative to the file.",
|
|
"type": "object",
|
|
"additionalProperties": { "type": "string" }
|
|
},
|
|
"out": {
|
|
"description": "The package's directory under dist/; `package` when absent.",
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"conform": {
|
|
"description": "What the project conforms against.",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"suites": {
|
|
"description": "Conformance suites, each <kind>/<suite> as `wai conform --list` names them. `wai lock` pins each corpus by its digest.",
|
|
"type": "array",
|
|
"items": { "type": "string", "pattern": "^[a-z-]+/[a-z-]+$" }
|
|
}
|
|
}
|
|
},
|
|
"targets": {
|
|
"description": "The services the project's operations act on, by the name `--target` gives (`wai target add` writes it). A target is an address and whether it is read-only, never a key: `wai auth login` keeps a key, outside the project, and a member of a target that is not listed here is refused.",
|
|
"type": "object",
|
|
"propertyNames": { "pattern": "^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$", "not": { "const": "local" } },
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["url"],
|
|
"properties": {
|
|
"url": {
|
|
"description": "The service's address: http:// or https://, a host in lowercase (an IPv6 literal in brackets), a port of 1 to 65535 and the path the service is under; no user, no query and no fragment.",
|
|
"type": "string",
|
|
"pattern": "^https?://([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*|\\[[0-9a-f:.]+\\])(:([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?(/[A-Za-z0-9._~!$&'()*+,;=:%/-]*)?$"
|
|
},
|
|
"read_only": {
|
|
"description": "Whether every operation that would change the service is refused, before anything is sent.",
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"dev": {
|
|
"description": "What `wai dev` runs in the project's directory; a flag on its command line wins over each member.",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"site": {
|
|
"description": "The directory served at /, the project's own page: a path relative to the file.",
|
|
"type": "string"
|
|
},
|
|
"page": {
|
|
"description": "The page `wai dev` names first when it is ready, a path on its origin.",
|
|
"type": "string"
|
|
},
|
|
"mode": {
|
|
"description": "The room `wai dev` runs: a room, a watch room, a call, a remote desktop room, or a show (a room with co-performance: hosts on camera and an audience that votes).",
|
|
"enum": ["room", "watch", "call", "remote", "show"]
|
|
},
|
|
"publishers": {
|
|
"description": "Publishers at once.",
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 4294967295
|
|
},
|
|
"watch": {
|
|
"description": "A watch room's source: a path relative to the file.",
|
|
"type": "string"
|
|
},
|
|
"watch_ms": {
|
|
"description": "The source's duration in milliseconds, where it is not a WAV file.",
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 9007199254740991
|
|
},
|
|
"messaging": {
|
|
"description": "A conversation beside the room.",
|
|
"type": "boolean"
|
|
},
|
|
"e2ee": {
|
|
"description": "The room end-to-end encrypted.",
|
|
"type": "boolean"
|
|
},
|
|
"audience": {
|
|
"description": "A show's inputs per viewer per poll; a show's alone.",
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"maximum": 255
|
|
}
|
|
},
|
|
"if": { "required": ["audience"] },
|
|
"then": { "required": ["mode"], "properties": { "mode": { "const": "show" } } }
|
|
}
|
|
}
|
|
}
|