@byok-sdk/protocol 0.2.0 → 0.3.0

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/README.md CHANGED
@@ -3,6 +3,13 @@
3
3
  The frozen v1 BYOK device wire contract: envelope schemas, message payloads,
4
4
  codecs, version negotiation, and golden fixtures.
5
5
 
6
+ `TaskOfferPayload.dispatchSelection` is the optional strict dual-lane target
7
+ contract: subscription selects Claude/Codex + model, while BYOK selects Pi +
8
+ provider + model. When present it is authoritative and runtime disagreement
9
+ fails closed. Servers send it only to a daemon advertising the
10
+ `dispatch-selection` capability, preventing an older v1 peer from stripping
11
+ the additive field and silently executing a runtime-only offer.
12
+
6
13
  ```ts
7
14
  import { encodeEnvelope, decodeEnvelope } from '@byok-sdk/protocol';
8
15
  ```
package/dist/codec.d.ts CHANGED
@@ -30,6 +30,10 @@ interface EnvelopeShapeOptions {
30
30
  taskId: string;
31
31
  seq: number;
32
32
  };
33
+ 'task.offer_with_toolsets': {
34
+ taskId: string;
35
+ seq: number;
36
+ };
33
37
  'task.approve': {
34
38
  taskId: string;
35
39
  seq: number;
@@ -41,6 +41,7 @@ export declare const EnvelopeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
41
41
  steer: z.ZodOptional<z.ZodBoolean>;
42
42
  resume: z.ZodOptional<z.ZodBoolean>;
43
43
  approvalInteractive: z.ZodOptional<z.ZodBoolean>;
44
+ mcpToolsets: z.ZodOptional<z.ZodBoolean>;
44
45
  permissionModes: z.ZodOptional<z.ZodArray<z.ZodString>>;
45
46
  }, z.core.$strip>>;
46
47
  }, z.core.$strip>>>;
@@ -94,6 +95,20 @@ export declare const EnvelopeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
94
95
  codex: "codex";
95
96
  pi: "pi";
96
97
  }>>;
98
+ dispatchSelection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
99
+ lane: z.ZodLiteral<"subscription">;
100
+ runtimeId: z.ZodEnum<{
101
+ claude: "claude";
102
+ codex: "codex";
103
+ }>;
104
+ providerId: z.ZodNull;
105
+ modelId: z.ZodString;
106
+ }, z.core.$strict>, z.ZodObject<{
107
+ lane: z.ZodLiteral<"byok">;
108
+ runtimeId: z.ZodLiteral<"pi">;
109
+ providerId: z.ZodString;
110
+ modelId: z.ZodString;
111
+ }, z.core.$strict>], "lane">>;
97
112
  sessionRef: z.ZodOptional<z.ZodString>;
98
113
  workspaceHint: z.ZodOptional<z.ZodString>;
99
114
  limits: z.ZodOptional<z.ZodObject<{
@@ -101,6 +116,63 @@ export declare const EnvelopeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
101
116
  maxTokens: z.ZodOptional<z.ZodNumber>;
102
117
  }, z.core.$strip>>;
103
118
  }, z.core.$strip>;
119
+ }, z.core.$strip>, z.ZodObject<{
120
+ v: z.ZodNumber;
121
+ id: z.ZodUUID;
122
+ ts: z.ZodISODateTime;
123
+ type: z.ZodLiteral<"task.offer_with_toolsets">;
124
+ task_id: z.ZodString;
125
+ session_ref: z.ZodOptional<z.ZodString>;
126
+ seq: z.ZodNumber;
127
+ payload: z.ZodObject<{
128
+ instruction: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
129
+ blobRef: z.ZodObject<{
130
+ blobId: z.ZodString;
131
+ contentHash: z.ZodString;
132
+ size: z.ZodNumber;
133
+ contentType: z.ZodString;
134
+ url: z.ZodOptional<z.ZodString>;
135
+ }, z.core.$strip>;
136
+ }, z.core.$strict>]>;
137
+ policy: z.ZodObject<{
138
+ mode: z.ZodEnum<{
139
+ auto: "auto";
140
+ confirm: "confirm";
141
+ plan: "plan";
142
+ readonly: "readonly";
143
+ }>;
144
+ allowTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
145
+ denyTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
146
+ workspaceRoot: z.ZodOptional<z.ZodString>;
147
+ network: z.ZodOptional<z.ZodBoolean>;
148
+ }, z.core.$strict>;
149
+ runtime: z.ZodOptional<z.ZodEnum<{
150
+ claude: "claude";
151
+ codex: "codex";
152
+ pi: "pi";
153
+ }>>;
154
+ dispatchSelection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
155
+ lane: z.ZodLiteral<"subscription">;
156
+ runtimeId: z.ZodEnum<{
157
+ claude: "claude";
158
+ codex: "codex";
159
+ }>;
160
+ providerId: z.ZodNull;
161
+ modelId: z.ZodString;
162
+ }, z.core.$strict>, z.ZodObject<{
163
+ lane: z.ZodLiteral<"byok">;
164
+ runtimeId: z.ZodLiteral<"pi">;
165
+ providerId: z.ZodString;
166
+ modelId: z.ZodString;
167
+ }, z.core.$strict>], "lane">>;
168
+ sessionRef: z.ZodOptional<z.ZodString>;
169
+ workspaceHint: z.ZodOptional<z.ZodString>;
170
+ limits: z.ZodOptional<z.ZodObject<{
171
+ maxDurationMs: z.ZodOptional<z.ZodNumber>;
172
+ maxTokens: z.ZodOptional<z.ZodNumber>;
173
+ }, z.core.$strip>>;
174
+ requiredToolsets: z.ZodArray<z.ZodString>;
175
+ }, z.core.$strict>;
104
176
  }, z.core.$strip>, z.ZodObject<{
105
177
  v: z.ZodNumber;
106
178
  id: z.ZodUUID;
@@ -166,6 +238,7 @@ export declare const EnvelopeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
166
238
  steer: z.ZodOptional<z.ZodBoolean>;
167
239
  resume: z.ZodOptional<z.ZodBoolean>;
168
240
  approvalInteractive: z.ZodOptional<z.ZodBoolean>;
241
+ mcpToolsets: z.ZodOptional<z.ZodBoolean>;
169
242
  permissionModes: z.ZodOptional<z.ZodArray<z.ZodString>>;
170
243
  }, z.core.$strip>>;
171
244
  }, z.core.$strip>;
@@ -284,6 +357,7 @@ export declare const EnvelopeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
284
357
  contentType: z.ZodString;
285
358
  url: z.ZodOptional<z.ZodString>;
286
359
  }, z.core.$strip>>>;
360
+ document: z.ZodOptional<z.ZodUnknown>;
287
361
  }, z.core.$strip>;
288
362
  }, z.core.$strip>, z.ZodObject<{
289
363
  v: z.ZodNumber;
@@ -95,6 +95,7 @@ export declare const EventsPollResponseSchema: z.ZodObject<{
95
95
  steer: z.ZodOptional<z.ZodBoolean>;
96
96
  resume: z.ZodOptional<z.ZodBoolean>;
97
97
  approvalInteractive: z.ZodOptional<z.ZodBoolean>;
98
+ mcpToolsets: z.ZodOptional<z.ZodBoolean>;
98
99
  permissionModes: z.ZodOptional<z.ZodArray<z.ZodString>>;
99
100
  }, z.core.$strip>>;
100
101
  }, z.core.$strip>>>;
@@ -148,6 +149,20 @@ export declare const EventsPollResponseSchema: z.ZodObject<{
148
149
  codex: "codex";
149
150
  pi: "pi";
150
151
  }>>;
152
+ dispatchSelection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
153
+ lane: z.ZodLiteral<"subscription">;
154
+ runtimeId: z.ZodEnum<{
155
+ claude: "claude";
156
+ codex: "codex";
157
+ }>;
158
+ providerId: z.ZodNull;
159
+ modelId: z.ZodString;
160
+ }, z.core.$strict>, z.ZodObject<{
161
+ lane: z.ZodLiteral<"byok">;
162
+ runtimeId: z.ZodLiteral<"pi">;
163
+ providerId: z.ZodString;
164
+ modelId: z.ZodString;
165
+ }, z.core.$strict>], "lane">>;
151
166
  sessionRef: z.ZodOptional<z.ZodString>;
152
167
  workspaceHint: z.ZodOptional<z.ZodString>;
153
168
  limits: z.ZodOptional<z.ZodObject<{
@@ -155,6 +170,63 @@ export declare const EventsPollResponseSchema: z.ZodObject<{
155
170
  maxTokens: z.ZodOptional<z.ZodNumber>;
156
171
  }, z.core.$strip>>;
157
172
  }, z.core.$strip>;
173
+ }, z.core.$strip>, z.ZodObject<{
174
+ v: z.ZodNumber;
175
+ id: z.ZodUUID;
176
+ ts: z.ZodISODateTime;
177
+ type: z.ZodLiteral<"task.offer_with_toolsets">;
178
+ task_id: z.ZodString;
179
+ session_ref: z.ZodOptional<z.ZodString>;
180
+ seq: z.ZodNumber;
181
+ payload: z.ZodObject<{
182
+ instruction: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
183
+ blobRef: z.ZodObject<{
184
+ blobId: z.ZodString;
185
+ contentHash: z.ZodString;
186
+ size: z.ZodNumber;
187
+ contentType: z.ZodString;
188
+ url: z.ZodOptional<z.ZodString>;
189
+ }, z.core.$strip>;
190
+ }, z.core.$strict>]>;
191
+ policy: z.ZodObject<{
192
+ mode: z.ZodEnum<{
193
+ auto: "auto";
194
+ confirm: "confirm";
195
+ plan: "plan";
196
+ readonly: "readonly";
197
+ }>;
198
+ allowTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
199
+ denyTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
200
+ workspaceRoot: z.ZodOptional<z.ZodString>;
201
+ network: z.ZodOptional<z.ZodBoolean>;
202
+ }, z.core.$strict>;
203
+ runtime: z.ZodOptional<z.ZodEnum<{
204
+ claude: "claude";
205
+ codex: "codex";
206
+ pi: "pi";
207
+ }>>;
208
+ dispatchSelection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
209
+ lane: z.ZodLiteral<"subscription">;
210
+ runtimeId: z.ZodEnum<{
211
+ claude: "claude";
212
+ codex: "codex";
213
+ }>;
214
+ providerId: z.ZodNull;
215
+ modelId: z.ZodString;
216
+ }, z.core.$strict>, z.ZodObject<{
217
+ lane: z.ZodLiteral<"byok">;
218
+ runtimeId: z.ZodLiteral<"pi">;
219
+ providerId: z.ZodString;
220
+ modelId: z.ZodString;
221
+ }, z.core.$strict>], "lane">>;
222
+ sessionRef: z.ZodOptional<z.ZodString>;
223
+ workspaceHint: z.ZodOptional<z.ZodString>;
224
+ limits: z.ZodOptional<z.ZodObject<{
225
+ maxDurationMs: z.ZodOptional<z.ZodNumber>;
226
+ maxTokens: z.ZodOptional<z.ZodNumber>;
227
+ }, z.core.$strip>>;
228
+ requiredToolsets: z.ZodArray<z.ZodString>;
229
+ }, z.core.$strict>;
158
230
  }, z.core.$strip>, z.ZodObject<{
159
231
  v: z.ZodNumber;
160
232
  id: z.ZodUUID;
@@ -220,6 +292,7 @@ export declare const EventsPollResponseSchema: z.ZodObject<{
220
292
  steer: z.ZodOptional<z.ZodBoolean>;
221
293
  resume: z.ZodOptional<z.ZodBoolean>;
222
294
  approvalInteractive: z.ZodOptional<z.ZodBoolean>;
295
+ mcpToolsets: z.ZodOptional<z.ZodBoolean>;
223
296
  permissionModes: z.ZodOptional<z.ZodArray<z.ZodString>>;
224
297
  }, z.core.$strip>>;
225
298
  }, z.core.$strip>;
@@ -338,6 +411,7 @@ export declare const EventsPollResponseSchema: z.ZodObject<{
338
411
  contentType: z.ZodString;
339
412
  url: z.ZodOptional<z.ZodString>;
340
413
  }, z.core.$strip>>>;
414
+ document: z.ZodOptional<z.ZodUnknown>;
341
415
  }, z.core.$strip>;
342
416
  }, z.core.$strip>, z.ZodObject<{
343
417
  v: z.ZodNumber;
@@ -420,6 +494,7 @@ export declare const MessagesSendRequestSchema: z.ZodObject<{
420
494
  steer: z.ZodOptional<z.ZodBoolean>;
421
495
  resume: z.ZodOptional<z.ZodBoolean>;
422
496
  approvalInteractive: z.ZodOptional<z.ZodBoolean>;
497
+ mcpToolsets: z.ZodOptional<z.ZodBoolean>;
423
498
  permissionModes: z.ZodOptional<z.ZodArray<z.ZodString>>;
424
499
  }, z.core.$strip>>;
425
500
  }, z.core.$strip>>>;
@@ -473,6 +548,20 @@ export declare const MessagesSendRequestSchema: z.ZodObject<{
473
548
  codex: "codex";
474
549
  pi: "pi";
475
550
  }>>;
551
+ dispatchSelection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
552
+ lane: z.ZodLiteral<"subscription">;
553
+ runtimeId: z.ZodEnum<{
554
+ claude: "claude";
555
+ codex: "codex";
556
+ }>;
557
+ providerId: z.ZodNull;
558
+ modelId: z.ZodString;
559
+ }, z.core.$strict>, z.ZodObject<{
560
+ lane: z.ZodLiteral<"byok">;
561
+ runtimeId: z.ZodLiteral<"pi">;
562
+ providerId: z.ZodString;
563
+ modelId: z.ZodString;
564
+ }, z.core.$strict>], "lane">>;
476
565
  sessionRef: z.ZodOptional<z.ZodString>;
477
566
  workspaceHint: z.ZodOptional<z.ZodString>;
478
567
  limits: z.ZodOptional<z.ZodObject<{
@@ -480,6 +569,63 @@ export declare const MessagesSendRequestSchema: z.ZodObject<{
480
569
  maxTokens: z.ZodOptional<z.ZodNumber>;
481
570
  }, z.core.$strip>>;
482
571
  }, z.core.$strip>;
572
+ }, z.core.$strip>, z.ZodObject<{
573
+ v: z.ZodNumber;
574
+ id: z.ZodUUID;
575
+ ts: z.ZodISODateTime;
576
+ type: z.ZodLiteral<"task.offer_with_toolsets">;
577
+ task_id: z.ZodString;
578
+ session_ref: z.ZodOptional<z.ZodString>;
579
+ seq: z.ZodNumber;
580
+ payload: z.ZodObject<{
581
+ instruction: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
582
+ blobRef: z.ZodObject<{
583
+ blobId: z.ZodString;
584
+ contentHash: z.ZodString;
585
+ size: z.ZodNumber;
586
+ contentType: z.ZodString;
587
+ url: z.ZodOptional<z.ZodString>;
588
+ }, z.core.$strip>;
589
+ }, z.core.$strict>]>;
590
+ policy: z.ZodObject<{
591
+ mode: z.ZodEnum<{
592
+ auto: "auto";
593
+ confirm: "confirm";
594
+ plan: "plan";
595
+ readonly: "readonly";
596
+ }>;
597
+ allowTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
598
+ denyTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
599
+ workspaceRoot: z.ZodOptional<z.ZodString>;
600
+ network: z.ZodOptional<z.ZodBoolean>;
601
+ }, z.core.$strict>;
602
+ runtime: z.ZodOptional<z.ZodEnum<{
603
+ claude: "claude";
604
+ codex: "codex";
605
+ pi: "pi";
606
+ }>>;
607
+ dispatchSelection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
608
+ lane: z.ZodLiteral<"subscription">;
609
+ runtimeId: z.ZodEnum<{
610
+ claude: "claude";
611
+ codex: "codex";
612
+ }>;
613
+ providerId: z.ZodNull;
614
+ modelId: z.ZodString;
615
+ }, z.core.$strict>, z.ZodObject<{
616
+ lane: z.ZodLiteral<"byok">;
617
+ runtimeId: z.ZodLiteral<"pi">;
618
+ providerId: z.ZodString;
619
+ modelId: z.ZodString;
620
+ }, z.core.$strict>], "lane">>;
621
+ sessionRef: z.ZodOptional<z.ZodString>;
622
+ workspaceHint: z.ZodOptional<z.ZodString>;
623
+ limits: z.ZodOptional<z.ZodObject<{
624
+ maxDurationMs: z.ZodOptional<z.ZodNumber>;
625
+ maxTokens: z.ZodOptional<z.ZodNumber>;
626
+ }, z.core.$strip>>;
627
+ requiredToolsets: z.ZodArray<z.ZodString>;
628
+ }, z.core.$strict>;
483
629
  }, z.core.$strip>, z.ZodObject<{
484
630
  v: z.ZodNumber;
485
631
  id: z.ZodUUID;
@@ -545,6 +691,7 @@ export declare const MessagesSendRequestSchema: z.ZodObject<{
545
691
  steer: z.ZodOptional<z.ZodBoolean>;
546
692
  resume: z.ZodOptional<z.ZodBoolean>;
547
693
  approvalInteractive: z.ZodOptional<z.ZodBoolean>;
694
+ mcpToolsets: z.ZodOptional<z.ZodBoolean>;
548
695
  permissionModes: z.ZodOptional<z.ZodArray<z.ZodString>>;
549
696
  }, z.core.$strip>>;
550
697
  }, z.core.$strip>;
@@ -663,6 +810,7 @@ export declare const MessagesSendRequestSchema: z.ZodObject<{
663
810
  contentType: z.ZodString;
664
811
  url: z.ZodOptional<z.ZodString>;
665
812
  }, z.core.$strip>>>;
813
+ document: z.ZodOptional<z.ZodUnknown>;
666
814
  }, z.core.$strip>;
667
815
  }, z.core.$strip>, z.ZodObject<{
668
816
  v: z.ZodNumber;
@@ -723,3 +871,61 @@ export declare const MessagesSendResponseSchema: z.ZodObject<{
723
871
  rejected: z.ZodOptional<z.ZodNumber>;
724
872
  }, z.core.$strip>;
725
873
  export type MessagesSendResponse = z.infer<typeof MessagesSendResponseSchema>;
874
+ /** `GET /byok/ws` — WebSocket upgrade path. */
875
+ export declare const BYOK_WS_PATH = "/byok/ws";
876
+ /** `POST /byok/pair` — one-time device pairing (§6). */
877
+ export declare const BYOK_PAIR_PATH = "/byok/pair";
878
+ /** `POST /byok/challenge` — token-renewal challenge (§6.3). */
879
+ export declare const BYOK_CHALLENGE_PATH = "/byok/challenge";
880
+ /** `POST /byok/token` — token-renewal exchange (§6.3). */
881
+ export declare const BYOK_TOKEN_PATH = "/byok/token";
882
+ /** `GET /byok/capabilities` — ADR-010 declaration route. */
883
+ export declare const BYOK_CAPABILITIES_PATH = "/byok/capabilities";
884
+ /** `GET /byok/events` — long-poll receive (§8). */
885
+ export declare const BYOK_EVENTS_PATH = "/byok/events";
886
+ /** `POST /byok/messages` — long-poll batched send (§8.2). */
887
+ export declare const BYOK_MESSAGES_PATH = "/byok/messages";
888
+ /** `PUT /byok/presence` — presence heartbeat. */
889
+ export declare const BYOK_PRESENCE_PATH = "/byok/presence";
890
+ /** `POST /byok/activity` — activity-tail append. */
891
+ export declare const BYOK_ACTIVITY_PATH = "/byok/activity";
892
+ /** `GET /byok/board` — coordination board list/poll. */
893
+ export declare const BYOK_BOARD_PATH = "/byok/board";
894
+ /** `GET /byok/board/stream` — coordination board SSE. */
895
+ export declare const BYOK_BOARD_STREAM_PATH = "/byok/board/stream";
896
+ /** Router template — `POST /byok/board/:id/claim`. */
897
+ export declare const BYOK_BOARD_CLAIM_ROUTE = "/byok/board/:id/claim";
898
+ /** Router template — `POST /byok/board/:id/unclaim`. */
899
+ export declare const BYOK_BOARD_UNCLAIM_ROUTE = "/byok/board/:id/unclaim";
900
+ /** Router template — `POST /byok/board/:id/status`. */
901
+ export declare const BYOK_BOARD_STATUS_ROUTE = "/byok/board/:id/status";
902
+ /** `GET /byok/records` — truth manifest list (§12.3). */
903
+ export declare const BYOK_RECORDS_PATH = "/byok/records";
904
+ /** Router template for a single truth record — `GET`/`PUT /byok/records/:kind/:key`. */
905
+ export declare const BYOK_RECORD_ROUTE = "/byok/records/:kind/:key";
906
+ /** Client builder for a truth record path. Mirrors the `:kind/:key` template, each segment URL-encoded. */
907
+ export declare function byokRecordPath(kind: string, key: string): string;
908
+ /** `GET /byok/skill-packs` — skill-pack manifest catalogue. */
909
+ export declare const BYOK_SKILL_PACKS_PATH = "/byok/skill-packs";
910
+ /** Router template for a skill-pack file — `GET /byok/skill-packs/:name/files/:path`. */
911
+ export declare const BYOK_SKILL_PACK_FILE_ROUTE = "/byok/skill-packs/:name/files/:path";
912
+ /** Client builder for a skill-pack file path. Mirrors the `:name`/`:path` template, each segment URL-encoded. */
913
+ export declare function byokSkillPackFilePath(name: string, path: string): string;
914
+ /** `POST /byok/blobs` — declare a blob upload (§7). */
915
+ export declare const BYOK_BLOBS_PATH = "/byok/blobs";
916
+ /** Router template — `POST /byok/blobs/:id/finalize`. */
917
+ export declare const BYOK_BLOB_FINALIZE_ROUTE = "/byok/blobs/:id/finalize";
918
+ /** Router template — `GET /byok/blobs/:id/url`. */
919
+ export declare const BYOK_BLOB_URL_ROUTE = "/byok/blobs/:id/url";
920
+ /** Router template for the two presigned byte routes — `PUT`/`GET /byok/blobs/:id/content`. */
921
+ export declare const BYOK_BLOB_CONTENT_ROUTE = "/byok/blobs/:id/content";
922
+ /** Client builder — `POST /byok/blobs/:id/finalize`, blob id URL-encoded (client-supplied). */
923
+ export declare function byokBlobFinalizePath(blobId: string): string;
924
+ /** Client builder — `GET /byok/blobs/:id/url`, blob id URL-encoded (client-supplied). */
925
+ export declare function byokBlobUrlPath(blobId: string): string;
926
+ /**
927
+ * Path portion of a presigned `/byok/blobs/:id/content` URL. The blob id here
928
+ * is a server-minted token (NOT URL-encoded, matching the reference stores that
929
+ * mint these signed URLs); callers append the `?sig=&exp=` query themselves.
930
+ */
931
+ export declare function byokBlobContentPath(blobId: string): string;
package/dist/index.d.ts CHANGED
@@ -8,12 +8,12 @@ export { AgentEventSchema, UnknownAgentEventSchema, AgentEventOrUnknownSchema, K
8
8
  export type { AgentEvent, UnknownAgentEvent, AgentEventOrUnknown } from './agent-event';
9
9
  export { TASK_STATES, TASK_TRANSITIONS, canTransition } from './task-state';
10
10
  export type { TaskState } from './task-state';
11
- export { MESSAGE_TYPES, MESSAGE_PAYLOAD_SCHEMAS, SERVER_TO_DAEMON_TYPES, DAEMON_TO_SERVER_TYPES, RuntimeIdSchema, RuntimeInfoSchema, RuntimeCapabilitiesSchema, ConnHelloPayloadSchema, ConnAckPayloadSchema, TaskOfferPayloadSchema, TaskApprovePayloadSchema, TaskRejectPayloadSchema, TaskCancelPayloadSchema, TaskSteerPayloadSchema, TaskClaimPayloadSchema, TaskStartedPayloadSchema, TaskDeclinePayloadSchema, TaskProgressPayloadSchema, TaskArtifactPayloadSchema, TaskAwaitApprovalPayloadSchema, TaskCompletePayloadSchema, TaskFailPayloadSchema, TaskCancelledPayloadSchema, TaskApprovalResolvedPayloadSchema, } from './messages';
12
- export type { MessageType, RuntimeId, RuntimeInfo, RuntimeCapabilities, ConnHelloPayload, ConnAckPayload, TaskOfferPayload, TaskApprovePayload, TaskRejectPayload, TaskCancelPayload, TaskSteerPayload, TaskClaimPayload, TaskStartedPayload, TaskDeclinePayload, TaskProgressPayload, TaskArtifactPayload, TaskAwaitApprovalPayload, TaskCompletePayload, TaskFailPayload, TaskCancelledPayload, TaskApprovalResolvedPayload, } from './messages';
11
+ export { MESSAGE_TYPES, MESSAGE_PAYLOAD_SCHEMAS, SERVER_TO_DAEMON_TYPES, DAEMON_TO_SERVER_TYPES, RuntimeIdSchema, RuntimeInfoSchema, RuntimeCapabilitiesSchema, DispatchSelectionSchema, ToolsetIdSchema, RequiredToolsetsSchema, ConnHelloPayloadSchema, ConnAckPayloadSchema, TaskOfferPayloadSchema, TaskOfferWithToolsetsPayloadSchema, TaskApprovePayloadSchema, TaskRejectPayloadSchema, TaskCancelPayloadSchema, TaskSteerPayloadSchema, TaskClaimPayloadSchema, TaskStartedPayloadSchema, TaskDeclinePayloadSchema, TaskProgressPayloadSchema, TaskArtifactPayloadSchema, TaskAwaitApprovalPayloadSchema, TaskCompletePayloadSchema, TaskFailPayloadSchema, TaskCancelledPayloadSchema, TaskApprovalResolvedPayloadSchema, RESULT_DOCUMENT_MAX_BYTES, checkResultDocument, } from './messages';
12
+ export type { ResultDocumentCheck, MessageType, RuntimeId, RuntimeInfo, RuntimeCapabilities, DispatchSelection, ToolsetId, ConnHelloPayload, ConnAckPayload, TaskOfferPayload, TaskOfferWithToolsetsPayload, TaskApprovePayload, TaskRejectPayload, TaskCancelPayload, TaskSteerPayload, TaskClaimPayload, TaskStartedPayload, TaskDeclinePayload, TaskProgressPayload, TaskArtifactPayload, TaskAwaitApprovalPayload, TaskCompletePayload, TaskFailPayload, TaskCancelledPayload, TaskApprovalResolvedPayload, } from './messages';
13
13
  export { EnvelopeSchema, isServerToDaemonType } from './envelope';
14
14
  export type { Envelope } from './envelope';
15
15
  export { ProtocolError, EnvelopeParseError, UnknownMessageTypeError, EnvelopeValidationError, } from './errors';
16
16
  export { encodeEnvelope, decodeEnvelope, createEnvelope, parseMessage } from './codec';
17
17
  export type { CreateEnvelopeOptions } from './codec';
18
- export { PairRequestSchema, PairResponseSchema, ChallengeRequestSchema, ChallengeResponseSchema, TokenRequestSchema, TokenResponseSchema, CreateBlobRequestSchema, CreateBlobResponseSchema, BlobDownloadUrlResponseSchema, EventsPollQuerySchema, EventsPollResponseSchema, MessagesSendRequestSchema, MessagesSendResponseSchema, MAX_MESSAGES_PER_BATCH, } from './http-api';
18
+ export { PairRequestSchema, PairResponseSchema, ChallengeRequestSchema, ChallengeResponseSchema, TokenRequestSchema, TokenResponseSchema, CreateBlobRequestSchema, CreateBlobResponseSchema, BlobDownloadUrlResponseSchema, EventsPollQuerySchema, EventsPollResponseSchema, MessagesSendRequestSchema, MessagesSendResponseSchema, MAX_MESSAGES_PER_BATCH, BYOK_WS_PATH, BYOK_PAIR_PATH, BYOK_CHALLENGE_PATH, BYOK_TOKEN_PATH, BYOK_CAPABILITIES_PATH, BYOK_EVENTS_PATH, BYOK_MESSAGES_PATH, BYOK_PRESENCE_PATH, BYOK_ACTIVITY_PATH, BYOK_BOARD_PATH, BYOK_BOARD_STREAM_PATH, BYOK_BOARD_CLAIM_ROUTE, BYOK_BOARD_UNCLAIM_ROUTE, BYOK_BOARD_STATUS_ROUTE, BYOK_RECORDS_PATH, BYOK_RECORD_ROUTE, byokRecordPath, BYOK_SKILL_PACKS_PATH, BYOK_SKILL_PACK_FILE_ROUTE, byokSkillPackFilePath, BYOK_BLOBS_PATH, BYOK_BLOB_FINALIZE_ROUTE, BYOK_BLOB_URL_ROUTE, BYOK_BLOB_CONTENT_ROUTE, byokBlobFinalizePath, byokBlobUrlPath, byokBlobContentPath, } from './http-api';
19
19
  export type { PairRequest, PairResponse, ChallengeRequest, ChallengeResponse, TokenRequest, TokenResponse, CreateBlobRequest, CreateBlobResponse, BlobDownloadUrlResponse, EventsPollQuery, EventsPollResponse, MessagesSendRequest, MessagesSendResponse, } from './http-api';
package/dist/index.js CHANGED
@@ -7,7 +7,10 @@ var CAPABILITY_FLAGS = [
7
7
  "blob-upload",
8
8
  "interactive-approval",
9
9
  "approval_resolved",
10
- "approval-targeting"
10
+ "approval-targeting",
11
+ "result-document",
12
+ "dispatch-selection",
13
+ "toolset-selection"
11
14
  ];
12
15
  var CONTENT_HASH_RE = /^sha256:[0-9a-f]{64}$/;
13
16
  var BlobRefSchema = z.object({
@@ -101,6 +104,8 @@ var RuntimeCapabilitiesSchema = z.object({
101
104
  steer: z.boolean().optional(),
102
105
  resume: z.boolean().optional(),
103
106
  approvalInteractive: z.boolean().optional(),
107
+ /** Whether this runtime can project a locally configured MCP toolset into one task. */
108
+ mcpToolsets: z.boolean().optional(),
104
109
  permissionModes: z.array(z.string()).optional()
105
110
  });
106
111
  var RuntimeInfoSchema = z.object({
@@ -131,10 +136,26 @@ var ConnAckPayloadSchema = z.object({
131
136
  serverTime: z.iso.datetime({ offset: true })
132
137
  });
133
138
  var InstructionBlobRefSchema = z.object({ blobRef: BlobRefSchema }).strict();
139
+ var DispatchTargetIdSchema = z.string().min(1).max(160).regex(/^[^\u0000\r\n]+$/u, "dispatch target ids must not contain control line breaks");
140
+ var DispatchSelectionSchema = z.discriminatedUnion("lane", [
141
+ z.object({
142
+ lane: z.literal("subscription"),
143
+ runtimeId: z.enum(["claude", "codex"]),
144
+ providerId: z.null(),
145
+ modelId: DispatchTargetIdSchema
146
+ }).strict(),
147
+ z.object({
148
+ lane: z.literal("byok"),
149
+ runtimeId: z.literal("pi"),
150
+ providerId: DispatchTargetIdSchema,
151
+ modelId: DispatchTargetIdSchema
152
+ }).strict()
153
+ ]);
134
154
  var TaskOfferPayloadSchema = z.object({
135
155
  instruction: z.union([z.string(), InstructionBlobRefSchema]),
136
156
  policy: PermissionPolicySchema,
137
157
  runtime: RuntimeIdSchema.optional(),
158
+ dispatchSelection: DispatchSelectionSchema.optional(),
138
159
  sessionRef: z.string().optional(),
139
160
  workspaceHint: z.string().optional(),
140
161
  limits: z.object({
@@ -142,6 +163,23 @@ var TaskOfferPayloadSchema = z.object({
142
163
  maxTokens: z.number().int().positive().optional()
143
164
  }).optional()
144
165
  });
166
+ var ToolsetIdSchema = z.string().min(1).max(128).regex(/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u, "toolset ids must be lowercase logical identifiers");
167
+ var RequiredToolsetsSchema = z.array(ToolsetIdSchema).min(1).max(16).superRefine((ids, ctx) => {
168
+ const seen = /* @__PURE__ */ new Set();
169
+ for (const [index, id] of ids.entries()) {
170
+ if (seen.has(id)) {
171
+ ctx.addIssue({
172
+ code: "custom",
173
+ path: [index],
174
+ message: `duplicate required toolset: ${id}`
175
+ });
176
+ }
177
+ seen.add(id);
178
+ }
179
+ });
180
+ var TaskOfferWithToolsetsPayloadSchema = TaskOfferPayloadSchema.extend({
181
+ requiredToolsets: RequiredToolsetsSchema
182
+ }).strict();
145
183
  var TaskApprovePayloadSchema = z.object({
146
184
  approvalId: z.string().optional()
147
185
  });
@@ -182,10 +220,61 @@ var TaskAwaitApprovalPayloadSchema = z.object({
182
220
  summary: z.string(),
183
221
  approvalId: z.string().optional()
184
222
  });
223
+ var RESULT_DOCUMENT_MAX_BYTES = 1048576;
224
+ function isSameJsonData(a, b) {
225
+ if (a === null || b === null) return a === b;
226
+ const typeOfA = typeof a;
227
+ if (typeOfA !== typeof b) return false;
228
+ if (typeOfA !== "object") {
229
+ return a === b;
230
+ }
231
+ const aIsArray = Array.isArray(a);
232
+ if (aIsArray !== Array.isArray(b)) return false;
233
+ if (aIsArray) {
234
+ const arrayA = a;
235
+ const arrayB = b;
236
+ if (arrayA.length !== arrayB.length) return false;
237
+ for (let index = 0; index < arrayA.length; index += 1) {
238
+ if (!isSameJsonData(arrayA[index], arrayB[index])) return false;
239
+ }
240
+ return true;
241
+ }
242
+ const objectA = a;
243
+ const objectB = b;
244
+ const keysA = Object.keys(objectA);
245
+ const keysB = Object.keys(objectB);
246
+ if (keysA.length === 0) {
247
+ const prototypeA = Object.getPrototypeOf(objectA);
248
+ if (prototypeA !== Object.prototype && prototypeA !== null) return false;
249
+ }
250
+ if (keysA.length !== keysB.length) return false;
251
+ for (const key of keysA) {
252
+ if (!Object.prototype.hasOwnProperty.call(objectB, key)) return false;
253
+ if (!isSameJsonData(objectA[key], objectB[key])) return false;
254
+ }
255
+ return true;
256
+ }
257
+ function checkResultDocument(document) {
258
+ let json;
259
+ try {
260
+ json = JSON.stringify(document);
261
+ } catch {
262
+ return { ok: false, reason: "not-serializable" };
263
+ }
264
+ if (json === void 0) return { ok: false, reason: "not-serializable" };
265
+ const bytes = new TextEncoder().encode(json).length;
266
+ if (bytes > RESULT_DOCUMENT_MAX_BYTES) return { ok: false, reason: "over-cap", bytes };
267
+ const canonical = JSON.parse(json);
268
+ if (!isSameJsonData(document, canonical)) return { ok: false, reason: "not-plain-json" };
269
+ return { ok: true, bytes, canonical };
270
+ }
185
271
  var TaskCompletePayloadSchema = z.object({
186
272
  summary: z.string(),
187
273
  sessionRef: z.string(),
188
- artifactRefs: z.array(BlobRefSchema).optional()
274
+ artifactRefs: z.array(BlobRefSchema).optional(),
275
+ document: z.unknown().optional().refine((value) => value === void 0 || checkResultDocument(value).ok, {
276
+ message: `task.complete.document must be plain JSON data (equal to its own JSON round trip) and at most ${RESULT_DOCUMENT_MAX_BYTES} bytes as canonical JSON (UTF-8)`
277
+ })
189
278
  });
190
279
  var TaskFailPayloadSchema = z.object({
191
280
  reason: z.string(),
@@ -204,6 +293,7 @@ var MESSAGE_PAYLOAD_SCHEMAS = {
204
293
  "conn.hello": ConnHelloPayloadSchema,
205
294
  "conn.ack": ConnAckPayloadSchema,
206
295
  "task.offer": TaskOfferPayloadSchema,
296
+ "task.offer_with_toolsets": TaskOfferWithToolsetsPayloadSchema,
207
297
  "task.approve": TaskApprovePayloadSchema,
208
298
  "task.reject": TaskRejectPayloadSchema,
209
299
  "task.cancel": TaskCancelPayloadSchema,
@@ -223,6 +313,7 @@ var MESSAGE_TYPES = Object.keys(MESSAGE_PAYLOAD_SCHEMAS);
223
313
  var SERVER_TO_DAEMON_TYPES = [
224
314
  "conn.ack",
225
315
  "task.offer",
316
+ "task.offer_with_toolsets",
226
317
  "task.approve",
227
318
  "task.reject",
228
319
  "task.cancel",
@@ -265,6 +356,7 @@ var EnvelopeSchema = z.discriminatedUnion("type", [
265
356
  // task.* server -> daemon: task_id required (routing key) + seq required
266
357
  // (per-device redelivery cursor).
267
358
  envelopeShape("task.offer", REQUIRED_TASK_ID, REQUIRED_SEQ),
359
+ envelopeShape("task.offer_with_toolsets", REQUIRED_TASK_ID, REQUIRED_SEQ),
268
360
  envelopeShape("task.approve", REQUIRED_TASK_ID, REQUIRED_SEQ),
269
361
  envelopeShape("task.reject", REQUIRED_TASK_ID, REQUIRED_SEQ),
270
362
  envelopeShape("task.cancel", REQUIRED_TASK_ID, REQUIRED_SEQ),
@@ -426,7 +518,44 @@ var MessagesSendResponseSchema = z.object({
426
518
  accepted: z.number().int().nonnegative(),
427
519
  rejected: z.number().int().nonnegative().optional()
428
520
  });
521
+ var BYOK_WS_PATH = "/byok/ws";
522
+ var BYOK_PAIR_PATH = "/byok/pair";
523
+ var BYOK_CHALLENGE_PATH = "/byok/challenge";
524
+ var BYOK_TOKEN_PATH = "/byok/token";
525
+ var BYOK_CAPABILITIES_PATH = "/byok/capabilities";
526
+ var BYOK_EVENTS_PATH = "/byok/events";
527
+ var BYOK_MESSAGES_PATH = "/byok/messages";
528
+ var BYOK_PRESENCE_PATH = "/byok/presence";
529
+ var BYOK_ACTIVITY_PATH = "/byok/activity";
530
+ var BYOK_BOARD_PATH = "/byok/board";
531
+ var BYOK_BOARD_STREAM_PATH = "/byok/board/stream";
532
+ var BYOK_BOARD_CLAIM_ROUTE = "/byok/board/:id/claim";
533
+ var BYOK_BOARD_UNCLAIM_ROUTE = "/byok/board/:id/unclaim";
534
+ var BYOK_BOARD_STATUS_ROUTE = "/byok/board/:id/status";
535
+ var BYOK_RECORDS_PATH = "/byok/records";
536
+ var BYOK_RECORD_ROUTE = "/byok/records/:kind/:key";
537
+ function byokRecordPath(kind, key) {
538
+ return `/byok/records/${encodeURIComponent(kind)}/${encodeURIComponent(key)}`;
539
+ }
540
+ var BYOK_SKILL_PACKS_PATH = "/byok/skill-packs";
541
+ var BYOK_SKILL_PACK_FILE_ROUTE = "/byok/skill-packs/:name/files/:path";
542
+ function byokSkillPackFilePath(name, path) {
543
+ return `/byok/skill-packs/${encodeURIComponent(name)}/files/${encodeURIComponent(path)}`;
544
+ }
545
+ var BYOK_BLOBS_PATH = "/byok/blobs";
546
+ var BYOK_BLOB_FINALIZE_ROUTE = "/byok/blobs/:id/finalize";
547
+ var BYOK_BLOB_URL_ROUTE = "/byok/blobs/:id/url";
548
+ var BYOK_BLOB_CONTENT_ROUTE = "/byok/blobs/:id/content";
549
+ function byokBlobFinalizePath(blobId) {
550
+ return `/byok/blobs/${encodeURIComponent(blobId)}/finalize`;
551
+ }
552
+ function byokBlobUrlPath(blobId) {
553
+ return `/byok/blobs/${encodeURIComponent(blobId)}/url`;
554
+ }
555
+ function byokBlobContentPath(blobId) {
556
+ return `/byok/blobs/${blobId}/content`;
557
+ }
429
558
 
430
- export { AgentEventOrUnknownSchema, AgentEventSchema, BlobDownloadUrlResponseSchema, BlobRefSchema, CAPABILITY_FLAGS, CONTENT_HASH_RE, ChallengeRequestSchema, ChallengeResponseSchema, ConnAckPayloadSchema, ConnHelloPayloadSchema, CreateBlobRequestSchema, CreateBlobResponseSchema, DAEMON_TO_SERVER_TYPES, EnvelopeParseError, EnvelopeSchema, EnvelopeValidationError, EventsPollQuerySchema, EventsPollResponseSchema, KNOWN_AGENT_EVENT_TYPES, MAX_MESSAGES_PER_BATCH, MESSAGE_PAYLOAD_SCHEMAS, MESSAGE_TYPES, MessagesSendRequestSchema, MessagesSendResponseSchema, PERMISSION_MODES, PROTOCOL_VERSION, PairRequestSchema, PairResponseSchema, PermissionPolicySchema, ProtocolError, RuntimeCapabilitiesSchema, RuntimeIdSchema, RuntimeInfoSchema, SERVER_TO_DAEMON_TYPES, TASK_STATES, TASK_TRANSITIONS, TaskApprovalResolvedPayloadSchema, TaskApprovePayloadSchema, TaskArtifactPayloadSchema, TaskAwaitApprovalPayloadSchema, TaskCancelPayloadSchema, TaskCancelledPayloadSchema, TaskClaimPayloadSchema, TaskCompletePayloadSchema, TaskDeclinePayloadSchema, TaskFailPayloadSchema, TaskOfferPayloadSchema, TaskProgressPayloadSchema, TaskRejectPayloadSchema, TaskStartedPayloadSchema, TaskSteerPayloadSchema, TokenRequestSchema, TokenResponseSchema, UnknownAgentEventSchema, UnknownMessageTypeError, canTransition, createEnvelope, decodeEnvelope, encodeEnvelope, isKnownAgentEvent, isServerToDaemonType, parseMessage, partitionAgentEvents };
559
+ export { AgentEventOrUnknownSchema, AgentEventSchema, BYOK_ACTIVITY_PATH, BYOK_BLOBS_PATH, BYOK_BLOB_CONTENT_ROUTE, BYOK_BLOB_FINALIZE_ROUTE, BYOK_BLOB_URL_ROUTE, BYOK_BOARD_CLAIM_ROUTE, BYOK_BOARD_PATH, BYOK_BOARD_STATUS_ROUTE, BYOK_BOARD_STREAM_PATH, BYOK_BOARD_UNCLAIM_ROUTE, BYOK_CAPABILITIES_PATH, BYOK_CHALLENGE_PATH, BYOK_EVENTS_PATH, BYOK_MESSAGES_PATH, BYOK_PAIR_PATH, BYOK_PRESENCE_PATH, BYOK_RECORDS_PATH, BYOK_RECORD_ROUTE, BYOK_SKILL_PACKS_PATH, BYOK_SKILL_PACK_FILE_ROUTE, BYOK_TOKEN_PATH, BYOK_WS_PATH, BlobDownloadUrlResponseSchema, BlobRefSchema, CAPABILITY_FLAGS, CONTENT_HASH_RE, ChallengeRequestSchema, ChallengeResponseSchema, ConnAckPayloadSchema, ConnHelloPayloadSchema, CreateBlobRequestSchema, CreateBlobResponseSchema, DAEMON_TO_SERVER_TYPES, DispatchSelectionSchema, EnvelopeParseError, EnvelopeSchema, EnvelopeValidationError, EventsPollQuerySchema, EventsPollResponseSchema, KNOWN_AGENT_EVENT_TYPES, MAX_MESSAGES_PER_BATCH, MESSAGE_PAYLOAD_SCHEMAS, MESSAGE_TYPES, MessagesSendRequestSchema, MessagesSendResponseSchema, PERMISSION_MODES, PROTOCOL_VERSION, PairRequestSchema, PairResponseSchema, PermissionPolicySchema, ProtocolError, RESULT_DOCUMENT_MAX_BYTES, RequiredToolsetsSchema, RuntimeCapabilitiesSchema, RuntimeIdSchema, RuntimeInfoSchema, SERVER_TO_DAEMON_TYPES, TASK_STATES, TASK_TRANSITIONS, TaskApprovalResolvedPayloadSchema, TaskApprovePayloadSchema, TaskArtifactPayloadSchema, TaskAwaitApprovalPayloadSchema, TaskCancelPayloadSchema, TaskCancelledPayloadSchema, TaskClaimPayloadSchema, TaskCompletePayloadSchema, TaskDeclinePayloadSchema, TaskFailPayloadSchema, TaskOfferPayloadSchema, TaskOfferWithToolsetsPayloadSchema, TaskProgressPayloadSchema, TaskRejectPayloadSchema, TaskStartedPayloadSchema, TaskSteerPayloadSchema, TokenRequestSchema, TokenResponseSchema, ToolsetIdSchema, UnknownAgentEventSchema, UnknownMessageTypeError, byokBlobContentPath, byokBlobFinalizePath, byokBlobUrlPath, byokRecordPath, byokSkillPackFilePath, canTransition, checkResultDocument, createEnvelope, decodeEnvelope, encodeEnvelope, isKnownAgentEvent, isServerToDaemonType, parseMessage, partitionAgentEvents };
431
560
  //# sourceMappingURL=index.js.map
432
561
  //# sourceMappingURL=index.js.map