MACP

ProtoRegistry API Reference

The ProtoRegistry handles protobuf serialization and deserialization for all MACP message types.

Constructor

import { ProtoRegistry } from 'macp-sdk-typescript';

const registry = new ProtoRegistry();                    // default proto dir
const registry = new ProtoRegistry('/path/to/proto');    // custom proto dir

Loads and resolves all .proto files at construction time (synchronous).

Properties

PropertyTypeDescription
protoDirstringResolved path to the proto directory

Methods

getKnownTypeName(mode, messageType)

Look up the canonical protobuf type name for a given mode and message type.

registry.getKnownTypeName('macp.mode.decision.v1', 'Proposal');
// → 'macp.modes.decision.v1.ProposalPayload'

registry.getKnownTypeName('', 'SessionStart');
// → 'macp.v1.SessionStartPayload'

registry.getKnownTypeName('ext.multi_round.v1', 'Contribute');
// → '__json__'

registry.getKnownTypeName('unknown', 'Unknown');
// → undefined

encodeMessage(typeName, value)

Encode a TypeScript object to a protobuf Buffer using a specific type name.

const buffer = registry.encodeMessage(
  'macp.modes.decision.v1.ProposalPayload',
  { proposalId: 'p1', option: 'A' },
);

decodeMessage(typeName, payload)

Decode a protobuf Buffer to a TypeScript object.

const obj = registry.decodeMessage(
  'macp.modes.decision.v1.ProposalPayload',
  buffer,
);
// → { proposalId: 'p1', option: 'A', rationale: '', supportingData: <Buffer> }

encodeKnownPayload(mode, messageType, value)

Convenience: look up the type name and encode in one step.

const buffer = registry.encodeKnownPayload(
  'macp.mode.decision.v1',
  'Proposal',
  { proposalId: 'p1', option: 'A' },
);

For __json__ types (like multi-round Contribute), serializes as JSON instead of protobuf.

Throws if no mapping exists for the given mode/messageType combination.

decodeKnownPayload(mode, messageType, payload)

Convenience: look up the type name and decode in one step.

const obj = registry.decodeKnownPayload(
  'macp.mode.decision.v1',
  'Proposal',
  buffer,
);

For unknown types, attempts UTF-8 JSON decoding. Returns undefined for empty payloads.

Type Mappings

Core Messages

messageTypeProto Type
SessionStartmacp.v1.SessionStartPayload
Commitmentmacp.v1.CommitmentPayload
Signalmacp.v1.SignalPayload
Progressmacp.v1.ProgressPayload

Mode Messages

Each mode maps its message types to proto types in the corresponding .proto file. For the full mapping, see MODE_MAP in src/proto-registry.ts.