@hyperdrive.bot/paseo-protocol 0.2.5 → 0.2.6

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<{
@@ -3650,6 +3711,14 @@ export declare const SessionInboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zod
3650
3711
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
3651
3712
  icon: z.ZodOptional<z.ZodString>;
3652
3713
  }, z.core.$loose>>>>;
3714
+ kanbanBoard: z.ZodOptional<z.ZodOptional<z.ZodObject<{
3715
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
3716
+ id: z.ZodString;
3717
+ label: z.ZodString;
3718
+ limit: z.ZodOptional<z.ZodNumber>;
3719
+ }, z.core.$loose>>>;
3720
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
3721
+ }, z.core.$loose>>>;
3653
3722
  }, z.core.$loose>;
3654
3723
  }, z.core.$strip>, z.ZodObject<{
3655
3724
  type: z.ZodLiteral<"read_project_config_request">;
@@ -5052,6 +5121,7 @@ export declare const ServerInfoStatusPayloadSchema: z.ZodPipe<z.ZodObject<{
5052
5121
  daemonSelfUpdate: z.ZodOptional<z.ZodBoolean>;
5053
5122
  agentForkContext: z.ZodOptional<z.ZodBoolean>;
5054
5123
  meetingsLiveCapture: z.ZodOptional<z.ZodBoolean>;
5124
+ kanbanBoardConfig: z.ZodOptional<z.ZodBoolean>;
5055
5125
  }, z.core.$strip>>;
5056
5126
  }, z.core.$loose>, z.ZodTransform<{
5057
5127
  hostname: string | null;
@@ -5095,6 +5165,7 @@ export declare const ServerInfoStatusPayloadSchema: z.ZodPipe<z.ZodObject<{
5095
5165
  daemonSelfUpdate?: boolean | undefined;
5096
5166
  agentForkContext?: boolean | undefined;
5097
5167
  meetingsLiveCapture?: boolean | undefined;
5168
+ kanbanBoardConfig?: boolean | undefined;
5098
5169
  } | undefined;
5099
5170
  }, {
5100
5171
  [x: string]: unknown;
@@ -5139,6 +5210,7 @@ export declare const ServerInfoStatusPayloadSchema: z.ZodPipe<z.ZodObject<{
5139
5210
  daemonSelfUpdate?: boolean | undefined;
5140
5211
  agentForkContext?: boolean | undefined;
5141
5212
  meetingsLiveCapture?: boolean | undefined;
5213
+ kanbanBoardConfig?: boolean | undefined;
5142
5214
  } | undefined;
5143
5215
  }>>;
5144
5216
  export declare const StatusMessageSchema: z.ZodObject<{
@@ -5406,6 +5478,14 @@ export declare const DaemonConfigChangedStatusPayloadSchema: z.ZodObject<{
5406
5478
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
5407
5479
  icon: z.ZodOptional<z.ZodString>;
5408
5480
  }, z.core.$loose>>>;
5481
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
5482
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
5483
+ id: z.ZodString;
5484
+ label: z.ZodString;
5485
+ limit: z.ZodOptional<z.ZodNumber>;
5486
+ }, z.core.$loose>>>;
5487
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
5488
+ }, z.core.$loose>>;
5409
5489
  }, z.core.$loose>;
5410
5490
  }, z.core.$loose>;
5411
5491
  export declare const KnownStatusPayloadSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -5643,6 +5723,14 @@ export declare const KnownStatusPayloadSchema: z.ZodDiscriminatedUnion<[z.ZodObj
5643
5723
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
5644
5724
  icon: z.ZodOptional<z.ZodString>;
5645
5725
  }, z.core.$loose>>>;
5726
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
5727
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
5728
+ id: z.ZodString;
5729
+ label: z.ZodString;
5730
+ limit: z.ZodOptional<z.ZodNumber>;
5731
+ }, z.core.$loose>>>;
5732
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
5733
+ }, z.core.$loose>>;
5646
5734
  }, z.core.$loose>;
5647
5735
  }, z.core.$loose>], "status">;
5648
5736
  export type KnownStatusPayload = z.infer<typeof KnownStatusPayloadSchema>;
@@ -9704,6 +9792,14 @@ export declare const GetDaemonConfigResponseMessageSchema: z.ZodObject<{
9704
9792
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
9705
9793
  icon: z.ZodOptional<z.ZodString>;
9706
9794
  }, z.core.$loose>>>;
9795
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
9796
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
9797
+ id: z.ZodString;
9798
+ label: z.ZodString;
9799
+ limit: z.ZodOptional<z.ZodNumber>;
9800
+ }, z.core.$loose>>>;
9801
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
9802
+ }, z.core.$loose>>;
9707
9803
  }, z.core.$loose>;
9708
9804
  }, z.core.$loose>;
9709
9805
  }, z.core.$strip>;
@@ -9784,6 +9880,14 @@ export declare const SetDaemonConfigResponseMessageSchema: z.ZodObject<{
9784
9880
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
9785
9881
  icon: z.ZodOptional<z.ZodString>;
9786
9882
  }, z.core.$loose>>>;
9883
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
9884
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
9885
+ id: z.ZodString;
9886
+ label: z.ZodString;
9887
+ limit: z.ZodOptional<z.ZodNumber>;
9888
+ }, z.core.$loose>>>;
9889
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
9890
+ }, z.core.$loose>>;
9787
9891
  }, z.core.$loose>;
9788
9892
  }, z.core.$loose>;
9789
9893
  }, z.core.$strip>;
@@ -15644,6 +15748,14 @@ export declare const SessionOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zo
15644
15748
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
15645
15749
  icon: z.ZodOptional<z.ZodString>;
15646
15750
  }, z.core.$loose>>>;
15751
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
15752
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
15753
+ id: z.ZodString;
15754
+ label: z.ZodString;
15755
+ limit: z.ZodOptional<z.ZodNumber>;
15756
+ }, z.core.$loose>>>;
15757
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
15758
+ }, z.core.$loose>>;
15647
15759
  }, z.core.$loose>;
15648
15760
  }, z.core.$loose>;
15649
15761
  }, z.core.$strip>, z.ZodObject<{
@@ -15683,6 +15795,14 @@ export declare const SessionOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zo
15683
15795
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
15684
15796
  icon: z.ZodOptional<z.ZodString>;
15685
15797
  }, z.core.$loose>>>;
15798
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
15799
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
15800
+ id: z.ZodString;
15801
+ label: z.ZodString;
15802
+ limit: z.ZodOptional<z.ZodNumber>;
15803
+ }, z.core.$loose>>>;
15804
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
15805
+ }, z.core.$loose>>;
15686
15806
  }, z.core.$loose>;
15687
15807
  }, z.core.$loose>;
15688
15808
  }, z.core.$strip>, z.ZodObject<{
@@ -19767,6 +19887,14 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
19767
19887
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
19768
19888
  icon: z.ZodOptional<z.ZodString>;
19769
19889
  }, z.core.$loose>>>>;
19890
+ kanbanBoard: z.ZodOptional<z.ZodOptional<z.ZodObject<{
19891
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
19892
+ id: z.ZodString;
19893
+ label: z.ZodString;
19894
+ limit: z.ZodOptional<z.ZodNumber>;
19895
+ }, z.core.$loose>>>;
19896
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
19897
+ }, z.core.$loose>>>;
19770
19898
  }, z.core.$loose>;
19771
19899
  }, z.core.$strip>, z.ZodObject<{
19772
19900
  type: z.ZodLiteral<"read_project_config_request">;
@@ -24577,6 +24705,14 @@ export declare const WSSessionOutboundSchema: z.ZodObject<{
24577
24705
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
24578
24706
  icon: z.ZodOptional<z.ZodString>;
24579
24707
  }, z.core.$loose>>>;
24708
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
24709
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
24710
+ id: z.ZodString;
24711
+ label: z.ZodString;
24712
+ limit: z.ZodOptional<z.ZodNumber>;
24713
+ }, z.core.$loose>>>;
24714
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
24715
+ }, z.core.$loose>>;
24580
24716
  }, z.core.$loose>;
24581
24717
  }, z.core.$loose>;
24582
24718
  }, z.core.$strip>, z.ZodObject<{
@@ -24616,6 +24752,14 @@ export declare const WSSessionOutboundSchema: z.ZodObject<{
24616
24752
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
24617
24753
  icon: z.ZodOptional<z.ZodString>;
24618
24754
  }, z.core.$loose>>>;
24755
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
24756
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
24757
+ id: z.ZodString;
24758
+ label: z.ZodString;
24759
+ limit: z.ZodOptional<z.ZodNumber>;
24760
+ }, z.core.$loose>>>;
24761
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
24762
+ }, z.core.$loose>>;
24619
24763
  }, z.core.$loose>;
24620
24764
  }, z.core.$loose>;
24621
24765
  }, z.core.$strip>, z.ZodObject<{
@@ -28393,6 +28537,14 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
28393
28537
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
28394
28538
  icon: z.ZodOptional<z.ZodString>;
28395
28539
  }, z.core.$loose>>>>;
28540
+ kanbanBoard: z.ZodOptional<z.ZodOptional<z.ZodObject<{
28541
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
28542
+ id: z.ZodString;
28543
+ label: z.ZodString;
28544
+ limit: z.ZodOptional<z.ZodNumber>;
28545
+ }, z.core.$loose>>>;
28546
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
28547
+ }, z.core.$loose>>>;
28396
28548
  }, z.core.$loose>;
28397
28549
  }, z.core.$strip>, z.ZodObject<{
28398
28550
  type: z.ZodLiteral<"read_project_config_request">;
@@ -33205,6 +33357,14 @@ export declare const WSOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObje
33205
33357
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
33206
33358
  icon: z.ZodOptional<z.ZodString>;
33207
33359
  }, z.core.$loose>>>;
33360
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
33361
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
33362
+ id: z.ZodString;
33363
+ label: z.ZodString;
33364
+ limit: z.ZodOptional<z.ZodNumber>;
33365
+ }, z.core.$loose>>>;
33366
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
33367
+ }, z.core.$loose>>;
33208
33368
  }, z.core.$loose>;
33209
33369
  }, z.core.$loose>;
33210
33370
  }, z.core.$strip>, z.ZodObject<{
@@ -33244,6 +33404,14 @@ export declare const WSOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObje
33244
33404
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
33245
33405
  icon: z.ZodOptional<z.ZodString>;
33246
33406
  }, z.core.$loose>>>;
33407
+ kanbanBoard: z.ZodOptional<z.ZodObject<{
33408
+ buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
33409
+ id: z.ZodString;
33410
+ label: z.ZodString;
33411
+ limit: z.ZodOptional<z.ZodNumber>;
33412
+ }, z.core.$loose>>>;
33413
+ defaultBucketId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
33414
+ }, z.core.$loose>>;
33247
33415
  }, z.core.$loose>;
33248
33416
  }, z.core.$loose>;
33249
33417
  }, 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();
@@ -2682,6 +2726,11 @@ export const ServerInfoStatusPayloadSchema = z
2682
2726
  agentForkContext: z.boolean().optional(),
2683
2727
  // COMPAT(meetingsLiveCapture): added in v0.2.1, drop the gate when floor >= v0.2.1.
2684
2728
  meetingsLiveCapture: z.boolean().optional(),
2729
+ // COMPAT(kanbanBoardConfig): added in v0.2.8, drop the gate when floor >= v0.2.8.
2730
+ // Daemon stores the kanban column registry + WIP limits in its config and
2731
+ // broadcasts changes, so the board is shared by every device on this host.
2732
+ // Absent → the client keeps its legacy per-device AsyncStorage board.
2733
+ kanbanBoardConfig: z.boolean().optional(),
2685
2734
  })
2686
2735
  .optional(),
2687
2736
  })
@@ -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.6",
4
4
  "description": "Paseo shared protocol schemas and wire types",
5
5
  "files": [
6
6
  "dist",