Skip to content

v0.8.0 — Machine-readable failures

Choose a tag to compare

@dapepe dapepe released this 19 Sep 14:48
· 6 commits to main since this release

Closes the two gaps a two-model review (Kimi K3, Grok 4.6) ranked first and second when comparing this CLI against SAP, Salesforce and Workday on agent usability: a failure a machine can read, and a command model a machine can discover.

Machine-readable failures

In --json/--yaml mode a failure now writes a structured envelope to stdout:

{ "ok": false, "error": { "code": "unknown_entity", "exitCode": 2, "message": "…", "field": "…", "suggestion": "…", "actions": ["…"] } }

Previously stdout was empty and the reason was prose on stderr, which made the published exit-code contract unusable for its stated purpose. Success output is unchanged — a list is still a bare array, and the two are told apart by shape.

Every command emits it, including login, logout, profile, skills and okf, which until now exited 1 with a bare stderr line. A bad --port or --target is 2, a failed token exchange 3, a missing bundled directory 1 with a missing_bundle code.

zeyos commands

Publishes the command graph — every command, its aliases, the flags it accepts and each option's type — as data. zeyos describe exposes the data model; this exposes the command model, so an agent no longer infers flags from prose help. The equivalent of sf commands --json.

Entities

Five new (contract, supplier, stocktransaction, comment, ledger) and twelve transaction pseudo-entities (billing_invoice, procurement_delivery, …) bound to transactions.type.

stocktransaction, ledger and payment are an append-only record rather than a working document, so they now carry a historyBearing note that zeyos describe publishes and the delete confirmation states before asking. The capability is unchanged — --force still honours the caller.

Also fixed

  • Error hints (actions) reached --json callers but not the terminal. They now go to stderr too.
  • A corrupt .zeyos/api/<resource>.json no longer echoes its own contents; it reports the file, the position and a config_invalid code.
  • delete --yes works (it was declared but never allow-listed).
  • JSON parse errors no longer leak the payload — Node embeds the input in its own message.

Full detail in CHANGELOG.md.