@agent-vm/control-protocol-contracts 0.0.113 → 0.0.114
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 +5 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -26
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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:
|
|
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:
|
|
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,
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;cAEa,wBAAA;AAAA,cAEA,yBAAA;EAAA;;;;;;;;;;;;;;cAgBA,oBAAA;EAAA;;;;;;cAQA,mBAAA,EAAmB,CAAA,CAAA,SAAA;AAAA,cAEnB,wBAAA,EAAwB,CAAA,CAAA,OAAA;;;;cAExB,wBAAA,EAAwB,CAAA,CAAA,OAAA;;;;;;cAExB,2BAAA,EAA2B,CAAA,CAAA,OAAA;;;;;;;;;cAU3B,+BAAA,EAA+B,CAAA,CAAA,OAAA;;;;;;;;;;;;;;;;;;;;;cAsB/B,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsBrB,yBAAA,EAAyB,CAAA,CAAA,OAAA;;;;;;;;;;;cAYzB,0BAAA,EAA0B,CAAA,CAAA,OAAA;;;;;;;;cAS1B,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;cAQrB,wBAAA,EAAwB,CAAA,CAAA,SAAA;;;;;;;;;cAexB,kBAAA,EAAkB,CAAA,CAAA,SAAA
|
|
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,
|
|
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":";;AAEA,MAAa,2BAA2B;AAExC,MAAa,4BAA4B;CACxC,2BAA2B;CAC3B,mBAAmB;CACnB,oBAAoB;CACpB,mBAAmB;CACnB,gBAAgB;CAChB,0BAA0B;CAC1B,sBAAsB;CACtB,qBAAqB;CACrB,6BAA6B;CAC7B,4BAA4B;CAC5B,yBAAyB;CACzB,6BAA6B;CAC7B,eAAe;CACf;AAED,MAAa,uBAAuB;CACnC,sBAAsB;CACtB,mBAAmB;CACnB,oBAAoB;CACpB,cAAc,IAAI,OAAO;CACzB,iBAAiB;CACjB;AAED,MAAa,sBAAsB,EAAE,QAAQ,CAAC,MAAM,qBAAqB;AAEzE,MAAa,2BAA2B,EAAE,KAAK,CAAC,mBAAmB,iBAAiB,CAAC;AAErF,MAAa,2BAA2B,EAAE,KAAK;CAAC;CAAW;CAAkB;CAAS;CAAY,CAAC;AAEnG,MAAa,8BAA8B,EAAE,KAAK;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AAEF,MAAa,kCAAkC,EAAE,KAAK;CACrD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AAEF,MAAa,wBAAwB,EACnC,OAAO;CACP,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU;CACvC,cAAc,EAAE,QAAQ,CAAC,MAAM;CAC/B,iBAAiB,EAAE,QAAQ,CAAC,IAAI,EAAE;CAClC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU;CACxC,gBAAgB;CAChB,QAAQ;CACR,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU;CACnD,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CAC5C,MAAM;CACN,WAAW,EAAE,QAAQ,CAAC,MAAM;CAC5B,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACvC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzB,iBAAiB,EAAE,QAAA,EAAiC;CACpD,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;CACxC,WAAW,EAAE,QAAQ,CAAC,MAAM;CAC5B,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzB,CAAC,CACD,QAAQ;AAEV,MAAa,4BAA4B,EAAE,KAAK;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AAEF,MAAa,6BAA6B,EAAE,KAAK;CAChD;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;AAEF,MAAa,wBAAwB,EACnC,OAAO;CACP,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC7B,WAAW,EAAE,SAAS,CAAC,UAAU;CACjC,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACzC,CAAC,CACD,QAAQ;AAEV,MAAa,2BAA2B,EACtC,OAAO;CACP,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU;CACzC,eAAe,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CAC3C,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACvC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACnC,kBAAkB,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,UAAU;CAC/C,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACxC,SAAS,EACP,QAAQ,CACR,MAAM,kBAAkB,CACxB,UAAU;CACZ,CAAC,CACD,QAAQ;AAEV,MAAa,qBAAqB,EAChC,OAAO;CACP,QAAQ;CACR,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACzC,WAAW,EAAE,QAAQ,CAAC,MAAM;CAC5B,CAAC,CACD,QAAQ;AAEV,MAAa,sCAAsC,EACjD,OAAO,EACP,UAAU,EAAE,QAAQ,KAAK,EACzB,CAAC,CACD,QAAQ;AAEV,MAAa,sCAAsC,EACjD,OAAO;CACP,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC7B,UAAU,EAAE,QAAQ,MAAM;CAC1B,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACzC,CAAC,CACD,QAAQ;AAEV,MAAa,8BAA8B,EAAE,mBAAmB,YAAY,CAC3E,qCACA,oCACA,CAAC;AAEF,MAAa,wCAAwC,EACnD,OAAO;CACP,MAAM,EAAE,QAAQ,iBAAiB;CACjC,SAAS,EACP,OAAO,EACP,qBAAqB,EAAE,QAAQ,CAAC,MAAM,EACtC,CAAC,CACD,aAAa;CACf,CAAC,CACD,aAAa;AAEf,MAAa,mCAAmC,EAC9C,OAAO;CACP,UAAU;CACV,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzB,iBAAiB,EAAE,QAAQ,CAAC,IAAI,EAAE;CAClC,cAAc,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC/B,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU;CACxC,cAAc,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC/B,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU;CACvC,OAAO,EAAE,QAAQ,CAAC,IAAI,GAAG;CACzB,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzB,iBAAiB,EAAE,QAAA,EAAiC;CACpD,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzB,CAAC,CACD,QAAQ,CACR,QAAQ,UAAU,MAAM,cAAc,MAAM,YAAY;CACxD,SAAS;CACT,MAAM,CAAC,cAAc;CACrB,CAAC;AAEH,MAAa,8BAA8B,iCAAiC,OAAO,EAClF,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,EAC5B,CAAC,CAAC,QAAQ;AAEX,MAAa,sCAAsC,EACjD,OAAO;CACP,UAAU;CACV,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzB,iBAAiB,EAAE,QAAQ,CAAC,IAAI,EAAE;CAClC,cAAc,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC/B,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU;CACvC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzB,iBAAiB,EAAE,QAAA,EAAiC;CACpD,WAAW,EAAE,QAAQ,CAAC,MAAM;CAC5B,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;CACzB,CAAC,CACD,QAAQ;AAEV,MAAa,iCAAiC,oCAAoC,OAAO,EACxF,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,EAC5B,CAAC,CAAC,QAAQ;AAEX,MAAa,gCAAgC,EAC3C,OAAO,EACP,OAAO,6BACP,CAAC,CACD,QAAQ;AAEV,MAAa,0CAA0C;AAEvD,MAAa,iCAAiC;CAC7C,QAAQ;CACR,iBAAiB;CACjB,cAAc;CACd,QAAQ;CACR,aAAa;CACb,cAAc;CACd,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,UAAU;CACV,WAAW;CACX,QAAQ;CACR;AAED,MAAa,6BAA6B;CACzC,QAAQ,+BAA+B;CACvC,iBAAiB,+BAA+B;CAChD,QAAQ,+BAA+B;CACvC,cAAc,+BAA+B;CAC7C,YAAY,+BAA+B;CAC3C,QAAQ,+BAA+B;CACvC,UAAU,+BAA+B;CACzC,WAAW;CACX,WAAW,+BAA+B;CAC1C,QAAQ,+BAA+B;CACvC;AAED,MAAa,gCAAgC;CAC5C,SAAS;CACT,gBAAgB;CAChB,OAAO;CACP,WAAW;CACX;AA0DD,SAAgB,0CACf,UACA,eACO;CACP,IAAI,SAAS,SAAS,cAAc,MACnC,MAAM,IAAI,MAAM,kCAAkC,SAAS,KAAK,OAAO,cAAc,OAAO;CAE7F,IAAI,SAAS,cAAc,cAAc,WACxC,MAAM,IAAI,MACT,uCAAuC,SAAS,aAAa,SAAS,OAAO,cAAc,aAAa,WACxG;;AAIH,SAAgB,6BAAoD;CACnE,OAAO,4BAA4B,MAAM,EAAE,UAAU,MAAM,CAAC;;AAG7D,SAAgB,oCAAoC,OAG1B;CACzB,OAAO,4BAA4B,MAAM;EACxC,YAAY,MAAM;EAClB,UAAU;EACV,GAAI,MAAM,gBAAgB,KAAA,IAAY,EAAE,GAAG,EAAE,aAAa,MAAM,aAAa;EAC7E,CAAC;;AAGH,SAAgB,6CAA6C,OAKnC;CACzB,OAAO,oCAAoC;EAC1C,YACC,MAAM,iBAAiB,WACnB,MAAM,oBAAoB,6BAC3B,MAAM;EACV,aAAa,MAAM;EACnB,CAAC;;AAGH,SAAgB,oCAAoC,gBAA+B;CAClF,MAAM,UAAU,4BAA4B,MAAM,eAAe;CACjE,IAAI,CAAC,QAAQ,UACZ,MAAM,IAAI,MAAM,QAAQ,eAAe,QAAQ,WAAW;;AAI5D,SAAgB,8CACf,SACqB;CACrB,MAAM,SAAS,sCAAsC,UAAU,QAAQ;CACvE,OAAO,OAAO,UAAU,OAAO,KAAK,QAAQ,sBAAsB,KAAA;;AAGnE,SAAgB,sCAAsC,OAA2C;CAChG,OAAO,KAAK,UAAU;EACrB,UAAU,MAAM;EAChB,QAAQ,MAAM;EACd,iBAAiB,MAAM;EACvB,cAAc,MAAM;EACpB,aAAa,MAAM;EACnB,cAAc,MAAM;EACpB,YAAY,MAAM;EAClB,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,iBAAiB,MAAM;EACvB,QAAQ,MAAM;EACd,CAAC;;AAGH,SAAgB,yCACf,OACS;CACT,OAAO,KAAK,UAAU;EACrB,UAAU,MAAM;EAChB,QAAQ,MAAM;EACd,iBAAiB,MAAM;EACvB,cAAc,MAAM;EACpB,YAAY,MAAM;EAClB,QAAQ,MAAM;EACd,iBAAiB,MAAM;EACvB,WAAW,MAAM;EACjB,QAAQ,MAAM;EACd,CAAC;;AAGH,SAAgB,4BACf,OACwB;CACxB,IAAI,MAAM,SAAS,cAAc,KAAA,GAAW;EAC3C,MAAM,kBAAkB,MAAM,kBAAkB,MAAM,SAAS;EAC/D,IAAI,oBAAoB,KAAA,GACvB,OAAO;;CAGT,MAAM,aAAa,MAAM,eAAe,MAAM,SAAS;CACvD,IAAI,eAAe,KAAA,GAClB,OAAO;CAER,MAAM,IAAI,MACT,kCAAkC,MAAM,SAAS,KAAK,GAAG,MAAM,SAAS,aAAa,WACrF;;AAGF,SAAgB,mCAAmC,OAA4C;CAC9F,MAAM,gBAAgB,4BAA4B,MAAM;CACxD,IAAI,MAAM,SAAS,mBAAmB,eACrC,MAAM,IAAI,MACT,qCAAqC,MAAM,SAAS,eAAe,OAAO,gBAC1E;;AAIH,SAAgB,wBACf,UACA,eACsB;CACtB,MAAM,8BAAc,IAAI,KAAuB;CAC/C,KAAK,MAAM,WAAW,UACrB,YAAY,IAAI,cAAc,QAAQ,EAAE,QAAQ;CAEjD,OAAO,CAAC,GAAG,YAAY,QAAQ,CAAC;;AAGjC,SAAgB,4BAA4B,UAAoC;CAC/E,OACC,SAAS,mBAAmB,eAC5B,SAAS,mBAAmB,iBAC5B,SAAS,mBAAmB;;AAc9B,SAAgB,uCAEd,UAAkE;CACnE,OAAO,SAAS,UAAU,MAAM,UAAU,KAAK,SAAS,WAAW,MAAM,SAAS,SAAS;;AAG5F,SAAS,gCAAgC,UAAmC;CAC3E,OAAO,SAAS,SAAS,KAAK,aAAa,SAAS,aAAa,SAAS,YAAY,SAAS,eAAe,aAAa,SAAS;;AAoBrI,SAAgB,kCACf,OACoC;CACpC,MAAM,uBAAuB,MAAM,wBAAwB;CAC3D,IAAI,MAAM,SAAS,YAAY,MAAM,kBACpC,OAAO;EACN,QAAQ;EACR,sBAAsB,MAAM;EAC5B,aAAa,0CAA0C,OAAO,MAAM,iBAAiB,CAAC,YAAY,OAAO,MAAM,SAAS,SAAS,GAAG,gCAAgC,MAAM,SAAS;EACnL;CAEF,IACC,yBAAyB,YACxB,MAAM,SAAS,mBAAmB,eAClC,MAAM,SAAS,mBAAmB,gBAEnC,OAAO;EACN,QAAQ;EACR,sBAAsB,MAAM;EAC5B;CAEF,MAAM,mBAAmB,MAAM,mBAAmB;CAClD,IAAI,MAAM,SAAS,aAAa,kBAC/B,OAAO;EACN,QAAQ;EACR,sBAAsB,MAAM,SAAS;EACrC;CAEF,OAAO;EACN,QAAQ;EACR,aAAa;EACb,sBAAsB,MAAM;EAC5B,aAAa,kCAAkC,OAAO,iBAAiB,CAAC,YAAY,OAAO,MAAM,SAAS,SAAS,GAAG,gCAAgC,MAAM,SAAS;EACrK;;AAGF,SAAgB,kCAAqE;CACpF,OAAO;EACN,OAAO,EAAE,aAAa,oBAAoB,EAAE,IAAI,SAAS,CAAC;EAC1D,UAAU,EAAE,aAAa,uBAAuB,EAAE,IAAI,SAAS,CAAC;EAChE,qBAAqB,EAAE,aAAa,kCAAkC,EAAE,IAAI,SAAS,CAAC;EACtF,gBAAgB,EAAE,aAAa,6BAA6B,EAAE,IAAI,SAAS,CAAC;EAC5E,wBAAwB,EAAE,aAAa,qCAAqC,EAC3E,IAAI,SACJ,CAAC;EACF,mBAAmB,EAAE,aAAa,gCAAgC,EAAE,IAAI,SAAS,CAAC;EAClF"}
|
package/package.json
CHANGED