paperclipai/paperclip · error · ProtocolError
unsupported_version
unsupported_version
Error message
unsupported protocol version: ${String(obj.v)} What it means
Version handshake in decodeRequest: the request's `v` field does not equal BROKER_PROTOCOL_VERSION. ProtocolError('unsupported_version') fires before any operation handling — the client and broker speak different protocol revisions and cannot proceed safely.
Source
Thrown at packages/tailscale-https-broker/src/protocol.ts:101
}
if (buf.byteLength > MAX_REQUEST_BYTES) {
throw new ProtocolError("malformed_request", "request frame exceeds size limit");
}
let parsed: unknown;
try {
parsed = parseJsonNoDuplicateKeys(buf.toString("utf8"));
} catch (error) {
throw new ProtocolError(
"malformed_request",
`invalid JSON: ${(error as Error).message}`,
);
}
const obj = asObject(parsed);
if (obj.v !== BROKER_PROTOCOL_VERSION) {
throw new ProtocolError(
"unsupported_version",
`unsupported protocol version: ${String(obj.v)}`,
);
}
const requestId = requireStringField(obj, "requestId", REQUEST_ID_RE, "malformed_request", null);
const op = obj.op;
if (op !== "reserve" && op !== "expose" && op !== "remove" && op !== "list") {
throw new ProtocolError("unknown_operation", `unknown operation: ${String(op)}`, requestId);
}
if (op === "list") {
assertExactKeys(obj, ["v", "op", "requestId"], requestId);
return { op: "list", requestId };
}
if (op === "remove" || op === "expose") {View on GitHub (pinned to 120ae5428f)
Solutions
- Use a protocol version supported by this broker; upgrade the client or broker so versions match.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/tailscale-https-broker/src/protocol.ts:101 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18).
Data as JSON: /api/errors/3fa923e691c664ed.
Report an issue: GitHub.