@agent-vm/control-protocol-contracts 0.0.113 → 0.0.115

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -130,28 +130,6 @@ declare const ControlCorrelationSchema: z.ZodObject<{
130
130
  toolCallId: z.ZodOptional<z.ZodString>;
131
131
  traceId: z.ZodOptional<z.ZodString>;
132
132
  }, z.core.$strict>;
133
- declare const ControlHelloSchema: z.ZodObject<{
134
- bootId: z.ZodString;
135
- controllerEpoch: z.ZodOptional<z.ZodString>;
136
- domain: z.ZodString;
137
- lastSeenControllerSequence: z.ZodOptional<z.ZodNumber>;
138
- lastSeenPeerSequence: z.ZodOptional<z.ZodNumber>;
139
- peerId: z.ZodString;
140
- previousSessionId: z.ZodOptional<z.ZodString>;
141
- protocolVersion: z.ZodLiteral<1>;
142
- }, z.core.$strict>;
143
- declare const ControlHelloResponseSchema: z.ZodObject<{
144
- connectionId: z.ZodString;
145
- controllerEpoch: z.ZodString;
146
- fences: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
147
- outcome: z.ZodEnum<{
148
- generation_mismatch: "generation_mismatch";
149
- rejected: "rejected";
150
- accepted: "accepted";
151
- resync_required: "resync_required";
152
- }>;
153
- sessionId: z.ZodString;
154
- }, z.core.$strict>;
155
133
  declare const ControlCloseSchema: z.ZodObject<{
156
134
  reason: z.ZodEnum<{
157
135
  normal_shutdown: "normal_shutdown";
@@ -317,8 +295,6 @@ type KnownControlDomain = z.infer<typeof KnownControlDomainSchema>;
317
295
  type ControlMessageKind = z.infer<typeof ControlMessageKindSchema>;
318
296
  type ControlDeliveryPolicy = z.infer<typeof ControlDeliveryPolicySchema>;
319
297
  type ControlEnvelope = z.infer<typeof ControlEnvelopeSchema>;
320
- type ControlHello = z.infer<typeof ControlHelloSchema>;
321
- type ControlHelloResponse = z.infer<typeof ControlHelloResponseSchema>;
322
298
  type ControlMessageReceipt = z.infer<typeof ControlMessageReceiptSchema>;
323
299
  type ControlClose = z.infer<typeof ControlCloseSchema>;
324
300
  type ControlSessionCloseReason = z.infer<typeof ControlSessionCloseReasonSchema>;
@@ -326,12 +302,12 @@ type ControlHandshakeCredential = z.infer<typeof ControlHandshakeCredentialSchem
326
302
  type ControlHandshakeProof = z.infer<typeof ControlHandshakeProofSchema>;
327
303
  type ControlReadyRequestCredential = z.infer<typeof ControlReadyRequestCredentialSchema>;
328
304
  type ControlReadyRequestProof = z.infer<typeof ControlReadyRequestProofSchema>;
329
- type ControlHelloAcknowledge = (response: ControlHelloResponse) => void;
305
+ type ControlHelloAcknowledge<TControlHelloResponse> = (response: TControlHelloResponse) => void;
330
306
  type ControlMessageAcknowledge = (receipt: ControlMessageReceipt) => void;
331
307
  type ControlCloseAcknowledge = (receipt: ControlMessageReceipt) => void;
332
- interface ControlSessionControllerToPeerEvents<TDomainMessage> {
308
+ interface ControlSessionControllerToPeerEvents<TDomainMessage, TControlHello, TControlHelloResponse> {
333
309
  'control:close': (payload: ControlClose, acknowledge: ControlCloseAcknowledge) => void;
334
- 'control:hello': (payload: ControlHello, acknowledge: ControlHelloAcknowledge) => void;
310
+ 'control:hello': (payload: TControlHello, acknowledge: ControlHelloAcknowledge<TControlHelloResponse>) => void;
335
311
  'control:message': (envelope: ControlEnvelope, payload: TDomainMessage, acknowledge: ControlMessageAcknowledge) => void;
336
312
  }
337
313
  interface ControlSessionPeerToControllerEvents<TDomainMessage> {
@@ -368,6 +344,7 @@ declare function assertDerivedControlDeliveryPolicy(props: DeliveryPolicyDerivat
368
344
  declare function coalesceLatestWinsByKey<TMessage>(messages: readonly TMessage[], keyForMessage: (message: TMessage) => string): readonly TMessage[];
369
345
  declare function shouldReplayControlEnvelope(envelope: ControlEnvelope): boolean;
370
346
  interface ControlSequenceContinuityProps {
347
+ readonly advisorySequenceMode?: 'contiguous' | 'lossy';
371
348
  readonly envelope: ControlEnvelope;
372
349
  readonly lastSeenSequence: number;
373
350
  }
@@ -391,5 +368,5 @@ type ControlSequenceContinuityDecision = {
391
368
  declare function evaluateControlSequenceContinuity(props: ControlSequenceContinuityProps): ControlSequenceContinuityDecision;
392
369
  declare function buildControlProtocolJsonSchemas(): Readonly<Record<string, unknown>>;
393
370
  //#endregion
394
- export { CONTROL_HANDSHAKE_HEADER_NAMES, CONTROL_HANDSHAKE_PROTOCOL_HEADER_VALUE, CONTROL_PROTOCOL_VERSION, CONTROL_QUEUE_LIMITS, CONTROL_READY_HEADER_NAMES, CONTROL_SESSION_TIMING_MS, ControlClose, ControlCloseAcknowledge, ControlCloseSchema, ControlCorrelationSchema, ControlDeliveryPolicy, ControlDeliveryPolicySchema, ControlDomain, ControlDomainSchema, ControlEnvelope, ControlEnvelopeSchema, ControlEnvelopeSequencedMessage, ControlHandshakeCredential, ControlHandshakeCredentialSchema, ControlHandshakeHeadersSchema, ControlHandshakeProof, ControlHandshakeProofSchema, ControlHello, ControlHelloAcknowledge, ControlHelloResponse, ControlHelloResponseSchema, ControlHelloSchema, ControlMessageAcceptedReceiptSchema, ControlMessageAcknowledge, ControlMessageKind, ControlMessageKindSchema, ControlMessageReceipt, ControlMessageReceiptSchema, ControlMessageRejectedReceiptSchema, ControlReadyRequestCredential, ControlReadyRequestCredentialSchema, ControlReadyRequestProof, ControlReadyRequestProofSchema, ControlRpcErrorSchema, ControlRpcResultBaseSchema, ControlSequenceContinuityDecision, ControlSequenceContinuityProps, ControlSessionCloseReason, ControlSessionCloseReasonSchema, ControlSessionControllerToPeerEvents, ControlSessionPeerToControllerEvents, ControlSessionStateSchema, DeliveryPolicyDerivationProps, DomainCommandResultResponseLinkSchema, DomainControlMessageIdentity, KnownControlDomain, KnownControlDomainSchema, assertControlEnvelopeMatchesDomainMessage, assertControlMessageReceiptAccepted, assertDerivedControlDeliveryPolicy, buildControlHandshakeSignaturePayload, buildControlMessageExceptionRejectionReceipt, buildControlMessageReceipt, buildControlMessageRejectionReceipt, buildControlProtocolJsonSchemas, buildControlReadyRequestSignaturePayload, coalesceLatestWinsByKey, controlMessageKindDisposition, deriveControlDeliveryPolicy, evaluateControlSequenceContinuity, extractDomainCommandResultResponseToMessageId, orderControlMessagesByEnvelopeSequence, shouldReplayControlEnvelope };
371
+ export { CONTROL_HANDSHAKE_HEADER_NAMES, CONTROL_HANDSHAKE_PROTOCOL_HEADER_VALUE, CONTROL_PROTOCOL_VERSION, CONTROL_QUEUE_LIMITS, CONTROL_READY_HEADER_NAMES, CONTROL_SESSION_TIMING_MS, ControlClose, ControlCloseAcknowledge, ControlCloseSchema, ControlCorrelationSchema, ControlDeliveryPolicy, ControlDeliveryPolicySchema, ControlDomain, ControlDomainSchema, ControlEnvelope, ControlEnvelopeSchema, ControlEnvelopeSequencedMessage, ControlHandshakeCredential, ControlHandshakeCredentialSchema, ControlHandshakeHeadersSchema, ControlHandshakeProof, ControlHandshakeProofSchema, ControlHelloAcknowledge, ControlMessageAcceptedReceiptSchema, ControlMessageAcknowledge, ControlMessageKind, ControlMessageKindSchema, ControlMessageReceipt, ControlMessageReceiptSchema, ControlMessageRejectedReceiptSchema, ControlReadyRequestCredential, ControlReadyRequestCredentialSchema, ControlReadyRequestProof, ControlReadyRequestProofSchema, ControlRpcErrorSchema, ControlRpcResultBaseSchema, ControlSequenceContinuityDecision, ControlSequenceContinuityProps, ControlSessionCloseReason, ControlSessionCloseReasonSchema, ControlSessionControllerToPeerEvents, ControlSessionPeerToControllerEvents, ControlSessionStateSchema, DeliveryPolicyDerivationProps, DomainCommandResultResponseLinkSchema, DomainControlMessageIdentity, KnownControlDomain, KnownControlDomainSchema, assertControlEnvelopeMatchesDomainMessage, assertControlMessageReceiptAccepted, assertDerivedControlDeliveryPolicy, buildControlHandshakeSignaturePayload, buildControlMessageExceptionRejectionReceipt, buildControlMessageReceipt, buildControlMessageRejectionReceipt, buildControlProtocolJsonSchemas, buildControlReadyRequestSignaturePayload, coalesceLatestWinsByKey, controlMessageKindDisposition, deriveControlDeliveryPolicy, evaluateControlSequenceContinuity, extractDomainCommandResultResponseToMessageId, orderControlMessagesByEnvelopeSequence, shouldReplayControlEnvelope };
395
372
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -113,28 +113,6 @@ const ControlCorrelationSchema = z.object({
113
113
  toolCallId: z.string().min(1).optional(),
114
114
  traceId: z.string().regex(/^[0-9a-f]{32}$/u).optional()
115
115
  }).strict();
116
- const ControlHelloSchema = z.object({
117
- bootId: z.string().min(1),
118
- controllerEpoch: z.string().min(1).optional(),
119
- domain: ControlDomainSchema,
120
- lastSeenControllerSequence: z.number().int().nonnegative().optional(),
121
- lastSeenPeerSequence: z.number().int().nonnegative().optional(),
122
- peerId: z.string().min(1),
123
- previousSessionId: z.string().uuid().optional(),
124
- protocolVersion: z.literal(1)
125
- }).strict();
126
- const ControlHelloResponseSchema = z.object({
127
- connectionId: z.string().uuid(),
128
- controllerEpoch: z.string().min(1),
129
- fences: z.record(z.string(), z.string()).optional(),
130
- outcome: z.enum([
131
- "accepted",
132
- "rejected",
133
- "resync_required",
134
- "generation_mismatch"
135
- ]),
136
- sessionId: z.string().uuid()
137
- }).strict();
138
116
  const ControlCloseSchema = z.object({
139
117
  reason: ControlSessionCloseReasonSchema,
140
118
  safeMessage: z.string().min(1).optional(),
@@ -298,12 +276,13 @@ function controlSequenceDiagnosticSuffix(envelope) {
298
276
  return ` kind=${envelope.kind} operation=${envelope.operation ?? "<none>"} delivery=${envelope.deliveryPolicy} sessionId=${envelope.sessionId}`;
299
277
  }
300
278
  function evaluateControlSequenceContinuity(props) {
279
+ const advisorySequenceMode = props.advisorySequenceMode ?? "lossy";
301
280
  if (props.envelope.sequence <= props.lastSeenSequence) return {
302
281
  action: "drop",
303
282
  nextLastSeenSequence: props.lastSeenSequence,
304
283
  safeMessage: `control sequence did not advance: last=${String(props.lastSeenSequence)} received=${String(props.envelope.sequence)}${controlSequenceDiagnosticSuffix(props.envelope)}`
305
284
  };
306
- if (props.envelope.deliveryPolicy === "droppable" || props.envelope.deliveryPolicy === "latest_wins") return {
285
+ if (advisorySequenceMode === "lossy" && (props.envelope.deliveryPolicy === "droppable" || props.envelope.deliveryPolicy === "latest_wins")) return {
307
286
  action: "accept",
308
287
  nextLastSeenSequence: props.lastSeenSequence
309
288
  };
@@ -325,13 +304,11 @@ function buildControlProtocolJsonSchemas() {
325
304
  envelope: z.toJSONSchema(ControlEnvelopeSchema, { io: "input" }),
326
305
  handshakeCredential: z.toJSONSchema(ControlHandshakeCredentialSchema, { io: "input" }),
327
306
  handshakeProof: z.toJSONSchema(ControlHandshakeProofSchema, { io: "input" }),
328
- hello: z.toJSONSchema(ControlHelloSchema, { io: "input" }),
329
- helloResponse: z.toJSONSchema(ControlHelloResponseSchema, { io: "input" }),
330
307
  readyRequestCredential: z.toJSONSchema(ControlReadyRequestCredentialSchema, { io: "input" }),
331
308
  readyRequestProof: z.toJSONSchema(ControlReadyRequestProofSchema, { io: "input" })
332
309
  };
333
310
  }
334
311
  //#endregion
335
- export { CONTROL_HANDSHAKE_HEADER_NAMES, CONTROL_HANDSHAKE_PROTOCOL_HEADER_VALUE, CONTROL_PROTOCOL_VERSION, CONTROL_QUEUE_LIMITS, CONTROL_READY_HEADER_NAMES, CONTROL_SESSION_TIMING_MS, ControlCloseSchema, ControlCorrelationSchema, ControlDeliveryPolicySchema, ControlDomainSchema, ControlEnvelopeSchema, ControlHandshakeCredentialSchema, ControlHandshakeHeadersSchema, ControlHandshakeProofSchema, ControlHelloResponseSchema, ControlHelloSchema, ControlMessageAcceptedReceiptSchema, ControlMessageKindSchema, ControlMessageReceiptSchema, ControlMessageRejectedReceiptSchema, ControlReadyRequestCredentialSchema, ControlReadyRequestProofSchema, ControlRpcErrorSchema, ControlRpcResultBaseSchema, ControlSessionCloseReasonSchema, ControlSessionStateSchema, DomainCommandResultResponseLinkSchema, KnownControlDomainSchema, assertControlEnvelopeMatchesDomainMessage, assertControlMessageReceiptAccepted, assertDerivedControlDeliveryPolicy, buildControlHandshakeSignaturePayload, buildControlMessageExceptionRejectionReceipt, buildControlMessageReceipt, buildControlMessageRejectionReceipt, buildControlProtocolJsonSchemas, buildControlReadyRequestSignaturePayload, coalesceLatestWinsByKey, controlMessageKindDisposition, deriveControlDeliveryPolicy, evaluateControlSequenceContinuity, extractDomainCommandResultResponseToMessageId, orderControlMessagesByEnvelopeSequence, shouldReplayControlEnvelope };
312
+ export { CONTROL_HANDSHAKE_HEADER_NAMES, CONTROL_HANDSHAKE_PROTOCOL_HEADER_VALUE, CONTROL_PROTOCOL_VERSION, CONTROL_QUEUE_LIMITS, CONTROL_READY_HEADER_NAMES, CONTROL_SESSION_TIMING_MS, ControlCloseSchema, ControlCorrelationSchema, ControlDeliveryPolicySchema, ControlDomainSchema, ControlEnvelopeSchema, ControlHandshakeCredentialSchema, ControlHandshakeHeadersSchema, ControlHandshakeProofSchema, ControlMessageAcceptedReceiptSchema, ControlMessageKindSchema, ControlMessageReceiptSchema, ControlMessageRejectedReceiptSchema, ControlReadyRequestCredentialSchema, ControlReadyRequestProofSchema, ControlRpcErrorSchema, ControlRpcResultBaseSchema, ControlSessionCloseReasonSchema, ControlSessionStateSchema, DomainCommandResultResponseLinkSchema, KnownControlDomainSchema, assertControlEnvelopeMatchesDomainMessage, assertControlMessageReceiptAccepted, assertDerivedControlDeliveryPolicy, buildControlHandshakeSignaturePayload, buildControlMessageExceptionRejectionReceipt, buildControlMessageReceipt, buildControlMessageRejectionReceipt, buildControlProtocolJsonSchemas, buildControlReadyRequestSignaturePayload, coalesceLatestWinsByKey, controlMessageKindDisposition, deriveControlDeliveryPolicy, evaluateControlSequenceContinuity, extractDomainCommandResultResponseToMessageId, orderControlMessagesByEnvelopeSequence, shouldReplayControlEnvelope };
336
313
 
337
314
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { ZodError, z } from 'zod/v4';\n\nexport const CONTROL_PROTOCOL_VERSION = 1;\n\nexport const CONTROL_SESSION_TIMING_MS = {\n\tactiveUseHeartbeatCadence: 30_000,\n\tactiveUseStaleTtl: 120_000,\n\tclockSkewTolerance: 30_000,\n\tcommandAckTimeout: 2_000,\n\tconnectTimeout: 3_000,\n\tcontrolSessionDeathGrace: 600_000,\n\tengineIoPingInterval: 10_000,\n\tengineIoPingTimeout: 10_000,\n\tmanualReconnectInitialDelay: 250,\n\tmanualReconnectJitterRatio: 0.2,\n\tmanualReconnectMaxDelay: 5_000,\n\tpriorityAckFailureThreshold: 3,\n\tresyncTimeout: 5_000,\n} as const;\n\nexport const CONTROL_QUEUE_LIMITS = {\n\tdedupeWindowMessages: 512,\n\tdedupeWindowTtlMs: 60_000,\n\tmaxHttpBufferBytes: 65_536,\n\tqueueByteCap: 4 * 1024 * 1024,\n\tqueueMessageCap: 256,\n} as const;\n\nexport const ControlDomainSchema = z.string().regex(/^[a-z][a-z0-9_]*$/u);\n\nexport const KnownControlDomainSchema = z.enum(['gateway_control', 'worker_control']);\n\nexport const ControlMessageKindSchema = z.enum(['command', 'command_result', 'event', 'heartbeat']);\n\nexport const ControlDeliveryPolicySchema = z.enum([\n\t'latest_wins',\n\t'droppable',\n\t'acked_idempotent',\n\t'critical_idempotent',\n\t'append_only_observation',\n\t'single_use_critical',\n\t'forbidden_bulk',\n]);\n\nexport const ControlSessionCloseReasonSchema = z.enum([\n\t'normal_shutdown',\n\t'controller_restart',\n\t'peer_restart',\n\t'auth_failed',\n\t'protocol_version_mismatch',\n\t'domain_mismatch',\n\t'generation_mismatch',\n\t'controller_epoch_mismatch',\n\t'duplicate_session',\n\t'stale_session',\n\t'sequence_gap',\n\t'ack_timeout',\n\t'command_timeout',\n\t'resync_timeout',\n\t'queue_overflow',\n\t'message_too_large',\n\t'schema_validation_failed',\n\t'forbidden_bulk_message',\n\t'transport_error',\n]);\n\nexport const ControlEnvelopeSchema = z\n\t.object({\n\t\tbootId: z.string().min(1),\n\t\tcommandId: z.string().uuid().optional(),\n\t\tconnectionId: z.string().uuid(),\n\t\tcontrollerEpoch: z.string().min(1),\n\t\tcreatedAtMs: z.number().int().positive(),\n\t\tdeliveryPolicy: ControlDeliveryPolicySchema,\n\t\tdomain: ControlDomainSchema,\n\t\texpiresAtMs: z.number().int().positive().optional(),\n\t\tidempotencyKey: z.string().min(1).optional(),\n\t\tkind: ControlMessageKindSchema,\n\t\tmessageId: z.string().uuid(),\n\t\toperation: z.string().min(1).optional(),\n\t\tpeerId: z.string().min(1),\n\t\tprotocolVersion: z.literal(CONTROL_PROTOCOL_VERSION),\n\t\tsequence: z.number().int().nonnegative(),\n\t\tsessionId: z.string().uuid(),\n\t\tzoneId: z.string().min(1),\n\t})\n\t.strict();\n\nexport const ControlSessionStateSchema = z.enum([\n\t'unknown',\n\t'connecting',\n\t'ready',\n\t'reconnecting',\n\t'stale',\n\t'rejected',\n\t'generation_mismatch',\n\t'failed',\n\t'closed',\n]);\n\nexport const ControlRpcResultBaseSchema = z.enum([\n\t'ok',\n\t'failed',\n\t'timeout',\n\t'rejected',\n\t'cancelled',\n\t'stale_generation',\n]);\n\nexport const ControlRpcErrorSchema = z\n\t.object({\n\t\terrorClass: z.string().min(1),\n\t\tretryable: z.boolean().optional(),\n\t\tsafeMessage: z.string().min(1).optional(),\n\t})\n\t.strict();\n\nexport const ControlCorrelationSchema = z\n\t.object({\n\t\tcausationId: z.string().uuid().optional(),\n\t\tcorrelationId: z.string().min(1).optional(),\n\t\trequestId: z.string().min(1).optional(),\n\t\trunId: z.string().min(1).optional(),\n\t\tsessionKeyDigest: z.string().min(32).optional(),\n\t\ttoolCallId: z.string().min(1).optional(),\n\t\ttraceId: z\n\t\t\t.string()\n\t\t\t.regex(/^[0-9a-f]{32}$/u)\n\t\t\t.optional(),\n\t})\n\t.strict();\n\nexport const ControlHelloSchema = z\n\t.object({\n\t\tbootId: z.string().min(1),\n\t\tcontrollerEpoch: z.string().min(1).optional(),\n\t\tdomain: ControlDomainSchema,\n\t\tlastSeenControllerSequence: z.number().int().nonnegative().optional(),\n\t\tlastSeenPeerSequence: z.number().int().nonnegative().optional(),\n\t\tpeerId: z.string().min(1),\n\t\tpreviousSessionId: z.string().uuid().optional(),\n\t\tprotocolVersion: z.literal(CONTROL_PROTOCOL_VERSION),\n\t})\n\t.strict();\n\nexport const ControlHelloResponseSchema = z\n\t.object({\n\t\tconnectionId: z.string().uuid(),\n\t\tcontrollerEpoch: z.string().min(1),\n\t\tfences: z.record(z.string(), z.string()).optional(),\n\t\toutcome: z.enum(['accepted', 'rejected', 'resync_required', 'generation_mismatch']),\n\t\tsessionId: z.string().uuid(),\n\t})\n\t.strict();\n\nexport const ControlCloseSchema = z\n\t.object({\n\t\treason: ControlSessionCloseReasonSchema,\n\t\tsafeMessage: z.string().min(1).optional(),\n\t\tsessionId: z.string().uuid(),\n\t})\n\t.strict();\n\nexport const ControlMessageAcceptedReceiptSchema = z\n\t.object({\n\t\treceived: z.literal(true),\n\t})\n\t.strict();\n\nexport const ControlMessageRejectedReceiptSchema = z\n\t.object({\n\t\terrorClass: z.string().min(1),\n\t\treceived: z.literal(false),\n\t\tsafeMessage: z.string().min(1).optional(),\n\t})\n\t.strict();\n\nexport const ControlMessageReceiptSchema = z.discriminatedUnion('received', [\n\tControlMessageAcceptedReceiptSchema,\n\tControlMessageRejectedReceiptSchema,\n]);\n\nexport const DomainCommandResultResponseLinkSchema = z\n\t.object({\n\t\tkind: z.literal('command_result'),\n\t\tpayload: z\n\t\t\t.object({\n\t\t\t\tresponseToMessageId: z.string().uuid(),\n\t\t\t})\n\t\t\t.passthrough(),\n\t})\n\t.passthrough();\n\nexport const ControlHandshakeCredentialSchema = z\n\t.object({\n\t\taudience: KnownControlDomainSchema,\n\t\tbootId: z.string().min(1),\n\t\tcontrollerEpoch: z.string().min(1),\n\t\tcredentialId: z.string().min(1),\n\t\texpiresAtMs: z.number().int().positive(),\n\t\tgenerationId: z.string().min(1),\n\t\tissuedAtMs: z.number().int().positive(),\n\t\tnonce: z.string().min(16),\n\t\tpeerId: z.string().min(1),\n\t\tprotocolVersion: z.literal(CONTROL_PROTOCOL_VERSION),\n\t\tzoneId: z.string().min(1),\n\t})\n\t.strict()\n\t.refine((value) => value.expiresAtMs > value.issuedAtMs, {\n\t\tmessage: 'expiresAtMs must be greater than issuedAtMs',\n\t\tpath: ['expiresAtMs'],\n\t});\n\nexport const ControlHandshakeProofSchema = ControlHandshakeCredentialSchema.extend({\n\tsignature: z.string().min(1),\n}).strict();\n\nexport const ControlReadyRequestCredentialSchema = z\n\t.object({\n\t\taudience: KnownControlDomainSchema,\n\t\tbootId: z.string().min(1),\n\t\tcontrollerEpoch: z.string().min(1),\n\t\tgenerationId: z.string().min(1),\n\t\tissuedAtMs: z.number().int().positive(),\n\t\tpeerId: z.string().min(1),\n\t\tprotocolVersion: z.literal(CONTROL_PROTOCOL_VERSION),\n\t\trequestId: z.string().uuid(),\n\t\tzoneId: z.string().min(1),\n\t})\n\t.strict();\n\nexport const ControlReadyRequestProofSchema = ControlReadyRequestCredentialSchema.extend({\n\tsignature: z.string().min(1),\n}).strict();\n\nexport const ControlHandshakeHeadersSchema = z\n\t.object({\n\t\tproof: ControlHandshakeProofSchema,\n\t})\n\t.strict();\n\nexport const CONTROL_HANDSHAKE_PROTOCOL_HEADER_VALUE = 'agent-vm.control.v1';\n\nexport const CONTROL_HANDSHAKE_HEADER_NAMES = {\n\tbootId: 'x-agent-vm-control-boot-id',\n\tcontrollerEpoch: 'x-agent-vm-control-controller-epoch',\n\tcredentialId: 'x-agent-vm-control-credential-id',\n\tdomain: 'x-agent-vm-control-domain',\n\texpiresAtMs: 'x-agent-vm-control-expires-at-ms',\n\tgenerationId: 'x-agent-vm-control-generation-id',\n\tissuedAtMs: 'x-agent-vm-control-issued-at-ms',\n\tnonce: 'x-agent-vm-control-nonce',\n\tpeerId: 'x-agent-vm-control-peer-id',\n\tprotocol: 'x-agent-vm-control-protocol',\n\tsignature: 'x-agent-vm-control-signature',\n\tzoneId: 'x-agent-vm-control-zone-id',\n} as const;\n\nexport const CONTROL_READY_HEADER_NAMES = {\n\tbootId: CONTROL_HANDSHAKE_HEADER_NAMES.bootId,\n\tcontrollerEpoch: CONTROL_HANDSHAKE_HEADER_NAMES.controllerEpoch,\n\tdomain: CONTROL_HANDSHAKE_HEADER_NAMES.domain,\n\tgenerationId: CONTROL_HANDSHAKE_HEADER_NAMES.generationId,\n\tissuedAtMs: CONTROL_HANDSHAKE_HEADER_NAMES.issuedAtMs,\n\tpeerId: CONTROL_HANDSHAKE_HEADER_NAMES.peerId,\n\tprotocol: CONTROL_HANDSHAKE_HEADER_NAMES.protocol,\n\trequestId: 'x-agent-vm-control-ready-request-id',\n\tsignature: CONTROL_HANDSHAKE_HEADER_NAMES.signature,\n\tzoneId: CONTROL_HANDSHAKE_HEADER_NAMES.zoneId,\n} as const;\n\nexport const controlMessageKindDisposition = {\n\tcommand: 'rpc_lifecycle',\n\tcommand_result: 'rpc_lifecycle',\n\tevent: 'domain_event',\n\theartbeat: 'priority_liveness',\n} as const satisfies Record<ControlMessageKind, string>;\n\nexport type ControlDomain = z.infer<typeof ControlDomainSchema>;\nexport type KnownControlDomain = z.infer<typeof KnownControlDomainSchema>;\nexport type ControlMessageKind = z.infer<typeof ControlMessageKindSchema>;\nexport type ControlDeliveryPolicy = z.infer<typeof ControlDeliveryPolicySchema>;\nexport type ControlEnvelope = z.infer<typeof ControlEnvelopeSchema>;\nexport type ControlHello = z.infer<typeof ControlHelloSchema>;\nexport type ControlHelloResponse = z.infer<typeof ControlHelloResponseSchema>;\nexport type ControlMessageReceipt = z.infer<typeof ControlMessageReceiptSchema>;\nexport type ControlClose = z.infer<typeof ControlCloseSchema>;\nexport type ControlSessionCloseReason = z.infer<typeof ControlSessionCloseReasonSchema>;\nexport type ControlHandshakeCredential = z.infer<typeof ControlHandshakeCredentialSchema>;\nexport type ControlHandshakeProof = z.infer<typeof ControlHandshakeProofSchema>;\nexport type ControlReadyRequestCredential = z.infer<typeof ControlReadyRequestCredentialSchema>;\nexport type ControlReadyRequestProof = z.infer<typeof ControlReadyRequestProofSchema>;\n\nexport type ControlHelloAcknowledge = (response: ControlHelloResponse) => void;\nexport type ControlMessageAcknowledge = (receipt: ControlMessageReceipt) => void;\nexport type ControlCloseAcknowledge = (receipt: ControlMessageReceipt) => void;\n\nexport interface ControlSessionControllerToPeerEvents<TDomainMessage> {\n\t'control:close': (payload: ControlClose, acknowledge: ControlCloseAcknowledge) => void;\n\t'control:hello': (payload: ControlHello, acknowledge: ControlHelloAcknowledge) => void;\n\t'control:message': (\n\t\tenvelope: ControlEnvelope,\n\t\tpayload: TDomainMessage,\n\t\tacknowledge: ControlMessageAcknowledge,\n\t) => void;\n}\n\nexport interface ControlSessionPeerToControllerEvents<TDomainMessage> {\n\t'control:close': (payload: ControlClose, acknowledge: ControlCloseAcknowledge) => void;\n\t'control:message': (\n\t\tenvelope: ControlEnvelope,\n\t\tpayload: TDomainMessage,\n\t\tacknowledge: ControlMessageAcknowledge,\n\t) => void;\n}\n\nexport interface DomainControlMessageIdentity {\n\treadonly kind: ControlMessageKind;\n\treadonly operation?: string;\n}\n\nexport interface DeliveryPolicyDerivationProps {\n\treadonly envelope: ControlEnvelope;\n\treadonly policyByOperation: Readonly<Record<string, ControlDeliveryPolicy>>;\n\treadonly policyByKind?: Partial<Record<ControlMessageKind, ControlDeliveryPolicy>>;\n}\n\nexport function assertControlEnvelopeMatchesDomainMessage(\n\tenvelope: ControlEnvelope,\n\tdomainMessage: DomainControlMessageIdentity,\n): void {\n\tif (envelope.kind !== domainMessage.kind) {\n\t\tthrow new Error(`control message kind mismatch: ${envelope.kind} !== ${domainMessage.kind}`);\n\t}\n\tif (envelope.operation !== domainMessage.operation) {\n\t\tthrow new Error(\n\t\t\t`control message operation mismatch: ${envelope.operation ?? '<none>'} !== ${domainMessage.operation ?? '<none>'}`,\n\t\t);\n\t}\n}\n\nexport function buildControlMessageReceipt(): ControlMessageReceipt {\n\treturn ControlMessageReceiptSchema.parse({ received: true });\n}\n\nexport function buildControlMessageRejectionReceipt(props: {\n\treadonly errorClass: string;\n\treadonly safeMessage?: string;\n}): ControlMessageReceipt {\n\treturn ControlMessageReceiptSchema.parse({\n\t\terrorClass: props.errorClass,\n\t\treceived: false,\n\t\t...(props.safeMessage === undefined ? {} : { safeMessage: props.safeMessage }),\n\t});\n}\n\nexport function buildControlMessageExceptionRejectionReceipt(props: {\n\treadonly error: unknown;\n\treadonly processingErrorClass: string;\n\treadonly safeMessage: string;\n\treadonly schemaErrorClass?: string;\n}): ControlMessageReceipt {\n\treturn buildControlMessageRejectionReceipt({\n\t\terrorClass:\n\t\t\tprops.error instanceof ZodError\n\t\t\t\t? (props.schemaErrorClass ?? 'schema_validation_failed')\n\t\t\t\t: props.processingErrorClass,\n\t\tsafeMessage: props.safeMessage,\n\t});\n}\n\nexport function assertControlMessageReceiptAccepted(receiptPayload: unknown): void {\n\tconst receipt = ControlMessageReceiptSchema.parse(receiptPayload);\n\tif (!receipt.received) {\n\t\tthrow new Error(receipt.safeMessage ?? receipt.errorClass);\n\t}\n}\n\nexport function extractDomainCommandResultResponseToMessageId(\n\tpayload: unknown,\n): string | undefined {\n\tconst parsed = DomainCommandResultResponseLinkSchema.safeParse(payload);\n\treturn parsed.success ? parsed.data.payload.responseToMessageId : undefined;\n}\n\nexport function buildControlHandshakeSignaturePayload(proof: ControlHandshakeCredential): string {\n\treturn JSON.stringify({\n\t\taudience: proof.audience,\n\t\tbootId: proof.bootId,\n\t\tcontrollerEpoch: proof.controllerEpoch,\n\t\tcredentialId: proof.credentialId,\n\t\texpiresAtMs: proof.expiresAtMs,\n\t\tgenerationId: proof.generationId,\n\t\tissuedAtMs: proof.issuedAtMs,\n\t\tnonce: proof.nonce,\n\t\tpeerId: proof.peerId,\n\t\tprotocolVersion: proof.protocolVersion,\n\t\tzoneId: proof.zoneId,\n\t});\n}\n\nexport function buildControlReadyRequestSignaturePayload(\n\tproof: ControlReadyRequestCredential,\n): string {\n\treturn JSON.stringify({\n\t\taudience: proof.audience,\n\t\tbootId: proof.bootId,\n\t\tcontrollerEpoch: proof.controllerEpoch,\n\t\tgenerationId: proof.generationId,\n\t\tissuedAtMs: proof.issuedAtMs,\n\t\tpeerId: proof.peerId,\n\t\tprotocolVersion: proof.protocolVersion,\n\t\trequestId: proof.requestId,\n\t\tzoneId: proof.zoneId,\n\t});\n}\n\nexport function deriveControlDeliveryPolicy(\n\tprops: DeliveryPolicyDerivationProps,\n): ControlDeliveryPolicy {\n\tif (props.envelope.operation !== undefined) {\n\t\tconst operationPolicy = props.policyByOperation[props.envelope.operation];\n\t\tif (operationPolicy !== undefined) {\n\t\t\treturn operationPolicy;\n\t\t}\n\t}\n\tconst kindPolicy = props.policyByKind?.[props.envelope.kind];\n\tif (kindPolicy !== undefined) {\n\t\treturn kindPolicy;\n\t}\n\tthrow new Error(\n\t\t`no derived delivery policy for ${props.envelope.kind}:${props.envelope.operation ?? '<none>'}`,\n\t);\n}\n\nexport function assertDerivedControlDeliveryPolicy(props: DeliveryPolicyDerivationProps): void {\n\tconst derivedPolicy = deriveControlDeliveryPolicy(props);\n\tif (props.envelope.deliveryPolicy !== derivedPolicy) {\n\t\tthrow new Error(\n\t\t\t`control delivery policy mismatch: ${props.envelope.deliveryPolicy} !== ${derivedPolicy}`,\n\t\t);\n\t}\n}\n\nexport function coalesceLatestWinsByKey<TMessage>(\n\tmessages: readonly TMessage[],\n\tkeyForMessage: (message: TMessage) => string,\n): readonly TMessage[] {\n\tconst latestByKey = new Map<string, TMessage>();\n\tfor (const message of messages) {\n\t\tlatestByKey.set(keyForMessage(message), message);\n\t}\n\treturn [...latestByKey.values()];\n}\n\nexport function shouldReplayControlEnvelope(envelope: ControlEnvelope): boolean {\n\treturn (\n\t\tenvelope.deliveryPolicy !== 'droppable' &&\n\t\tenvelope.deliveryPolicy !== 'latest_wins' &&\n\t\tenvelope.deliveryPolicy !== 'forbidden_bulk'\n\t);\n}\n\nexport interface ControlSequenceContinuityProps {\n\treadonly envelope: ControlEnvelope;\n\treadonly lastSeenSequence: number;\n}\n\nexport interface ControlEnvelopeSequencedMessage {\n\treadonly envelope: Pick<ControlEnvelope, 'sequence'>;\n}\n\nexport function orderControlMessagesByEnvelopeSequence<\n\tTControlMessage extends ControlEnvelopeSequencedMessage,\n>(messages: readonly TControlMessage[]): readonly TControlMessage[] {\n\treturn messages.toSorted((left, right) => left.envelope.sequence - right.envelope.sequence);\n}\n\nfunction controlSequenceDiagnosticSuffix(envelope: ControlEnvelope): string {\n\treturn ` kind=${envelope.kind} operation=${envelope.operation ?? '<none>'} delivery=${envelope.deliveryPolicy} sessionId=${envelope.sessionId}`;\n}\n\nexport type ControlSequenceContinuityDecision =\n\t| {\n\t\t\treadonly action: 'accept';\n\t\t\treadonly nextLastSeenSequence: number;\n\t }\n\t| {\n\t\t\treadonly action: 'drop';\n\t\t\treadonly nextLastSeenSequence: number;\n\t\t\treadonly safeMessage: string;\n\t }\n\t| {\n\t\t\treadonly action: 'stale';\n\t\t\treadonly closeReason: Extract<ControlSessionCloseReason, 'sequence_gap'>;\n\t\t\treadonly nextLastSeenSequence: number;\n\t\t\treadonly safeMessage: string;\n\t };\n\nexport function evaluateControlSequenceContinuity(\n\tprops: ControlSequenceContinuityProps,\n): ControlSequenceContinuityDecision {\n\tif (props.envelope.sequence <= props.lastSeenSequence) {\n\t\treturn {\n\t\t\taction: 'drop',\n\t\t\tnextLastSeenSequence: props.lastSeenSequence,\n\t\t\tsafeMessage: `control sequence did not advance: last=${String(props.lastSeenSequence)} received=${String(props.envelope.sequence)}${controlSequenceDiagnosticSuffix(props.envelope)}`,\n\t\t};\n\t}\n\tif (\n\t\tprops.envelope.deliveryPolicy === 'droppable' ||\n\t\tprops.envelope.deliveryPolicy === 'latest_wins'\n\t) {\n\t\treturn {\n\t\t\taction: 'accept',\n\t\t\tnextLastSeenSequence: props.lastSeenSequence,\n\t\t};\n\t}\n\tconst expectedSequence = props.lastSeenSequence + 1;\n\tif (props.envelope.sequence === expectedSequence) {\n\t\treturn {\n\t\t\taction: 'accept',\n\t\t\tnextLastSeenSequence: props.envelope.sequence,\n\t\t};\n\t}\n\treturn {\n\t\taction: 'stale',\n\t\tcloseReason: 'sequence_gap',\n\t\tnextLastSeenSequence: props.lastSeenSequence,\n\t\tsafeMessage: `control sequence gap: expected=${String(expectedSequence)} received=${String(props.envelope.sequence)}${controlSequenceDiagnosticSuffix(props.envelope)}`,\n\t};\n}\n\nexport function buildControlProtocolJsonSchemas(): Readonly<Record<string, unknown>> {\n\treturn {\n\t\tclose: z.toJSONSchema(ControlCloseSchema, { io: 'input' }),\n\t\tenvelope: z.toJSONSchema(ControlEnvelopeSchema, { io: 'input' }),\n\t\thandshakeCredential: z.toJSONSchema(ControlHandshakeCredentialSchema, { io: 'input' }),\n\t\thandshakeProof: z.toJSONSchema(ControlHandshakeProofSchema, { io: 'input' }),\n\t\thello: z.toJSONSchema(ControlHelloSchema, { io: 'input' }),\n\t\thelloResponse: z.toJSONSchema(ControlHelloResponseSchema, { io: 'input' }),\n\t\treadyRequestCredential: z.toJSONSchema(ControlReadyRequestCredentialSchema, {\n\t\t\tio: 'input',\n\t\t}),\n\t\treadyRequestProof: z.toJSONSchema(ControlReadyRequestProofSchema, { io: 'input' }),\n\t};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { ZodError, z } from 'zod/v4';\n\nexport const CONTROL_PROTOCOL_VERSION = 1;\n\nexport const CONTROL_SESSION_TIMING_MS = {\n\tactiveUseHeartbeatCadence: 30_000,\n\tactiveUseStaleTtl: 120_000,\n\tclockSkewTolerance: 30_000,\n\tcommandAckTimeout: 2_000,\n\tconnectTimeout: 3_000,\n\tcontrolSessionDeathGrace: 600_000,\n\tengineIoPingInterval: 10_000,\n\tengineIoPingTimeout: 10_000,\n\tmanualReconnectInitialDelay: 250,\n\tmanualReconnectJitterRatio: 0.2,\n\tmanualReconnectMaxDelay: 5_000,\n\tpriorityAckFailureThreshold: 3,\n\tresyncTimeout: 5_000,\n} as const;\n\nexport const CONTROL_QUEUE_LIMITS = {\n\tdedupeWindowMessages: 512,\n\tdedupeWindowTtlMs: 60_000,\n\tmaxHttpBufferBytes: 65_536,\n\tqueueByteCap: 4 * 1024 * 1024,\n\tqueueMessageCap: 256,\n} as const;\n\nexport const ControlDomainSchema = z.string().regex(/^[a-z][a-z0-9_]*$/u);\n\nexport const KnownControlDomainSchema = z.enum(['gateway_control', 'worker_control']);\n\nexport const ControlMessageKindSchema = z.enum(['command', 'command_result', 'event', 'heartbeat']);\n\nexport const ControlDeliveryPolicySchema = z.enum([\n\t'latest_wins',\n\t'droppable',\n\t'acked_idempotent',\n\t'critical_idempotent',\n\t'append_only_observation',\n\t'single_use_critical',\n\t'forbidden_bulk',\n]);\n\nexport const ControlSessionCloseReasonSchema = z.enum([\n\t'normal_shutdown',\n\t'controller_restart',\n\t'peer_restart',\n\t'auth_failed',\n\t'protocol_version_mismatch',\n\t'domain_mismatch',\n\t'generation_mismatch',\n\t'controller_epoch_mismatch',\n\t'duplicate_session',\n\t'stale_session',\n\t'sequence_gap',\n\t'ack_timeout',\n\t'command_timeout',\n\t'resync_timeout',\n\t'queue_overflow',\n\t'message_too_large',\n\t'schema_validation_failed',\n\t'forbidden_bulk_message',\n\t'transport_error',\n]);\n\nexport const ControlEnvelopeSchema = z\n\t.object({\n\t\tbootId: z.string().min(1),\n\t\tcommandId: z.string().uuid().optional(),\n\t\tconnectionId: z.string().uuid(),\n\t\tcontrollerEpoch: z.string().min(1),\n\t\tcreatedAtMs: z.number().int().positive(),\n\t\tdeliveryPolicy: ControlDeliveryPolicySchema,\n\t\tdomain: ControlDomainSchema,\n\t\texpiresAtMs: z.number().int().positive().optional(),\n\t\tidempotencyKey: z.string().min(1).optional(),\n\t\tkind: ControlMessageKindSchema,\n\t\tmessageId: z.string().uuid(),\n\t\toperation: z.string().min(1).optional(),\n\t\tpeerId: z.string().min(1),\n\t\tprotocolVersion: z.literal(CONTROL_PROTOCOL_VERSION),\n\t\tsequence: z.number().int().nonnegative(),\n\t\tsessionId: z.string().uuid(),\n\t\tzoneId: z.string().min(1),\n\t})\n\t.strict();\n\nexport const ControlSessionStateSchema = z.enum([\n\t'unknown',\n\t'connecting',\n\t'ready',\n\t'reconnecting',\n\t'stale',\n\t'rejected',\n\t'generation_mismatch',\n\t'failed',\n\t'closed',\n]);\n\nexport const ControlRpcResultBaseSchema = z.enum([\n\t'ok',\n\t'failed',\n\t'timeout',\n\t'rejected',\n\t'cancelled',\n\t'stale_generation',\n]);\n\nexport const ControlRpcErrorSchema = z\n\t.object({\n\t\terrorClass: z.string().min(1),\n\t\tretryable: z.boolean().optional(),\n\t\tsafeMessage: z.string().min(1).optional(),\n\t})\n\t.strict();\n\nexport const ControlCorrelationSchema = z\n\t.object({\n\t\tcausationId: z.string().uuid().optional(),\n\t\tcorrelationId: z.string().min(1).optional(),\n\t\trequestId: z.string().min(1).optional(),\n\t\trunId: z.string().min(1).optional(),\n\t\tsessionKeyDigest: z.string().min(32).optional(),\n\t\ttoolCallId: z.string().min(1).optional(),\n\t\ttraceId: z\n\t\t\t.string()\n\t\t\t.regex(/^[0-9a-f]{32}$/u)\n\t\t\t.optional(),\n\t})\n\t.strict();\n\nexport const ControlCloseSchema = z\n\t.object({\n\t\treason: ControlSessionCloseReasonSchema,\n\t\tsafeMessage: z.string().min(1).optional(),\n\t\tsessionId: z.string().uuid(),\n\t})\n\t.strict();\n\nexport const ControlMessageAcceptedReceiptSchema = z\n\t.object({\n\t\treceived: z.literal(true),\n\t})\n\t.strict();\n\nexport const ControlMessageRejectedReceiptSchema = z\n\t.object({\n\t\terrorClass: z.string().min(1),\n\t\treceived: z.literal(false),\n\t\tsafeMessage: z.string().min(1).optional(),\n\t})\n\t.strict();\n\nexport const ControlMessageReceiptSchema = z.discriminatedUnion('received', [\n\tControlMessageAcceptedReceiptSchema,\n\tControlMessageRejectedReceiptSchema,\n]);\n\nexport const DomainCommandResultResponseLinkSchema = z\n\t.object({\n\t\tkind: z.literal('command_result'),\n\t\tpayload: z\n\t\t\t.object({\n\t\t\t\tresponseToMessageId: z.string().uuid(),\n\t\t\t})\n\t\t\t.passthrough(),\n\t})\n\t.passthrough();\n\nexport const ControlHandshakeCredentialSchema = z\n\t.object({\n\t\taudience: KnownControlDomainSchema,\n\t\tbootId: z.string().min(1),\n\t\tcontrollerEpoch: z.string().min(1),\n\t\tcredentialId: z.string().min(1),\n\t\texpiresAtMs: z.number().int().positive(),\n\t\tgenerationId: z.string().min(1),\n\t\tissuedAtMs: z.number().int().positive(),\n\t\tnonce: z.string().min(16),\n\t\tpeerId: z.string().min(1),\n\t\tprotocolVersion: z.literal(CONTROL_PROTOCOL_VERSION),\n\t\tzoneId: z.string().min(1),\n\t})\n\t.strict()\n\t.refine((value) => value.expiresAtMs > value.issuedAtMs, {\n\t\tmessage: 'expiresAtMs must be greater than issuedAtMs',\n\t\tpath: ['expiresAtMs'],\n\t});\n\nexport const ControlHandshakeProofSchema = ControlHandshakeCredentialSchema.extend({\n\tsignature: z.string().min(1),\n}).strict();\n\nexport const ControlReadyRequestCredentialSchema = z\n\t.object({\n\t\taudience: KnownControlDomainSchema,\n\t\tbootId: z.string().min(1),\n\t\tcontrollerEpoch: z.string().min(1),\n\t\tgenerationId: z.string().min(1),\n\t\tissuedAtMs: z.number().int().positive(),\n\t\tpeerId: z.string().min(1),\n\t\tprotocolVersion: z.literal(CONTROL_PROTOCOL_VERSION),\n\t\trequestId: z.string().uuid(),\n\t\tzoneId: z.string().min(1),\n\t})\n\t.strict();\n\nexport const ControlReadyRequestProofSchema = ControlReadyRequestCredentialSchema.extend({\n\tsignature: z.string().min(1),\n}).strict();\n\nexport const ControlHandshakeHeadersSchema = z\n\t.object({\n\t\tproof: ControlHandshakeProofSchema,\n\t})\n\t.strict();\n\nexport const CONTROL_HANDSHAKE_PROTOCOL_HEADER_VALUE = 'agent-vm.control.v1';\n\nexport const CONTROL_HANDSHAKE_HEADER_NAMES = {\n\tbootId: 'x-agent-vm-control-boot-id',\n\tcontrollerEpoch: 'x-agent-vm-control-controller-epoch',\n\tcredentialId: 'x-agent-vm-control-credential-id',\n\tdomain: 'x-agent-vm-control-domain',\n\texpiresAtMs: 'x-agent-vm-control-expires-at-ms',\n\tgenerationId: 'x-agent-vm-control-generation-id',\n\tissuedAtMs: 'x-agent-vm-control-issued-at-ms',\n\tnonce: 'x-agent-vm-control-nonce',\n\tpeerId: 'x-agent-vm-control-peer-id',\n\tprotocol: 'x-agent-vm-control-protocol',\n\tsignature: 'x-agent-vm-control-signature',\n\tzoneId: 'x-agent-vm-control-zone-id',\n} as const;\n\nexport const CONTROL_READY_HEADER_NAMES = {\n\tbootId: CONTROL_HANDSHAKE_HEADER_NAMES.bootId,\n\tcontrollerEpoch: CONTROL_HANDSHAKE_HEADER_NAMES.controllerEpoch,\n\tdomain: CONTROL_HANDSHAKE_HEADER_NAMES.domain,\n\tgenerationId: CONTROL_HANDSHAKE_HEADER_NAMES.generationId,\n\tissuedAtMs: CONTROL_HANDSHAKE_HEADER_NAMES.issuedAtMs,\n\tpeerId: CONTROL_HANDSHAKE_HEADER_NAMES.peerId,\n\tprotocol: CONTROL_HANDSHAKE_HEADER_NAMES.protocol,\n\trequestId: 'x-agent-vm-control-ready-request-id',\n\tsignature: CONTROL_HANDSHAKE_HEADER_NAMES.signature,\n\tzoneId: CONTROL_HANDSHAKE_HEADER_NAMES.zoneId,\n} as const;\n\nexport const controlMessageKindDisposition = {\n\tcommand: 'rpc_lifecycle',\n\tcommand_result: 'rpc_lifecycle',\n\tevent: 'domain_event',\n\theartbeat: 'priority_liveness',\n} as const satisfies Record<ControlMessageKind, string>;\n\nexport type ControlDomain = z.infer<typeof ControlDomainSchema>;\nexport type KnownControlDomain = z.infer<typeof KnownControlDomainSchema>;\nexport type ControlMessageKind = z.infer<typeof ControlMessageKindSchema>;\nexport type ControlDeliveryPolicy = z.infer<typeof ControlDeliveryPolicySchema>;\nexport type ControlEnvelope = z.infer<typeof ControlEnvelopeSchema>;\nexport type ControlMessageReceipt = z.infer<typeof ControlMessageReceiptSchema>;\nexport type ControlClose = z.infer<typeof ControlCloseSchema>;\nexport type ControlSessionCloseReason = z.infer<typeof ControlSessionCloseReasonSchema>;\nexport type ControlHandshakeCredential = z.infer<typeof ControlHandshakeCredentialSchema>;\nexport type ControlHandshakeProof = z.infer<typeof ControlHandshakeProofSchema>;\nexport type ControlReadyRequestCredential = z.infer<typeof ControlReadyRequestCredentialSchema>;\nexport type ControlReadyRequestProof = z.infer<typeof ControlReadyRequestProofSchema>;\n\nexport type ControlHelloAcknowledge<TControlHelloResponse> = (\n\tresponse: TControlHelloResponse,\n) => void;\nexport type ControlMessageAcknowledge = (receipt: ControlMessageReceipt) => void;\nexport type ControlCloseAcknowledge = (receipt: ControlMessageReceipt) => void;\n\nexport interface ControlSessionControllerToPeerEvents<\n\tTDomainMessage,\n\tTControlHello,\n\tTControlHelloResponse,\n> {\n\t'control:close': (payload: ControlClose, acknowledge: ControlCloseAcknowledge) => void;\n\t'control:hello': (\n\t\tpayload: TControlHello,\n\t\tacknowledge: ControlHelloAcknowledge<TControlHelloResponse>,\n\t) => void;\n\t'control:message': (\n\t\tenvelope: ControlEnvelope,\n\t\tpayload: TDomainMessage,\n\t\tacknowledge: ControlMessageAcknowledge,\n\t) => void;\n}\n\nexport interface ControlSessionPeerToControllerEvents<TDomainMessage> {\n\t'control:close': (payload: ControlClose, acknowledge: ControlCloseAcknowledge) => void;\n\t'control:message': (\n\t\tenvelope: ControlEnvelope,\n\t\tpayload: TDomainMessage,\n\t\tacknowledge: ControlMessageAcknowledge,\n\t) => void;\n}\n\nexport interface DomainControlMessageIdentity {\n\treadonly kind: ControlMessageKind;\n\treadonly operation?: string;\n}\n\nexport interface DeliveryPolicyDerivationProps {\n\treadonly envelope: ControlEnvelope;\n\treadonly policyByOperation: Readonly<Record<string, ControlDeliveryPolicy>>;\n\treadonly policyByKind?: Partial<Record<ControlMessageKind, ControlDeliveryPolicy>>;\n}\n\nexport function assertControlEnvelopeMatchesDomainMessage(\n\tenvelope: ControlEnvelope,\n\tdomainMessage: DomainControlMessageIdentity,\n): void {\n\tif (envelope.kind !== domainMessage.kind) {\n\t\tthrow new Error(`control message kind mismatch: ${envelope.kind} !== ${domainMessage.kind}`);\n\t}\n\tif (envelope.operation !== domainMessage.operation) {\n\t\tthrow new Error(\n\t\t\t`control message operation mismatch: ${envelope.operation ?? '<none>'} !== ${domainMessage.operation ?? '<none>'}`,\n\t\t);\n\t}\n}\n\nexport function buildControlMessageReceipt(): ControlMessageReceipt {\n\treturn ControlMessageReceiptSchema.parse({ received: true });\n}\n\nexport function buildControlMessageRejectionReceipt(props: {\n\treadonly errorClass: string;\n\treadonly safeMessage?: string;\n}): ControlMessageReceipt {\n\treturn ControlMessageReceiptSchema.parse({\n\t\terrorClass: props.errorClass,\n\t\treceived: false,\n\t\t...(props.safeMessage === undefined ? {} : { safeMessage: props.safeMessage }),\n\t});\n}\n\nexport function buildControlMessageExceptionRejectionReceipt(props: {\n\treadonly error: unknown;\n\treadonly processingErrorClass: string;\n\treadonly safeMessage: string;\n\treadonly schemaErrorClass?: string;\n}): ControlMessageReceipt {\n\treturn buildControlMessageRejectionReceipt({\n\t\terrorClass:\n\t\t\tprops.error instanceof ZodError\n\t\t\t\t? (props.schemaErrorClass ?? 'schema_validation_failed')\n\t\t\t\t: props.processingErrorClass,\n\t\tsafeMessage: props.safeMessage,\n\t});\n}\n\nexport function assertControlMessageReceiptAccepted(receiptPayload: unknown): void {\n\tconst receipt = ControlMessageReceiptSchema.parse(receiptPayload);\n\tif (!receipt.received) {\n\t\tthrow new Error(receipt.safeMessage ?? receipt.errorClass);\n\t}\n}\n\nexport function extractDomainCommandResultResponseToMessageId(\n\tpayload: unknown,\n): string | undefined {\n\tconst parsed = DomainCommandResultResponseLinkSchema.safeParse(payload);\n\treturn parsed.success ? parsed.data.payload.responseToMessageId : undefined;\n}\n\nexport function buildControlHandshakeSignaturePayload(proof: ControlHandshakeCredential): string {\n\treturn JSON.stringify({\n\t\taudience: proof.audience,\n\t\tbootId: proof.bootId,\n\t\tcontrollerEpoch: proof.controllerEpoch,\n\t\tcredentialId: proof.credentialId,\n\t\texpiresAtMs: proof.expiresAtMs,\n\t\tgenerationId: proof.generationId,\n\t\tissuedAtMs: proof.issuedAtMs,\n\t\tnonce: proof.nonce,\n\t\tpeerId: proof.peerId,\n\t\tprotocolVersion: proof.protocolVersion,\n\t\tzoneId: proof.zoneId,\n\t});\n}\n\nexport function buildControlReadyRequestSignaturePayload(\n\tproof: ControlReadyRequestCredential,\n): string {\n\treturn JSON.stringify({\n\t\taudience: proof.audience,\n\t\tbootId: proof.bootId,\n\t\tcontrollerEpoch: proof.controllerEpoch,\n\t\tgenerationId: proof.generationId,\n\t\tissuedAtMs: proof.issuedAtMs,\n\t\tpeerId: proof.peerId,\n\t\tprotocolVersion: proof.protocolVersion,\n\t\trequestId: proof.requestId,\n\t\tzoneId: proof.zoneId,\n\t});\n}\n\nexport function deriveControlDeliveryPolicy(\n\tprops: DeliveryPolicyDerivationProps,\n): ControlDeliveryPolicy {\n\tif (props.envelope.operation !== undefined) {\n\t\tconst operationPolicy = props.policyByOperation[props.envelope.operation];\n\t\tif (operationPolicy !== undefined) {\n\t\t\treturn operationPolicy;\n\t\t}\n\t}\n\tconst kindPolicy = props.policyByKind?.[props.envelope.kind];\n\tif (kindPolicy !== undefined) {\n\t\treturn kindPolicy;\n\t}\n\tthrow new Error(\n\t\t`no derived delivery policy for ${props.envelope.kind}:${props.envelope.operation ?? '<none>'}`,\n\t);\n}\n\nexport function assertDerivedControlDeliveryPolicy(props: DeliveryPolicyDerivationProps): void {\n\tconst derivedPolicy = deriveControlDeliveryPolicy(props);\n\tif (props.envelope.deliveryPolicy !== derivedPolicy) {\n\t\tthrow new Error(\n\t\t\t`control delivery policy mismatch: ${props.envelope.deliveryPolicy} !== ${derivedPolicy}`,\n\t\t);\n\t}\n}\n\nexport function coalesceLatestWinsByKey<TMessage>(\n\tmessages: readonly TMessage[],\n\tkeyForMessage: (message: TMessage) => string,\n): readonly TMessage[] {\n\tconst latestByKey = new Map<string, TMessage>();\n\tfor (const message of messages) {\n\t\tlatestByKey.set(keyForMessage(message), message);\n\t}\n\treturn [...latestByKey.values()];\n}\n\nexport function shouldReplayControlEnvelope(envelope: ControlEnvelope): boolean {\n\treturn (\n\t\tenvelope.deliveryPolicy !== 'droppable' &&\n\t\tenvelope.deliveryPolicy !== 'latest_wins' &&\n\t\tenvelope.deliveryPolicy !== 'forbidden_bulk'\n\t);\n}\n\nexport interface ControlSequenceContinuityProps {\n\treadonly advisorySequenceMode?: 'contiguous' | 'lossy';\n\treadonly envelope: ControlEnvelope;\n\treadonly lastSeenSequence: number;\n}\n\nexport interface ControlEnvelopeSequencedMessage {\n\treadonly envelope: Pick<ControlEnvelope, 'sequence'>;\n}\n\nexport function orderControlMessagesByEnvelopeSequence<\n\tTControlMessage extends ControlEnvelopeSequencedMessage,\n>(messages: readonly TControlMessage[]): readonly TControlMessage[] {\n\treturn messages.toSorted((left, right) => left.envelope.sequence - right.envelope.sequence);\n}\n\nfunction controlSequenceDiagnosticSuffix(envelope: ControlEnvelope): string {\n\treturn ` kind=${envelope.kind} operation=${envelope.operation ?? '<none>'} delivery=${envelope.deliveryPolicy} sessionId=${envelope.sessionId}`;\n}\n\nexport type ControlSequenceContinuityDecision =\n\t| {\n\t\t\treadonly action: 'accept';\n\t\t\treadonly nextLastSeenSequence: number;\n\t }\n\t| {\n\t\t\treadonly action: 'drop';\n\t\t\treadonly nextLastSeenSequence: number;\n\t\t\treadonly safeMessage: string;\n\t }\n\t| {\n\t\t\treadonly action: 'stale';\n\t\t\treadonly closeReason: Extract<ControlSessionCloseReason, 'sequence_gap'>;\n\t\t\treadonly nextLastSeenSequence: number;\n\t\t\treadonly safeMessage: string;\n\t };\n\nexport function evaluateControlSequenceContinuity(\n\tprops: ControlSequenceContinuityProps,\n): ControlSequenceContinuityDecision {\n\tconst advisorySequenceMode = props.advisorySequenceMode ?? 'lossy';\n\tif (props.envelope.sequence <= props.lastSeenSequence) {\n\t\treturn {\n\t\t\taction: 'drop',\n\t\t\tnextLastSeenSequence: props.lastSeenSequence,\n\t\t\tsafeMessage: `control sequence did not advance: last=${String(props.lastSeenSequence)} received=${String(props.envelope.sequence)}${controlSequenceDiagnosticSuffix(props.envelope)}`,\n\t\t};\n\t}\n\tif (\n\t\tadvisorySequenceMode === 'lossy' &&\n\t\t(props.envelope.deliveryPolicy === 'droppable' ||\n\t\t\tprops.envelope.deliveryPolicy === 'latest_wins')\n\t) {\n\t\treturn {\n\t\t\taction: 'accept',\n\t\t\tnextLastSeenSequence: props.lastSeenSequence,\n\t\t};\n\t}\n\tconst expectedSequence = props.lastSeenSequence + 1;\n\tif (props.envelope.sequence === expectedSequence) {\n\t\treturn {\n\t\t\taction: 'accept',\n\t\t\tnextLastSeenSequence: props.envelope.sequence,\n\t\t};\n\t}\n\treturn {\n\t\taction: 'stale',\n\t\tcloseReason: 'sequence_gap',\n\t\tnextLastSeenSequence: props.lastSeenSequence,\n\t\tsafeMessage: `control sequence gap: expected=${String(expectedSequence)} received=${String(props.envelope.sequence)}${controlSequenceDiagnosticSuffix(props.envelope)}`,\n\t};\n}\n\nexport function buildControlProtocolJsonSchemas(): Readonly<Record<string, unknown>> {\n\treturn {\n\t\tclose: z.toJSONSchema(ControlCloseSchema, { io: 'input' }),\n\t\tenvelope: z.toJSONSchema(ControlEnvelopeSchema, { io: 'input' }),\n\t\thandshakeCredential: z.toJSONSchema(ControlHandshakeCredentialSchema, { io: 'input' }),\n\t\thandshakeProof: z.toJSONSchema(ControlHandshakeProofSchema, { io: 'input' }),\n\t\treadyRequestCredential: z.toJSONSchema(ControlReadyRequestCredentialSchema, {\n\t\t\tio: 'input',\n\t\t}),\n\t\treadyRequestProof: z.toJSONSchema(ControlReadyRequestProofSchema, { io: 'input' }),\n\t};\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-vm/control-protocol-contracts",
3
- "version": "0.0.113",
3
+ "version": "0.0.115",
4
4
  "description": "Shared Zod contracts for agent-vm Socket.IO control sessions.",
5
5
  "homepage": "https://github.com/ShravanSunder/agent-vm#readme",
6
6
  "bugs": {