@hyperdrive.bot/paseo-protocol 0.2.5 → 0.2.7

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.
@@ -13,6 +13,43 @@ export declare const TerminalProfileSchema: z.ZodObject<{
13
13
  icon: z.ZodOptional<z.ZodString>;
14
14
  }, z.core.$loose>;
15
15
  export type TerminalProfile = z.infer<typeof TerminalProfileSchema>;
16
+ /**
17
+ * One kanban column. `id` is the value stored in `agent.labels.kanban`, so it is
18
+ * stable for the life of the column - renaming never re-homes cards. `limit` is
19
+ * the optional WIP limit (absent = unlimited).
20
+ *
21
+ * This lives in the daemon config, not on the client, because card MEMBERSHIP is
22
+ * already daemon-side (an agent label) while the column REGISTRY used to be
23
+ * per-device AsyncStorage. That split meant a card moved to "Verify" on your
24
+ * laptop rendered under the default column on your phone (the phone had no
25
+ * `verify` column to resolve the label against), and a WIP limit was silently
26
+ * per-device. Structure and membership have to live on the same side of the wire.
27
+ */
28
+ export declare const KanbanBucketDefSchema: z.ZodObject<{
29
+ id: z.ZodString;
30
+ label: z.ZodString;
31
+ limit: z.ZodOptional<z.ZodNumber>;
32
+ }, z.core.$loose>;
33
+ export type KanbanBucketDef = z.infer<typeof KanbanBucketDefSchema>;
34
+ /**
35
+ * The whole board structure: ordered columns + which one absorbs cards with no
36
+ * (or an unresolvable) `kanban` label. `defaultBucketId` is null only when the
37
+ * board is empty, which is a legitimate state - the user may delete every column.
38
+ *
39
+ * Deliberately `.optional()` wherever it is embedded rather than `.default()`:
40
+ * "the daemon has never stored a board" (undefined) and "the user emptied the
41
+ * board" (`{buckets: [], defaultBucketId: null}`) are different, and the client
42
+ * only seeds from its local board in the first case.
43
+ */
44
+ export declare const KanbanBoardConfigSchema: z.ZodObject<{
45
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
46
+ id: z.ZodString;
47
+ label: z.ZodString;
48
+ limit: z.ZodOptional<z.ZodNumber>;
49
+ }, z.core.$loose>>>;
50
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
51
+ }, z.core.$loose>;
52
+ export type KanbanBoardConfig = z.infer<typeof KanbanBoardConfigSchema>;
16
53
  export declare const MutableDaemonConfigSchema: z.ZodObject<{
17
54
  mcp: z.ZodObject<{
18
55
  injectIntoAgents: z.ZodBoolean;
@@ -46,6 +83,14 @@ export declare const MutableDaemonConfigSchema: z.ZodObject<{
46
83
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
47
84
  icon: z.ZodOptional<z.ZodString>;
48
85
  }, z.core.$loose>>>;
86
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
87
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
88
+ id: z.ZodString;
89
+ label: z.ZodString;
90
+ limit: z.ZodOptional<z.ZodNumber>;
91
+ }, z.core.$loose>>>;
92
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
93
+ }, z.core.$loose>>;
49
94
  }, z.core.$loose>;
50
95
  export declare const MutableDaemonConfigPatchSchema: z.ZodObject<{
51
96
  mcp: z.ZodOptional<z.ZodOptional<z.ZodObject<{
@@ -80,6 +125,14 @@ export declare const MutableDaemonConfigPatchSchema: z.ZodObject<{
80
125
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
81
126
  icon: z.ZodOptional<z.ZodString>;
82
127
  }, z.core.$loose>>>>;
128
+ kanbanBoard: z.ZodOptional<z.ZodOptional<z.ZodObject<{
129
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
130
+ id: z.ZodString;
131
+ label: z.ZodString;
132
+ limit: z.ZodOptional<z.ZodNumber>;
133
+ }, z.core.$loose>>>;
134
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
135
+ }, z.core.$loose>>>;
83
136
  }, z.core.$loose>;
84
137
  export type MutableDaemonConfig = z.infer<typeof MutableDaemonConfigSchema>;
85
138
  export type MutableDaemonConfigPatch = z.infer<typeof MutableDaemonConfigPatchSchema>;
@@ -1451,6 +1504,14 @@ export declare const SetDaemonConfigRequestMessageSchema: z.ZodObject<{
1451
1504
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
1452
1505
  icon: z.ZodOptional<z.ZodString>;
1453
1506
  }, z.core.$loose>>>>;
1507
+ kanbanBoard: z.ZodOptional<z.ZodOptional<z.ZodObject<{
1508
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
1509
+ id: z.ZodString;
1510
+ label: z.ZodString;
1511
+ limit: z.ZodOptional<z.ZodNumber>;
1512
+ }, z.core.$loose>>>;
1513
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
1514
+ }, z.core.$loose>>>;
1454
1515
  }, z.core.$loose>;
1455
1516
  }, z.core.$strip>;
1456
1517
  export declare const ReadProjectConfigRequestMessageSchema: z.ZodObject<{
@@ -2191,6 +2252,15 @@ export declare const FilesUploadCompleteRequestSchema: z.ZodObject<{
2191
2252
  uploadId: z.ZodString;
2192
2253
  totalChunks: z.ZodNumber;
2193
2254
  }, z.core.$strip>;
2255
+ export declare const FilesUploadChunkSchema: z.ZodObject<{
2256
+ type: z.ZodLiteral<"files.upload.chunk">;
2257
+ payload: z.ZodObject<{
2258
+ requestId: z.ZodString;
2259
+ uploadId: z.ZodString;
2260
+ chunkIndex: z.ZodNumber;
2261
+ data: z.ZodString;
2262
+ }, z.core.$strip>;
2263
+ }, z.core.$strip>;
2194
2264
  export declare const FilesUploadErrorSchema: z.ZodObject<{
2195
2265
  type: z.ZodLiteral<"files.upload.error">;
2196
2266
  payload: z.ZodObject<{
@@ -3650,6 +3720,14 @@ export declare const SessionInboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zod
3650
3720
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
3651
3721
  icon: z.ZodOptional<z.ZodString>;
3652
3722
  }, z.core.$loose>>>>;
3723
+ kanbanBoard: z.ZodOptional<z.ZodOptional<z.ZodObject<{
3724
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
3725
+ id: z.ZodString;
3726
+ label: z.ZodString;
3727
+ limit: z.ZodOptional<z.ZodNumber>;
3728
+ }, z.core.$loose>>>;
3729
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
3730
+ }, z.core.$loose>>>;
3653
3731
  }, z.core.$loose>;
3654
3732
  }, z.core.$strip>, z.ZodObject<{
3655
3733
  type: z.ZodLiteral<"read_project_config_request">;
@@ -4123,6 +4201,14 @@ export declare const SessionInboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zod
4123
4201
  requestId: z.ZodString;
4124
4202
  uploadId: z.ZodString;
4125
4203
  totalChunks: z.ZodNumber;
4204
+ }, z.core.$strip>, z.ZodObject<{
4205
+ type: z.ZodLiteral<"files.upload.chunk">;
4206
+ payload: z.ZodObject<{
4207
+ requestId: z.ZodString;
4208
+ uploadId: z.ZodString;
4209
+ chunkIndex: z.ZodNumber;
4210
+ data: z.ZodString;
4211
+ }, z.core.$strip>;
4126
4212
  }, z.core.$strip>, z.ZodObject<{
4127
4213
  type: z.ZodLiteral<"files.upload.error">;
4128
4214
  payload: z.ZodObject<{
@@ -5052,6 +5138,7 @@ export declare const ServerInfoStatusPayloadSchema: z.ZodPipe<z.ZodObject<{
5052
5138
  daemonSelfUpdate: z.ZodOptional<z.ZodBoolean>;
5053
5139
  agentForkContext: z.ZodOptional<z.ZodBoolean>;
5054
5140
  meetingsLiveCapture: z.ZodOptional<z.ZodBoolean>;
5141
+ kanbanBoardConfig: z.ZodOptional<z.ZodBoolean>;
5055
5142
  }, z.core.$strip>>;
5056
5143
  }, z.core.$loose>, z.ZodTransform<{
5057
5144
  hostname: string | null;
@@ -5095,6 +5182,7 @@ export declare const ServerInfoStatusPayloadSchema: z.ZodPipe<z.ZodObject<{
5095
5182
  daemonSelfUpdate?: boolean | undefined;
5096
5183
  agentForkContext?: boolean | undefined;
5097
5184
  meetingsLiveCapture?: boolean | undefined;
5185
+ kanbanBoardConfig?: boolean | undefined;
5098
5186
  } | undefined;
5099
5187
  }, {
5100
5188
  [x: string]: unknown;
@@ -5139,6 +5227,7 @@ export declare const ServerInfoStatusPayloadSchema: z.ZodPipe<z.ZodObject<{
5139
5227
  daemonSelfUpdate?: boolean | undefined;
5140
5228
  agentForkContext?: boolean | undefined;
5141
5229
  meetingsLiveCapture?: boolean | undefined;
5230
+ kanbanBoardConfig?: boolean | undefined;
5142
5231
  } | undefined;
5143
5232
  }>>;
5144
5233
  export declare const StatusMessageSchema: z.ZodObject<{
@@ -5406,6 +5495,14 @@ export declare const DaemonConfigChangedStatusPayloadSchema: z.ZodObject<{
5406
5495
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
5407
5496
  icon: z.ZodOptional<z.ZodString>;
5408
5497
  }, z.core.$loose>>>;
5498
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
5499
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
5500
+ id: z.ZodString;
5501
+ label: z.ZodString;
5502
+ limit: z.ZodOptional<z.ZodNumber>;
5503
+ }, z.core.$loose>>>;
5504
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
5505
+ }, z.core.$loose>>;
5409
5506
  }, z.core.$loose>;
5410
5507
  }, z.core.$loose>;
5411
5508
  export declare const KnownStatusPayloadSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -5643,6 +5740,14 @@ export declare const KnownStatusPayloadSchema: z.ZodDiscriminatedUnion<[z.ZodObj
5643
5740
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
5644
5741
  icon: z.ZodOptional<z.ZodString>;
5645
5742
  }, z.core.$loose>>>;
5743
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
5744
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
5745
+ id: z.ZodString;
5746
+ label: z.ZodString;
5747
+ limit: z.ZodOptional<z.ZodNumber>;
5748
+ }, z.core.$loose>>>;
5749
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
5750
+ }, z.core.$loose>>;
5646
5751
  }, z.core.$loose>;
5647
5752
  }, z.core.$loose>], "status">;
5648
5753
  export type KnownStatusPayload = z.infer<typeof KnownStatusPayloadSchema>;
@@ -9704,6 +9809,14 @@ export declare const GetDaemonConfigResponseMessageSchema: z.ZodObject<{
9704
9809
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
9705
9810
  icon: z.ZodOptional<z.ZodString>;
9706
9811
  }, z.core.$loose>>>;
9812
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
9813
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
9814
+ id: z.ZodString;
9815
+ label: z.ZodString;
9816
+ limit: z.ZodOptional<z.ZodNumber>;
9817
+ }, z.core.$loose>>>;
9818
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
9819
+ }, z.core.$loose>>;
9707
9820
  }, z.core.$loose>;
9708
9821
  }, z.core.$loose>;
9709
9822
  }, z.core.$strip>;
@@ -9784,6 +9897,14 @@ export declare const SetDaemonConfigResponseMessageSchema: z.ZodObject<{
9784
9897
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
9785
9898
  icon: z.ZodOptional<z.ZodString>;
9786
9899
  }, z.core.$loose>>>;
9900
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
9901
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
9902
+ id: z.ZodString;
9903
+ label: z.ZodString;
9904
+ limit: z.ZodOptional<z.ZodNumber>;
9905
+ }, z.core.$loose>>>;
9906
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
9907
+ }, z.core.$loose>>;
9787
9908
  }, z.core.$loose>;
9788
9909
  }, z.core.$loose>;
9789
9910
  }, z.core.$strip>;
@@ -15644,6 +15765,14 @@ export declare const SessionOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zo
15644
15765
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
15645
15766
  icon: z.ZodOptional<z.ZodString>;
15646
15767
  }, z.core.$loose>>>;
15768
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
15769
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
15770
+ id: z.ZodString;
15771
+ label: z.ZodString;
15772
+ limit: z.ZodOptional<z.ZodNumber>;
15773
+ }, z.core.$loose>>>;
15774
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
15775
+ }, z.core.$loose>>;
15647
15776
  }, z.core.$loose>;
15648
15777
  }, z.core.$loose>;
15649
15778
  }, z.core.$strip>, z.ZodObject<{
@@ -15683,6 +15812,14 @@ export declare const SessionOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zo
15683
15812
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
15684
15813
  icon: z.ZodOptional<z.ZodString>;
15685
15814
  }, z.core.$loose>>>;
15815
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
15816
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
15817
+ id: z.ZodString;
15818
+ label: z.ZodString;
15819
+ limit: z.ZodOptional<z.ZodNumber>;
15820
+ }, z.core.$loose>>>;
15821
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
15822
+ }, z.core.$loose>>;
15686
15823
  }, z.core.$loose>;
15687
15824
  }, z.core.$loose>;
15688
15825
  }, z.core.$strip>, z.ZodObject<{
@@ -19094,6 +19231,7 @@ export type FileUploadErrorCode = z.infer<typeof FileUploadErrorCodeSchema>;
19094
19231
  export type FilesUploadBeginRequest = z.infer<typeof FilesUploadBeginRequestSchema>;
19095
19232
  export type FilesUploadBeginResponse = z.infer<typeof FilesUploadBeginResponseSchema>;
19096
19233
  export type FilesUploadChunkAck = z.infer<typeof FilesUploadChunkAckSchema>;
19234
+ export type FilesUploadChunk = z.infer<typeof FilesUploadChunkSchema>;
19097
19235
  export type FilesUploadCompleteRequest = z.infer<typeof FilesUploadCompleteRequestSchema>;
19098
19236
  export type FilesUploadCompleteResponse = z.infer<typeof FilesUploadCompleteResponseSchema>;
19099
19237
  export type FilesUploadError = z.infer<typeof FilesUploadErrorSchema>;
@@ -19767,6 +19905,14 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
19767
19905
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
19768
19906
  icon: z.ZodOptional<z.ZodString>;
19769
19907
  }, z.core.$loose>>>>;
19908
+ kanbanBoard: z.ZodOptional<z.ZodOptional<z.ZodObject<{
19909
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
19910
+ id: z.ZodString;
19911
+ label: z.ZodString;
19912
+ limit: z.ZodOptional<z.ZodNumber>;
19913
+ }, z.core.$loose>>>;
19914
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
19915
+ }, z.core.$loose>>>;
19770
19916
  }, z.core.$loose>;
19771
19917
  }, z.core.$strip>, z.ZodObject<{
19772
19918
  type: z.ZodLiteral<"read_project_config_request">;
@@ -20240,6 +20386,14 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
20240
20386
  requestId: z.ZodString;
20241
20387
  uploadId: z.ZodString;
20242
20388
  totalChunks: z.ZodNumber;
20389
+ }, z.core.$strip>, z.ZodObject<{
20390
+ type: z.ZodLiteral<"files.upload.chunk">;
20391
+ payload: z.ZodObject<{
20392
+ requestId: z.ZodString;
20393
+ uploadId: z.ZodString;
20394
+ chunkIndex: z.ZodNumber;
20395
+ data: z.ZodString;
20396
+ }, z.core.$strip>;
20243
20397
  }, z.core.$strip>, z.ZodObject<{
20244
20398
  type: z.ZodLiteral<"files.upload.error">;
20245
20399
  payload: z.ZodObject<{
@@ -24577,6 +24731,14 @@ export declare const WSSessionOutboundSchema: z.ZodObject<{
24577
24731
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
24578
24732
  icon: z.ZodOptional<z.ZodString>;
24579
24733
  }, z.core.$loose>>>;
24734
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
24735
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
24736
+ id: z.ZodString;
24737
+ label: z.ZodString;
24738
+ limit: z.ZodOptional<z.ZodNumber>;
24739
+ }, z.core.$loose>>>;
24740
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
24741
+ }, z.core.$loose>>;
24580
24742
  }, z.core.$loose>;
24581
24743
  }, z.core.$loose>;
24582
24744
  }, z.core.$strip>, z.ZodObject<{
@@ -24616,6 +24778,14 @@ export declare const WSSessionOutboundSchema: z.ZodObject<{
24616
24778
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
24617
24779
  icon: z.ZodOptional<z.ZodString>;
24618
24780
  }, z.core.$loose>>>;
24781
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
24782
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
24783
+ id: z.ZodString;
24784
+ label: z.ZodString;
24785
+ limit: z.ZodOptional<z.ZodNumber>;
24786
+ }, z.core.$loose>>>;
24787
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
24788
+ }, z.core.$loose>>;
24619
24789
  }, z.core.$loose>;
24620
24790
  }, z.core.$loose>;
24621
24791
  }, z.core.$strip>, z.ZodObject<{
@@ -28393,6 +28563,14 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
28393
28563
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
28394
28564
  icon: z.ZodOptional<z.ZodString>;
28395
28565
  }, z.core.$loose>>>>;
28566
+ kanbanBoard: z.ZodOptional<z.ZodOptional<z.ZodObject<{
28567
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
28568
+ id: z.ZodString;
28569
+ label: z.ZodString;
28570
+ limit: z.ZodOptional<z.ZodNumber>;
28571
+ }, z.core.$loose>>>;
28572
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
28573
+ }, z.core.$loose>>>;
28396
28574
  }, z.core.$loose>;
28397
28575
  }, z.core.$strip>, z.ZodObject<{
28398
28576
  type: z.ZodLiteral<"read_project_config_request">;
@@ -28866,6 +29044,14 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
28866
29044
  requestId: z.ZodString;
28867
29045
  uploadId: z.ZodString;
28868
29046
  totalChunks: z.ZodNumber;
29047
+ }, z.core.$strip>, z.ZodObject<{
29048
+ type: z.ZodLiteral<"files.upload.chunk">;
29049
+ payload: z.ZodObject<{
29050
+ requestId: z.ZodString;
29051
+ uploadId: z.ZodString;
29052
+ chunkIndex: z.ZodNumber;
29053
+ data: z.ZodString;
29054
+ }, z.core.$strip>;
28869
29055
  }, z.core.$strip>, z.ZodObject<{
28870
29056
  type: z.ZodLiteral<"files.upload.error">;
28871
29057
  payload: z.ZodObject<{
@@ -33205,6 +33391,14 @@ export declare const WSOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObje
33205
33391
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
33206
33392
  icon: z.ZodOptional<z.ZodString>;
33207
33393
  }, z.core.$loose>>>;
33394
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
33395
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
33396
+ id: z.ZodString;
33397
+ label: z.ZodString;
33398
+ limit: z.ZodOptional<z.ZodNumber>;
33399
+ }, z.core.$loose>>>;
33400
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
33401
+ }, z.core.$loose>>;
33208
33402
  }, z.core.$loose>;
33209
33403
  }, z.core.$loose>;
33210
33404
  }, z.core.$strip>, z.ZodObject<{
@@ -33244,6 +33438,14 @@ export declare const WSOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObje
33244
33438
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
33245
33439
  icon: z.ZodOptional<z.ZodString>;
33246
33440
  }, z.core.$loose>>>;
33441
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
33442
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
33443
+ id: z.ZodString;
33444
+ label: z.ZodString;
33445
+ limit: z.ZodOptional<z.ZodNumber>;
33446
+ }, z.core.$loose>>>;
33447
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
33448
+ }, z.core.$loose>>;
33247
33449
  }, z.core.$loose>;
33248
33450
  }, z.core.$loose>;
33249
33451
  }, z.core.$strip>, z.ZodObject<{
package/dist/messages.js CHANGED
@@ -51,6 +51,41 @@ export const TerminalProfileSchema = z
51
51
  icon: z.string().optional(),
52
52
  })
53
53
  .passthrough();
54
+ /**
55
+ * One kanban column. `id` is the value stored in `agent.labels.kanban`, so it is
56
+ * stable for the life of the column - renaming never re-homes cards. `limit` is
57
+ * the optional WIP limit (absent = unlimited).
58
+ *
59
+ * This lives in the daemon config, not on the client, because card MEMBERSHIP is
60
+ * already daemon-side (an agent label) while the column REGISTRY used to be
61
+ * per-device AsyncStorage. That split meant a card moved to "Verify" on your
62
+ * laptop rendered under the default column on your phone (the phone had no
63
+ * `verify` column to resolve the label against), and a WIP limit was silently
64
+ * per-device. Structure and membership have to live on the same side of the wire.
65
+ */
66
+ export const KanbanBucketDefSchema = z
67
+ .object({
68
+ id: z.string().min(1),
69
+ label: z.string().min(1),
70
+ limit: z.number().int().positive().optional(),
71
+ })
72
+ .passthrough();
73
+ /**
74
+ * The whole board structure: ordered columns + which one absorbs cards with no
75
+ * (or an unresolvable) `kanban` label. `defaultBucketId` is null only when the
76
+ * board is empty, which is a legitimate state - the user may delete every column.
77
+ *
78
+ * Deliberately `.optional()` wherever it is embedded rather than `.default()`:
79
+ * "the daemon has never stored a board" (undefined) and "the user emptied the
80
+ * board" (`{buckets: [], defaultBucketId: null}`) are different, and the client
81
+ * only seeds from its local board in the first case.
82
+ */
83
+ export const KanbanBoardConfigSchema = z
84
+ .object({
85
+ buckets: z.array(KanbanBucketDefSchema).default([]),
86
+ defaultBucketId: z.string().nullable().default(null),
87
+ })
88
+ .passthrough();
54
89
  const MutableBrowserToolsConfigSchema = z
55
90
  .object({
56
91
  enabled: z.boolean().default(false),
@@ -70,6 +105,10 @@ export const MutableDaemonConfigSchema = z
70
105
  enableTerminalAgentHooks: z.boolean().default(false),
71
106
  appendSystemPrompt: z.string().default(""),
72
107
  terminalProfiles: z.array(TerminalProfileSchema).optional(),
108
+ // COMPAT(kanbanBoardConfig): added in v0.2.8, drop the gate when floor >= v0.2.8.
109
+ // Optional so an old daemon (which never sends it) and an old client (which
110
+ // ignores it) both keep parsing this config unchanged.
111
+ kanbanBoard: KanbanBoardConfigSchema.optional(),
73
112
  })
74
113
  .passthrough();
75
114
  export const MutableDaemonConfigPatchSchema = z
@@ -84,6 +123,11 @@ export const MutableDaemonConfigPatchSchema = z
84
123
  enableTerminalAgentHooks: z.boolean().optional(),
85
124
  appendSystemPrompt: z.string().optional(),
86
125
  terminalProfiles: z.array(TerminalProfileSchema).optional(),
126
+ // Patched wholesale, never field-by-field: `buckets` is an ordered array, and
127
+ // the store's deepMerge replaces arrays rather than merging them, so a patch
128
+ // carrying `kanbanBoard` must carry the complete board. That is exactly what
129
+ // the client sends (it owns the full board in memory before every write).
130
+ kanbanBoard: KanbanBoardConfigSchema.optional(),
87
131
  })
88
132
  .partial()
89
133
  .passthrough();
@@ -1644,6 +1688,24 @@ export const FilesUploadCompleteRequestSchema = z.object({
1644
1688
  uploadId: z.string(),
1645
1689
  totalChunks: z.number().int().nonnegative(),
1646
1690
  });
1691
+ // Text-safe chunk carrier (client -> daemon). Binary `FileChunk` WebSocket frames do not
1692
+ // survive every proxy transport: on the hyperdrive proxy path binary frames are dropped
1693
+ // while JSON/text frames pass, which stalls the windowed sender forever (0 acks). So the
1694
+ // client streams each chunk here as a base64 string inside a JSON message instead of a
1695
+ // binary frame. `requestId` correlates to the transfer opened by files.upload.begin.request;
1696
+ // the daemon decodes `data` and feeds it through the SAME FileChunk write+ack pipeline as the
1697
+ // binary path (assigning its own chunkIndex), so both transports are behaviorally identical.
1698
+ // `chunkIndex` is the client's own sequence number, carried for observability only; the
1699
+ // daemon does not depend on it.
1700
+ export const FilesUploadChunkSchema = z.object({
1701
+ type: z.literal("files.upload.chunk"),
1702
+ payload: z.object({
1703
+ requestId: z.string(),
1704
+ uploadId: z.string(),
1705
+ chunkIndex: z.number().int().nonnegative(),
1706
+ data: z.string(),
1707
+ }),
1708
+ });
1647
1709
  // Abort/error for an in-flight upload (either side may emit it). Declared here — before
1648
1710
  // the inbound and outbound unions — because it is registered in BOTH (bidirectional).
1649
1711
  export const FilesUploadErrorSchema = z.object({
@@ -2104,7 +2166,7 @@ export const ListAllSessionsResponseMessageSchema = z.object({
2104
2166
  // Plugin platform RPCs. The daemon reports installed-extension contributions so
2105
2167
  // the client populates its sidebar/command registries, and routes plugin
2106
2168
  // command execution to the extension-host. Dotted RPC names per
2107
- // docs/rpc-namespacing.md. The contribution shapes mirror @hyperpaseo/extension-sdk
2169
+ // docs/rpc-namespacing.md. The contribution shapes mirror @hyperdrive.bot/paseo-extension-sdk
2108
2170
  // (kept local — protocol must not depend on the SDK).
2109
2171
  const ExtensionCommandContributionSchema = z.object({
2110
2172
  id: z.string(),
@@ -2405,6 +2467,9 @@ export const SessionInboundMessageSchema = z.discriminatedUnion("type", [
2405
2467
  CheckoutGithubSetAutoMergeRequestSchema,
2406
2468
  FilesUploadBeginRequestSchema,
2407
2469
  FilesUploadCompleteRequestSchema,
2470
+ // Text-safe chunk carrier: client streams chunks here (base64 in JSON) instead of binary
2471
+ // FileChunk frames on transports that drop binary WS frames (e.g. the hyperdrive proxy).
2472
+ FilesUploadChunkSchema,
2408
2473
  // files.upload.error is bidirectional (either side may abort an in-flight upload).
2409
2474
  // Story 1.2 registered it outbound-only; story 2.1's inbound abort handler
2410
2475
  // (Session.handleFileUploadErrorMessage) needs it parseable as an inbound message too.
@@ -2682,6 +2747,11 @@ export const ServerInfoStatusPayloadSchema = z
2682
2747
  agentForkContext: z.boolean().optional(),
2683
2748
  // COMPAT(meetingsLiveCapture): added in v0.2.1, drop the gate when floor >= v0.2.1.
2684
2749
  meetingsLiveCapture: z.boolean().optional(),
2750
+ // COMPAT(kanbanBoardConfig): added in v0.2.8, drop the gate when floor >= v0.2.8.
2751
+ // Daemon stores the kanban column registry + WIP limits in its config and
2752
+ // broadcasts changes, so the board is shared by every device on this host.
2753
+ // Absent → the client keeps its legacy per-device AsyncStorage board.
2754
+ kanbanBoardConfig: z.boolean().optional(),
2685
2755
  })
2686
2756
  .optional(),
2687
2757
  })
@@ -73,6 +73,11 @@ export declare const ProviderOverrideSchema: z.ZodObject<{
73
73
  disallowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
74
74
  enabled: z.ZodOptional<z.ZodBoolean>;
75
75
  order: z.ZodOptional<z.ZodNumber>;
76
+ transport: z.ZodOptional<z.ZodEnum<{
77
+ auto: "auto";
78
+ sdk: "sdk";
79
+ pty: "pty";
80
+ }>>;
76
81
  }, z.core.$strip>;
77
82
  export declare const ProviderOverridesSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
78
83
  extends: z.ZodOptional<z.ZodString>;
@@ -108,6 +113,11 @@ export declare const ProviderOverridesSchema: z.ZodRecord<z.ZodString, z.ZodObje
108
113
  disallowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
109
114
  enabled: z.ZodOptional<z.ZodBoolean>;
110
115
  order: z.ZodOptional<z.ZodNumber>;
116
+ transport: z.ZodOptional<z.ZodEnum<{
117
+ auto: "auto";
118
+ sdk: "sdk";
119
+ pty: "pty";
120
+ }>>;
111
121
  }, z.core.$strip>>;
112
122
  export declare const AgentProviderRuntimeSettingsMapSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
113
123
  command: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -55,6 +55,11 @@ export const ProviderOverrideSchema = z.object({
55
55
  disallowedTools: z.array(z.string()).optional(),
56
56
  enabled: z.boolean().optional(),
57
57
  order: z.number().optional(),
58
+ // Persisted opt-in for the transport a provider's sessions use. Mirrors the
59
+ // runtime hint on ProviderRuntimeSettingsSchema above so a value written to
60
+ // ~/.paseo/config.json survives the load instead of being stripped as an
61
+ // unknown key. extractAgentProviderSettings carries it into runtime settings.
62
+ transport: z.enum(["sdk", "pty", "auto"]).optional(),
58
63
  });
59
64
  const BUILTIN_PROVIDER_IDS = ["claude", "codex", "copilot", "opencode", "pi", "omp"];
60
65
  const PROVIDER_ID_PATTERN = /^[a-z][a-z0-9-]*$/;
@@ -3586,6 +3586,14 @@ export declare const WSOutboundMessageSchema: {
3586
3586
  args: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
3587
3587
  icon: import("zod").ZodOptional<import("zod").ZodString>;
3588
3588
  }, import("zod/v4/core").$loose>>>;
3589
+ kanbanBoard: import("zod").ZodOptional<import("zod").ZodObject<{
3590
+ buckets: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodObject<{
3591
+ id: import("zod").ZodString;
3592
+ label: import("zod").ZodString;
3593
+ limit: import("zod").ZodOptional<import("zod").ZodNumber>;
3594
+ }, import("zod/v4/core").$loose>>>;
3595
+ defaultBucketId: import("zod").ZodDefault<import("zod").ZodNullable<import("zod").ZodString>>;
3596
+ }, import("zod/v4/core").$loose>>;
3589
3597
  }, import("zod/v4/core").$loose>;
3590
3598
  }, import("zod/v4/core").$loose>;
3591
3599
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
@@ -3625,6 +3633,14 @@ export declare const WSOutboundMessageSchema: {
3625
3633
  args: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
3626
3634
  icon: import("zod").ZodOptional<import("zod").ZodString>;
3627
3635
  }, import("zod/v4/core").$loose>>>;
3636
+ kanbanBoard: import("zod").ZodOptional<import("zod").ZodObject<{
3637
+ buckets: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodObject<{
3638
+ id: import("zod").ZodString;
3639
+ label: import("zod").ZodString;
3640
+ limit: import("zod").ZodOptional<import("zod").ZodNumber>;
3641
+ }, import("zod/v4/core").$loose>>>;
3642
+ defaultBucketId: import("zod").ZodDefault<import("zod").ZodNullable<import("zod").ZodString>>;
3643
+ }, import("zod/v4/core").$loose>>;
3628
3644
  }, import("zod/v4/core").$loose>;
3629
3645
  }, import("zod/v4/core").$loose>;
3630
3646
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperdrive.bot/paseo-protocol",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "description": "Paseo shared protocol schemas and wire types",
5
5
  "files": [
6
6
  "dist",