A run on a person's provider waited in its process, and a job that had not finished in two hours was cancelled at the provider, losing its place in the queue. If the process stopped first, the job went on and its id was gone, so its counts could not be read. A device's queue can take days. A job is now written down before it is sent, with everything sealing it will need, and the provider's id as soon as the provider gives one. Nothing that cannot be recorded is sent. Any process can come back to the record, and its counts are read against the program that was sent, whatever the device's calibration has become. Running out of patience leaves the job where it is. A request that did not complete may have reached the provider, so it is never sent again: that could be a second bill. The command line gains run --no-wait and providers jobs, collect and cancel. The local MCP server's run_on_provider answers within a call, and gains get_provider_job, cancel_provider_job and list_provider_jobs. Co-Authored-By: Claude Opus 5.5 <[email protected]>
450 lines
11 KiB
JSON
450 lines
11 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://git.transaction.science/Transaction-Science/open-standards/raw/branch/main/wai/wai-quantum-cli/schemas/local-tools.v1.json",
|
|
"title": "wai.quantum.local-tools/1",
|
|
"description": "The answers of the local MCP server's own tools (wai-quantum mcp), those the command line writes beside the engine's: a receipt's check, the workbench archive's submissions, a program's history, the person's taste, and the person's own providers. Each is a $def; every tool's outputSchema in tools/list is its answer's schema standing alone. The engine's answers are in wai-quantum's schemas.",
|
|
"$defs": {
|
|
"verify": {
|
|
"description": "Whether a job's receipt seals its request and its result, and the key that signed it; for an estimate, also every estimate's receipt and the request re-run here; for an answer of the variational and algorithm library, also its digest chain and the answer re-run here.",
|
|
"anyOf": [
|
|
{
|
|
"type": "object",
|
|
"description": "Whether a job's receipt seals its request and its result, and the key that signed it.",
|
|
"required": [
|
|
"valid",
|
|
"key"
|
|
],
|
|
"properties": {
|
|
"valid": {
|
|
"type": "boolean"
|
|
},
|
|
"key": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
],
|
|
"description": "The signing key, 32 bytes in hex."
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"$ref": "https://git.transaction.science/Transaction-Science/open-standards/raw/branch/main/wai/wai-quantum/schemas/estimate.v1.json#/$defs/verify"
|
|
},
|
|
{
|
|
"$ref": "https://git.transaction.science/Transaction-Science/open-standards/raw/branch/main/wai/wai-quantum/schemas/algorithms.v1.json#/$defs/verify"
|
|
}
|
|
]
|
|
},
|
|
"discover_submit": {
|
|
"type": "object",
|
|
"description": "What the archive did with a generator, and its best entry after.",
|
|
"required": [
|
|
"outcome",
|
|
"best"
|
|
],
|
|
"properties": {
|
|
"outcome": {
|
|
"type": "object"
|
|
},
|
|
"best": {
|
|
"type": [
|
|
"object",
|
|
"null"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"history_commit": {
|
|
"type": "object",
|
|
"description": "The version an agent's edit was recorded as, and in whose name.",
|
|
"required": [
|
|
"version",
|
|
"parent",
|
|
"by",
|
|
"history"
|
|
],
|
|
"properties": {
|
|
"version": {
|
|
"type": "string"
|
|
},
|
|
"parent": {
|
|
"type": "string"
|
|
},
|
|
"by": {
|
|
"type": [
|
|
"object",
|
|
"null"
|
|
],
|
|
"properties": {
|
|
"kind": {
|
|
"enum": [
|
|
"person",
|
|
"assistant",
|
|
"agent",
|
|
"engine",
|
|
"origin"
|
|
]
|
|
},
|
|
"name": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"history": {
|
|
"type": "string",
|
|
"description": "The history file's path."
|
|
}
|
|
}
|
|
},
|
|
"history_changes": {
|
|
"type": "object",
|
|
"required": [
|
|
"changes",
|
|
"rules"
|
|
],
|
|
"properties": {
|
|
"changes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"breaches": {},
|
|
"rules": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"history_blame": {
|
|
"type": "object",
|
|
"required": [
|
|
"version",
|
|
"lines",
|
|
"authorship"
|
|
],
|
|
"properties": {
|
|
"version": {
|
|
"type": "string"
|
|
},
|
|
"lines": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"authorship": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
},
|
|
"history_log": {
|
|
"type": "object",
|
|
"required": [
|
|
"versions",
|
|
"check"
|
|
],
|
|
"properties": {
|
|
"versions": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"check": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
},
|
|
"taste_rank": {
|
|
"type": "object",
|
|
"description": "Programs ranked by the person's own taste profile: each with its score, its parts' scores and its typicality; where the parts or the cost put another first; and whether the ranking narrows what comes first.",
|
|
"required": [
|
|
"choices",
|
|
"ranked"
|
|
],
|
|
"properties": {
|
|
"choices": {
|
|
"type": "integer",
|
|
"description": "The choices the profile has learned from."
|
|
},
|
|
"dial": {
|
|
"type": "number",
|
|
"description": "The novelty dial, -1 to 1."
|
|
},
|
|
"ranked": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"name",
|
|
"score",
|
|
"final"
|
|
],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"score": {
|
|
"type": "number"
|
|
},
|
|
"final": {
|
|
"type": "number"
|
|
},
|
|
"novelty": {
|
|
"type": [
|
|
"number",
|
|
"null"
|
|
]
|
|
},
|
|
"typicality": {
|
|
"type": [
|
|
"number",
|
|
"null"
|
|
]
|
|
},
|
|
"cost": {
|
|
"type": [
|
|
"number",
|
|
"null"
|
|
]
|
|
},
|
|
"parts": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"disagree": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"part": {
|
|
"type": "string"
|
|
},
|
|
"first": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"narrowing": {
|
|
"type": [
|
|
"object",
|
|
"null"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"taste_next": {
|
|
"type": "object",
|
|
"description": "The pair the person's taste profile is least sure of that the engine proves equal, or why there is none.",
|
|
"required": [
|
|
"a"
|
|
],
|
|
"properties": {
|
|
"a": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"b": {
|
|
"type": "string"
|
|
},
|
|
"how": {
|
|
"type": "string",
|
|
"description": "How the engine proved them equal."
|
|
},
|
|
"p_a": {
|
|
"type": "number",
|
|
"description": "The profile's probability that the person prefers a."
|
|
},
|
|
"why": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"providers_list": {
|
|
"type": "object",
|
|
"description": "The person's providers, and where each one's credential is; with free, what is free.",
|
|
"required": [
|
|
"registry",
|
|
"providers"
|
|
],
|
|
"properties": {
|
|
"registry": {
|
|
"type": "string",
|
|
"description": "The registry file's path."
|
|
},
|
|
"providers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"free": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
},
|
|
"provider_job": {
|
|
"type": "object",
|
|
"description": "A job on a provider, in the form of a job (job.v1.json), its id the record's handle: running, ended with its error, or done with its result and receipt, which verify_quantum_result checks.",
|
|
"required": [
|
|
"id",
|
|
"status",
|
|
"method",
|
|
"request"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"enum": [
|
|
"running",
|
|
"done",
|
|
"failed",
|
|
"cancelled"
|
|
]
|
|
},
|
|
"method": {
|
|
"const": "provider"
|
|
},
|
|
"why": {
|
|
"type": "string"
|
|
},
|
|
"request": {
|
|
"type": "object"
|
|
},
|
|
"result": {
|
|
"type": "object"
|
|
},
|
|
"error": {
|
|
"type": "string"
|
|
},
|
|
"submitted_ms": {
|
|
"type": "integer"
|
|
},
|
|
"finished_ms": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"provider_jobs": {
|
|
"type": "object",
|
|
"description": "Every job recorded on this machine, as it last stood: no provider is asked.",
|
|
"required": [
|
|
"ledger",
|
|
"jobs",
|
|
"unread"
|
|
],
|
|
"properties": {
|
|
"ledger": {
|
|
"type": "string",
|
|
"description": "The directory the records are in."
|
|
},
|
|
"jobs": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"provider",
|
|
"status",
|
|
"shots",
|
|
"submitted_ms"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"provider": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"enum": [
|
|
"running",
|
|
"done",
|
|
"failed",
|
|
"cancelled"
|
|
]
|
|
},
|
|
"shots": {
|
|
"type": "integer"
|
|
},
|
|
"submitted_ms": {
|
|
"type": "integer"
|
|
},
|
|
"finished_ms": {
|
|
"type": "integer"
|
|
},
|
|
"error": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"unread": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Why any file among the records could not be read."
|
|
}
|
|
}
|
|
},
|
|
"provider_estimate": {
|
|
"type": "object",
|
|
"description": "The dry run of a job on a provider: nothing submitted, nothing spent.",
|
|
"required": [
|
|
"dry_run",
|
|
"provider",
|
|
"plan",
|
|
"estimate",
|
|
"free",
|
|
"confirm"
|
|
],
|
|
"properties": {
|
|
"dry_run": {
|
|
"const": true
|
|
},
|
|
"provider": {
|
|
"type": "object"
|
|
},
|
|
"calibration": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"billing": {
|
|
"type": "object"
|
|
},
|
|
"plan": {
|
|
"type": "object"
|
|
},
|
|
"estimate": {
|
|
"type": "object"
|
|
},
|
|
"free": {
|
|
"type": "boolean"
|
|
},
|
|
"confirm": {
|
|
"type": "string",
|
|
"description": "What the person reads before confirming a run that is not free."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|