The BYOA (Bring Your Own Agent) wire, draft 0.1, as TypeScript types and parsers. It has every shape that crosses between an app and a connector: discovery, pairing, sessions, the long-poll, commands and message events. The prose is in docs/SPEC.md.
It has no dependencies and uses no runtime API beyond the language. @plannotator/byoa-server and @plannotator/byoa-connector-core both build on it. Use it directly only if you write your own app side or your own connector.
import { WELL_KNOWN_PATH, parseDiscovery, type Discovery } from "@plannotator/byoa-protocol";
const res = await fetch(new URL(WELL_KNOWN_PATH, "https://acme.example"));
const parsed = parseDiscovery(await res.json());
if (!parsed.ok) throw new Error(parsed.reason);
const discovery: Discovery = parsed.value;BYOA_VERSION,WELL_KNOWN_PATH,KNOBS(the timings every party agrees on),LIMITS(the size limits),META(the_metakeys) andEND_EVENTS.- The wire types:
Discovery,PairStartRequest,PairStartResponse,PairPollApproved,RegisterRequest,PollRequest,PollResponse,Command,MessageEvent,WireErrorand the rest. - One parser per body:
parseDiscovery,parsePairStart,parsePairStartResponse,parsePairApproved,parseRegister,parseRegisterResponse,parsePoll,parsePollResponse,parseCommandandparseEvents. Each takesunknownand returns{ ok: true, value }or{ ok: false, reason }.parseWireErrorreturns the error ornull, andparseJsonreturnsundefinedfor bad JSON. None of them throws. provenanceLine, the line a connector puts before an app's turn text (SPEC 6).
MIT OR Apache-2.0.