@joe-broadhead/messaging 0.7.1 → 0.8.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.
Files changed (89) hide show
  1. package/CHANGELOG.md +214 -2
  2. package/dist/bin/messaging-mcp.js +5043 -4054
  3. package/dist/bin/messaging-relay.js +8263 -5425
  4. package/dist/bin/messaging.js +5982 -4906
  5. package/dist/bin/messagingd.js +19956 -13716
  6. package/dist/lib/modules/core/agent/operations.js +19 -327
  7. package/dist/lib/modules/core/agent/present.js +15 -55
  8. package/dist/lib/modules/core/agent-tools.js +23 -139
  9. package/dist/lib/modules/core/consent.js +1 -1
  10. package/dist/lib/modules/core/conversation/event.js +29 -4
  11. package/dist/lib/modules/core/conversation/guest-invitation.js +42 -0
  12. package/dist/lib/modules/core/conversation/log.js +287 -65
  13. package/dist/lib/modules/core/conversation/request-log.js +158 -0
  14. package/dist/lib/modules/core/conversation/request-seal.js +41 -0
  15. package/dist/lib/modules/core/conversation/requests.js +87 -0
  16. package/dist/lib/modules/core/conversation/seal.js +90 -37
  17. package/dist/lib/modules/core/conversation-agent-tools.js +69 -0
  18. package/dist/lib/modules/core/federation/directory-proof.js +83 -0
  19. package/dist/lib/modules/core/federation/proof-state.js +167 -0
  20. package/dist/lib/modules/core/federation/roster-proof.js +74 -0
  21. package/dist/lib/modules/core/index.js +8 -3
  22. package/dist/lib/modules/core/jelly-host.js +5 -5
  23. package/dist/lib/modules/core/schema/common.js +31 -5
  24. package/dist/lib/modules/core/schema/consent.js +5 -4
  25. package/dist/lib/modules/core/schema/contact-request.js +22 -0
  26. package/dist/lib/modules/core/schema/conv-frames.js +94 -0
  27. package/dist/lib/modules/core/schema/conversation.js +67 -33
  28. package/dist/lib/modules/core/schema/envelope.js +8 -24
  29. package/dist/lib/modules/core/schema/errors.js +4 -3
  30. package/dist/lib/modules/core/schema/guest-invitation.js +13 -0
  31. package/dist/lib/modules/core/schema/index.js +5 -0
  32. package/dist/lib/modules/core/schema/ipc/consent.js +13 -9
  33. package/dist/lib/modules/core/schema/ipc/conversation-views.js +80 -0
  34. package/dist/lib/modules/core/schema/ipc/conversations.js +128 -0
  35. package/dist/lib/modules/core/schema/ipc/device.js +2 -0
  36. package/dist/lib/modules/core/schema/ipc/jelly.js +3 -38
  37. package/dist/lib/modules/core/schema/ipc/shapes.js +14 -72
  38. package/dist/lib/modules/core/schema/ipc/surfaces.js +12 -195
  39. package/dist/lib/modules/core/schema/ipc/tasks.js +31 -0
  40. package/dist/lib/modules/core/schema/ipc.js +18 -44
  41. package/dist/lib/modules/core/testing.js +1 -1
  42. package/dist/lib/modules/core/version.js +1 -1
  43. package/dist/lib/modules/ipc/client.js +10 -2
  44. package/dist/lib/modules/ipc/server.js +14 -5
  45. package/dist/lib/modules/ipc/testing.js +13 -23
  46. package/dist/spec/messaging-v1.md +546 -409
  47. package/dist/third-party-notices.md +1 -1
  48. package/dist/third-party.json +1 -1
  49. package/dist/types/core/agent/operations.d.ts +5 -52
  50. package/dist/types/core/agent/present.d.ts +6 -21
  51. package/dist/types/core/agent-tools.d.ts +263 -442
  52. package/dist/types/core/conversation/event.d.ts +6 -6
  53. package/dist/types/core/conversation/guest-invitation.d.ts +8 -0
  54. package/dist/types/core/conversation/log.d.ts +28 -13
  55. package/dist/types/core/conversation/request-log.d.ts +24 -0
  56. package/dist/types/core/conversation/request-seal.d.ts +6 -0
  57. package/dist/types/core/conversation/requests.d.ts +14 -0
  58. package/dist/types/core/conversation/seal.d.ts +32 -9
  59. package/dist/types/core/conversation-agent-tools.d.ts +918 -0
  60. package/dist/types/core/federation/directory-proof.d.ts +8 -0
  61. package/dist/types/core/federation/proof-state.d.ts +114 -0
  62. package/dist/types/core/federation/roster-proof.d.ts +7 -0
  63. package/dist/types/core/index.d.ts +10 -5
  64. package/dist/types/core/jelly-host.d.ts +1 -1
  65. package/dist/types/core/schema/common.d.ts +31 -6
  66. package/dist/types/core/schema/consent.d.ts +7 -7
  67. package/dist/types/core/schema/contact-request.d.ts +264 -0
  68. package/dist/types/core/schema/conv-frames.d.ts +1200 -0
  69. package/dist/types/core/schema/conversation.d.ts +1410 -264
  70. package/dist/types/core/schema/envelope.d.ts +83 -130
  71. package/dist/types/core/schema/errors.d.ts +3 -1
  72. package/dist/types/core/schema/guest-invitation.d.ts +51 -0
  73. package/dist/types/core/schema/index.d.ts +5 -0
  74. package/dist/types/core/schema/ipc/consent.d.ts +89 -49
  75. package/dist/types/core/schema/ipc/conversation-views.d.ts +1023 -0
  76. package/dist/types/core/schema/ipc/conversations.d.ts +3987 -0
  77. package/dist/types/core/schema/ipc/device.d.ts +4 -0
  78. package/dist/types/core/schema/ipc/jelly.d.ts +2 -105
  79. package/dist/types/core/schema/ipc/shapes.d.ts +13 -95
  80. package/dist/types/core/schema/ipc/surfaces.d.ts +25 -427
  81. package/dist/types/core/schema/ipc/tasks.d.ts +208 -0
  82. package/dist/types/core/schema/ipc.d.ts +2671 -525
  83. package/dist/types/core/schema/relay.d.ts +8 -4
  84. package/dist/types/core/testing.d.ts +1 -1
  85. package/dist/types/core/version.d.ts +1 -1
  86. package/dist/types/ipc/client.d.ts +4 -1
  87. package/dist/types/ipc/server.d.ts +10 -1
  88. package/dist/types/ipc/testing.d.ts +21 -8
  89. package/package.json +1 -1
@@ -116,6 +116,7 @@ export declare const DeviceListEntry: z.ZodObject<{
116
116
  }>>;
117
117
  current: z.ZodBoolean;
118
118
  self: z.ZodBoolean;
119
+ away: z.ZodOptional<z.ZodLiteral<true>>;
119
120
  since: z.ZodOptional<z.ZodNumber>;
120
121
  unbound: z.ZodOptional<z.ZodObject<{
121
122
  at: z.ZodNumber;
@@ -220,6 +221,7 @@ export declare const LoginState: z.ZodDiscriminatedUnion<[z.ZodObject<{
220
221
  refused: "refused";
221
222
  declined: "declined";
222
223
  request_required: "request_required";
224
+ peer_outdated: "peer_outdated";
223
225
  rate_limited: "rate_limited";
224
226
  loop_guard: "loop_guard";
225
227
  too_large: "too_large";
@@ -369,6 +371,7 @@ export declare const DEVICE_METHODS: {
369
371
  }>>;
370
372
  current: z.ZodBoolean;
371
373
  self: z.ZodBoolean;
374
+ away: z.ZodOptional<z.ZodLiteral<true>>;
372
375
  since: z.ZodOptional<z.ZodNumber>;
373
376
  unbound: z.ZodOptional<z.ZodObject<{
374
377
  at: z.ZodNumber;
@@ -510,6 +513,7 @@ export declare const DEVICE_METHODS: {
510
513
  refused: "refused";
511
514
  declined: "declined";
512
515
  request_required: "request_required";
516
+ peer_outdated: "peer_outdated";
513
517
  rate_limited: "rate_limited";
514
518
  loop_guard: "loop_guard";
515
519
  too_large: "too_large";
@@ -2,8 +2,7 @@
2
2
  * The IPC methods a Jelly host needs (spec §8.2, §8.11; design §13.6, §13.10-§13.12), served in every deployment:
3
3
  *
4
4
  * - Agent tier: `daemon.health`, a cheap status with no secrets and no counts.
5
- * - Human tier: `agents.list` and `agents.read` (the person's view of their own agents' traffic on this device),
6
- * `notice.subscribe`, `notice.list` and `notice.ack` (notices in fixed categories), and the read-only preview
5
+ * - Human tier: `notice.subscribe`, `notice.list` and `notice.ack` (notices in fixed categories), and the read-only preview
7
6
  * `device.remove.preview`.
8
7
  *
9
8
  * Spread into `IPC_METHODS`; `HOST_SCOPE_METHODS` (in `ipc.ts`) is what a host-scope action grant allows.
@@ -77,7 +76,6 @@ export declare const Notice: z.ZodObject<{
77
76
  request: "request";
78
77
  alert: "alert";
79
78
  }>;
80
- conversation: z.ZodOptional<z.ZodString>;
81
79
  from: z.ZodOptional<z.ZodObject<{
82
80
  name: z.ZodString;
83
81
  email: z.ZodOptional<z.ZodString>;
@@ -128,9 +126,8 @@ export declare const Notice: z.ZodObject<{
128
126
  at: z.ZodNumber;
129
127
  }, z.core.$strip>;
130
128
  export type Notice = z.infer<typeof Notice>;
131
- /** What the person's badges count: unread lines in their conversations, and requests held for them. */
129
+ /** What the person's badges count: requests held for them. Conversation read state remains staged. */
132
130
  export declare const NoticeCounts: z.ZodObject<{
133
- unread: z.ZodNumber;
134
131
  requests: z.ZodNumber;
135
132
  }, z.core.$strip>;
136
133
  /** `daemon.health` (spec §8.2): the daemon's state, with no secrets and no counts. */
@@ -160,18 +157,6 @@ export declare const DaemonHealth: z.ZodObject<{
160
157
  storeSchema: z.ZodNumber;
161
158
  }, z.core.$strip>;
162
159
  export type DaemonHealth = z.infer<typeof DaemonHealth>;
163
- /** One local agent (a registered or kept session) and its traffic on this device. */
164
- export declare const AgentSummary: z.ZodObject<{
165
- agent: z.ZodString;
166
- conversations: z.ZodNumber;
167
- unread: z.ZodNumber;
168
- lastAt: z.ZodOptional<z.ZodNumber>;
169
- state: z.ZodEnum<{
170
- idle: "idle";
171
- busy: "busy";
172
- kept: "kept";
173
- }>;
174
- }, z.core.$strip>;
175
160
  export declare const JELLY_METHODS: {
176
161
  /**
177
162
  * Agent tier. A cheap status for a host that polls: the daemon's state, the relay, the directory, an alarm, and
@@ -205,92 +190,6 @@ export declare const JELLY_METHODS: {
205
190
  storeSchema: z.ZodNumber;
206
191
  }, z.core.$strip>;
207
192
  };
208
- /** Human tier. This person's local agents on this device, most recent first. Read-only. */
209
- readonly "agents.list": {
210
- readonly params: z.ZodObject<{}, z.core.$strict>;
211
- readonly result: z.ZodObject<{
212
- agents: z.ZodArray<z.ZodObject<{
213
- agent: z.ZodString;
214
- conversations: z.ZodNumber;
215
- unread: z.ZodNumber;
216
- lastAt: z.ZodOptional<z.ZodNumber>;
217
- state: z.ZodEnum<{
218
- idle: "idle";
219
- busy: "busy";
220
- kept: "kept";
221
- }>;
222
- }, z.core.$strip>>;
223
- }, z.core.$strip>;
224
- };
225
- /**
226
- * Human tier. One local agent's traffic: without `conversation`, the other agents it has mail or tasks with, most
227
- * recent first; with `conversation` (`agent:<person>/<agent>`), a page of its entries, as `conv.read` gives them to
228
- * the agent, latest first unless `before` names an entry. Changes no stage and sends no receipt. Peer text is
229
- * untrusted: a client cleans it for display.
230
- */
231
- readonly "agents.read": {
232
- readonly params: z.ZodObject<{
233
- agent: z.ZodString;
234
- conversation: z.ZodOptional<z.ZodString>;
235
- before: z.ZodOptional<z.ZodObject<{
236
- at: z.ZodNumber;
237
- id: z.ZodString;
238
- }, z.core.$strict>>;
239
- limit: z.ZodOptional<z.ZodNumber>;
240
- }, z.core.$strict>;
241
- readonly result: z.ZodDiscriminatedUnion<[z.ZodObject<{
242
- kind: z.ZodLiteral<"conversations">;
243
- conversations: z.ZodArray<z.ZodObject<{
244
- conversation: z.ZodString;
245
- unread: z.ZodNumber;
246
- lastAt: z.ZodNumber;
247
- }, z.core.$strip>>;
248
- }, z.core.$strip>, z.ZodObject<{
249
- kind: z.ZodLiteral<"entries">;
250
- conversation: z.ZodString;
251
- entries: z.ZodArray<z.ZodObject<{
252
- id: z.ZodString;
253
- kind: z.ZodEnum<{
254
- task: "task";
255
- mail: "mail";
256
- }>;
257
- direction: z.ZodEnum<{
258
- out: "out";
259
- in: "in";
260
- }>;
261
- peer: z.ZodString;
262
- at: z.ZodNumber;
263
- text: z.ZodOptional<z.ZodString>;
264
- taskId: z.ZodOptional<z.ZodString>;
265
- stage: z.ZodOptional<z.ZodEnum<{
266
- accepted: "accepted";
267
- relayed: "relayed";
268
- delivered: "delivered";
269
- held: "held";
270
- handed_to_agent: "handed_to_agent";
271
- read: "read";
272
- replied: "replied";
273
- rejected: "rejected";
274
- expired: "expired";
275
- }>>;
276
- role: z.ZodOptional<z.ZodEnum<{
277
- requester: "requester";
278
- executor: "executor";
279
- }>>;
280
- state: z.ZodOptional<z.ZodEnum<{
281
- TASK_STATE_SUBMITTED: "TASK_STATE_SUBMITTED";
282
- TASK_STATE_WORKING: "TASK_STATE_WORKING";
283
- TASK_STATE_COMPLETED: "TASK_STATE_COMPLETED";
284
- TASK_STATE_FAILED: "TASK_STATE_FAILED";
285
- TASK_STATE_CANCELED: "TASK_STATE_CANCELED";
286
- TASK_STATE_INPUT_REQUIRED: "TASK_STATE_INPUT_REQUIRED";
287
- TASK_STATE_REJECTED: "TASK_STATE_REJECTED";
288
- TASK_STATE_AUTH_REQUIRED: "TASK_STATE_AUTH_REQUIRED";
289
- }>>;
290
- }, z.core.$strip>>;
291
- more: z.ZodBoolean;
292
- }, z.core.$strip>], "kind">;
293
- };
294
193
  /**
295
194
  * Human tier; host scope in `deployment: "jelly"`. Replays the unacknowledged notices after `after` (all of them
296
195
  * without it), oldest first, as `notice` events on this connection, then sends each new one. With `lines`, a
@@ -319,7 +218,6 @@ export declare const JELLY_METHODS: {
319
218
  request: "request";
320
219
  alert: "alert";
321
220
  }>;
322
- conversation: z.ZodOptional<z.ZodString>;
323
221
  from: z.ZodOptional<z.ZodObject<{
324
222
  name: z.ZodString;
325
223
  email: z.ZodOptional<z.ZodString>;
@@ -370,7 +268,6 @@ export declare const JELLY_METHODS: {
370
268
  at: z.ZodNumber;
371
269
  }, z.core.$strip>>;
372
270
  counts: z.ZodObject<{
373
- unread: z.ZodNumber;
374
271
  requests: z.ZodNumber;
375
272
  }, z.core.$strip>;
376
273
  }, z.core.$strip>;
@@ -21,8 +21,8 @@ export type SessionKey = z.infer<typeof SessionKey>;
21
21
  */
22
22
  export declare const SendExpect: z.ZodEnum<{
23
23
  kept: "kept";
24
- next_turn: "next_turn";
25
24
  wake: "wake";
25
+ next_turn: "next_turn";
26
26
  next_prompt: "next_prompt";
27
27
  on_read: "on_read";
28
28
  offline: "offline";
@@ -52,45 +52,14 @@ export declare const DirectoryEntry: z.ZodObject<{
52
52
  self: z.ZodBoolean;
53
53
  expect: z.ZodOptional<z.ZodEnum<{
54
54
  kept: "kept";
55
- next_turn: "next_turn";
56
55
  wake: "wake";
56
+ next_turn: "next_turn";
57
57
  next_prompt: "next_prompt";
58
58
  on_read: "on_read";
59
59
  offline: "offline";
60
60
  }>>;
61
61
  }, z.core.$strip>;
62
62
  export type DirectoryEntry = z.infer<typeof DirectoryEntry>;
63
- /** Chat text, at most `LIMITS.chatChars` UTF-16 code units (`max` would count code points). */
64
- export declare const ChatText: z.ZodString;
65
- /**
66
- * A position in this machine's chat order (spec §6.8): every filed line and every chat change takes
67
- * the next one. Local: another machine numbers the same line differently. 0 is before the first.
68
- */
69
- export declare const ChatSeq: z.ZodNumber;
70
- export type ChatSeq = z.infer<typeof ChatSeq>;
71
- /** One transcript line (spec §6.8). `id` is the line's `messageId`, the same on every machine. */
72
- export declare const ChatLine: z.ZodObject<{
73
- id: z.ZodString;
74
- seq: z.ZodNumber;
75
- at: z.ZodNumber;
76
- person: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
77
- agent: z.ZodOptional<z.ZodString>;
78
- direction: z.ZodEnum<{
79
- out: "out";
80
- in: "in";
81
- }>;
82
- body: z.ZodString;
83
- thread: z.ZodOptional<z.ZodString>;
84
- state: z.ZodOptional<z.ZodEnum<{
85
- delivered: "delivered";
86
- held: "held";
87
- refused: "refused";
88
- sent: "sent";
89
- }>>;
90
- refused: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
91
- notice: z.ZodOptional<z.ZodLiteral<true>>;
92
- }, z.core.$strip>;
93
- export type ChatLine = z.infer<typeof ChatLine>;
94
63
  /** The other end of an item or a task: a person's device and, when an agent wrote it, the agent. */
95
64
  export declare const PeerRef: z.ZodObject<{
96
65
  address: z.ZodString;
@@ -104,12 +73,14 @@ export declare const InboxItem: z.ZodObject<{
104
73
  id: z.ZodString;
105
74
  key: z.ZodString;
106
75
  from: z.ZodObject<{
107
- address: z.ZodString;
108
76
  person: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
109
77
  agent: z.ZodOptional<z.ZodString>;
110
- device: z.ZodString;
111
- label: z.ZodString;
78
+ address: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
79
+ device: z.ZodOptional<z.ZodString>;
80
+ label: z.ZodOptional<z.ZodString>;
112
81
  }, z.core.$strip>;
82
+ cid: z.ZodOptional<z.ZodString>;
83
+ eventId: z.ZodOptional<z.ZodString>;
113
84
  kind: z.ZodEnum<{
114
85
  message: "message";
115
86
  task: "task";
@@ -142,8 +113,7 @@ export declare const InboxItem: z.ZodObject<{
142
113
  }, z.core.$strip>;
143
114
  export type InboxItem = z.infer<typeof InboxItem>;
144
115
  /**
145
- * A message this side sent to continue a task it requested (`msg.send` with `kind: "message"`
146
- * and the `taskId`), and how far it got, from this daemon's own delivery records (spec §6.3).
116
+ * A task continuation and its stage from this daemon's own delivery records (spec §6.3).
147
117
  */
148
118
  export declare const TaskFollowUp: z.ZodObject<{
149
119
  envelopeId: z.ZodString;
@@ -281,13 +251,12 @@ export declare const TaskRecord: z.ZodObject<{
281
251
  }, z.core.$strip>;
282
252
  export type TaskRecord = z.infer<typeof TaskRecord>;
283
253
  /**
284
- * Where a send went (`msg.send`, spec §8.2): an agent session `person/agent@label`, a person (a line
285
- * from an agent to them) or `#<channel>` (a post).
254
+ * Where a retained task envelope went: an agent session `person/agent@label`.
286
255
  */
287
- export declare const SendTarget: z.ZodUnion<readonly [z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodString]>, z.ZodString]>;
256
+ export declare const SendTarget: z.ZodString;
288
257
  export type SendTarget = z.infer<typeof SendTarget>;
289
258
  export declare const SendResult: z.ZodObject<{
290
- to: z.ZodUnion<readonly [z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodString]>, z.ZodString]>;
259
+ to: z.ZodString;
291
260
  envelopeId: z.ZodString;
292
261
  messageId: z.ZodString;
293
262
  taskId: z.ZodOptional<z.ZodString>;
@@ -315,6 +284,7 @@ export declare const SendResult: z.ZodObject<{
315
284
  refused: "refused";
316
285
  declined: "declined";
317
286
  request_required: "request_required";
287
+ peer_outdated: "peer_outdated";
318
288
  rate_limited: "rate_limited";
319
289
  loop_guard: "loop_guard";
320
290
  too_large: "too_large";
@@ -352,63 +322,11 @@ export declare const SendResult: z.ZodObject<{
352
322
  }>>;
353
323
  expect: z.ZodOptional<z.ZodEnum<{
354
324
  kept: "kept";
355
- next_turn: "next_turn";
356
325
  wake: "wake";
326
+ next_turn: "next_turn";
357
327
  next_prompt: "next_prompt";
358
328
  on_read: "on_read";
359
329
  offline: "offline";
360
330
  }>>;
361
331
  }, z.core.$strip>;
362
332
  export type SendResult = z.infer<typeof SendResult>;
363
- /** A place in a conversation page (`conv.read`): an entry's time and id. */
364
- export declare const ConvCursor: z.ZodObject<{
365
- at: z.ZodNumber;
366
- id: z.ZodString;
367
- }, z.core.$strict>;
368
- export type ConvCursor = z.infer<typeof ConvCursor>;
369
- /**
370
- * One entry of a conversation between a local session and one other session (spec §8.2
371
- * `conv.read`): mail either way, or a task either way. `text` is untrusted peer text for incoming
372
- * mail and for a task the other side asked for; clients frame it as data.
373
- */
374
- export declare const ConvEntry: z.ZodObject<{
375
- id: z.ZodString;
376
- kind: z.ZodEnum<{
377
- task: "task";
378
- mail: "mail";
379
- }>;
380
- direction: z.ZodEnum<{
381
- out: "out";
382
- in: "in";
383
- }>;
384
- peer: z.ZodString;
385
- at: z.ZodNumber;
386
- text: z.ZodOptional<z.ZodString>;
387
- taskId: z.ZodOptional<z.ZodString>;
388
- stage: z.ZodOptional<z.ZodEnum<{
389
- accepted: "accepted";
390
- relayed: "relayed";
391
- delivered: "delivered";
392
- held: "held";
393
- handed_to_agent: "handed_to_agent";
394
- read: "read";
395
- replied: "replied";
396
- rejected: "rejected";
397
- expired: "expired";
398
- }>>;
399
- role: z.ZodOptional<z.ZodEnum<{
400
- requester: "requester";
401
- executor: "executor";
402
- }>>;
403
- state: z.ZodOptional<z.ZodEnum<{
404
- TASK_STATE_SUBMITTED: "TASK_STATE_SUBMITTED";
405
- TASK_STATE_WORKING: "TASK_STATE_WORKING";
406
- TASK_STATE_COMPLETED: "TASK_STATE_COMPLETED";
407
- TASK_STATE_FAILED: "TASK_STATE_FAILED";
408
- TASK_STATE_CANCELED: "TASK_STATE_CANCELED";
409
- TASK_STATE_INPUT_REQUIRED: "TASK_STATE_INPUT_REQUIRED";
410
- TASK_STATE_REJECTED: "TASK_STATE_REJECTED";
411
- TASK_STATE_AUTH_REQUIRED: "TASK_STATE_AUTH_REQUIRED";
412
- }>>;
413
- }, z.core.$strip>;
414
- export type ConvEntry = z.infer<typeof ConvEntry>;