@joe-broadhead/messaging 0.7.0 → 0.7.1

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 (43) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/bin/messaging-mcp.js +649 -12
  3. package/dist/bin/messaging-relay.js +774 -20
  4. package/dist/bin/messaging.js +748 -15
  5. package/dist/bin/messagingd.js +785 -18
  6. package/dist/lib/modules/core/agent-tools.js +23 -4
  7. package/dist/lib/modules/core/conversation/context.js +80 -0
  8. package/dist/lib/modules/core/conversation/event.js +100 -0
  9. package/dist/lib/modules/core/conversation/ids.js +38 -0
  10. package/dist/lib/modules/core/conversation/link.js +35 -0
  11. package/dist/lib/modules/core/conversation/log.js +766 -0
  12. package/dist/lib/modules/core/conversation/ratchet.js +243 -0
  13. package/dist/lib/modules/core/conversation/seal.js +198 -0
  14. package/dist/lib/modules/core/index.js +10 -1
  15. package/dist/lib/modules/core/schema/common.js +56 -0
  16. package/dist/lib/modules/core/schema/conversation.js +292 -0
  17. package/dist/lib/modules/core/schema/errors.js +39 -0
  18. package/dist/lib/modules/core/schema/index.js +1 -0
  19. package/dist/lib/modules/core/testing.js +1 -0
  20. package/dist/lib/modules/core/version.js +1 -1
  21. package/dist/spec/messaging-v1.md +324 -6
  22. package/dist/types/core/agent-tools.d.ts +20 -2
  23. package/dist/types/core/conversation/context.d.ts +56 -0
  24. package/dist/types/core/conversation/event.d.ts +36 -0
  25. package/dist/types/core/conversation/ids.d.ts +18 -0
  26. package/dist/types/core/conversation/link.d.ts +16 -0
  27. package/dist/types/core/conversation/log.d.ts +142 -0
  28. package/dist/types/core/conversation/ratchet.d.ts +95 -0
  29. package/dist/types/core/conversation/seal.d.ts +47 -0
  30. package/dist/types/core/index.d.ts +8 -1
  31. package/dist/types/core/schema/common.d.ts +56 -0
  32. package/dist/types/core/schema/conversation.d.ts +1657 -0
  33. package/dist/types/core/schema/envelope.d.ts +6 -0
  34. package/dist/types/core/schema/errors.d.ts +38 -0
  35. package/dist/types/core/schema/index.d.ts +1 -0
  36. package/dist/types/core/schema/ipc/device.d.ts +6 -0
  37. package/dist/types/core/schema/ipc/shapes.d.ts +3 -0
  38. package/dist/types/core/schema/ipc/surfaces.d.ts +6 -0
  39. package/dist/types/core/schema/ipc.d.ts +15 -0
  40. package/dist/types/core/schema/relay.d.ts +12 -0
  41. package/dist/types/core/testing.d.ts +1 -0
  42. package/dist/types/core/version.d.ts +1 -1
  43. package/package.json +1 -1
@@ -429,6 +429,8 @@ export declare const ReceiptPayload: z.ZodObject<{
429
429
  binding_invalid: "binding_invalid";
430
430
  jelly_unavailable: "jelly_unavailable";
431
431
  log_conflict: "log_conflict";
432
+ conv_conflict: "conv_conflict";
433
+ stale_epoch: "stale_epoch";
432
434
  device_limit: "device_limit";
433
435
  admission_required: "admission_required";
434
436
  admission_invalid: "admission_invalid";
@@ -443,6 +445,7 @@ export declare const ReceiptPayload: z.ZodObject<{
443
445
  ticket_invalid: "ticket_invalid";
444
446
  daemon_unavailable: "daemon_unavailable";
445
447
  daemon_mismatch: "daemon_mismatch";
448
+ store_refused: "store_refused";
446
449
  internal: "internal";
447
450
  }>>;
448
451
  note: z.ZodOptional<z.ZodString>;
@@ -682,6 +685,8 @@ export declare const PAYLOAD_BY_TYPE: {
682
685
  binding_invalid: "binding_invalid";
683
686
  jelly_unavailable: "jelly_unavailable";
684
687
  log_conflict: "log_conflict";
688
+ conv_conflict: "conv_conflict";
689
+ stale_epoch: "stale_epoch";
685
690
  device_limit: "device_limit";
686
691
  admission_required: "admission_required";
687
692
  admission_invalid: "admission_invalid";
@@ -696,6 +701,7 @@ export declare const PAYLOAD_BY_TYPE: {
696
701
  ticket_invalid: "ticket_invalid";
697
702
  daemon_unavailable: "daemon_unavailable";
698
703
  daemon_mismatch: "daemon_mismatch";
704
+ store_refused: "store_refused";
699
705
  internal: "internal";
700
706
  }>>;
701
707
  note: z.ZodOptional<z.ZodString>;
@@ -28,6 +28,8 @@ export declare const ErrorCode: z.ZodEnum<{
28
28
  binding_invalid: "binding_invalid";
29
29
  jelly_unavailable: "jelly_unavailable";
30
30
  log_conflict: "log_conflict";
31
+ conv_conflict: "conv_conflict";
32
+ stale_epoch: "stale_epoch";
31
33
  device_limit: "device_limit";
32
34
  admission_required: "admission_required";
33
35
  admission_invalid: "admission_invalid";
@@ -42,9 +44,28 @@ export declare const ErrorCode: z.ZodEnum<{
42
44
  ticket_invalid: "ticket_invalid";
43
45
  daemon_unavailable: "daemon_unavailable";
44
46
  daemon_mismatch: "daemon_mismatch";
47
+ store_refused: "store_refused";
45
48
  internal: "internal";
46
49
  }>;
47
50
  export type ErrorCode = z.infer<typeof ErrorCode>;
51
+ /**
52
+ * The exit status of a messagingd or messaging-relay that refuses its store and changes nothing (spec §8.8): `EX_CONFIG`
53
+ * of sysexits(3), for either reason. messagingd also prints one stderr line,
54
+ * `messagingd: store_refused: <reason>: <why and how to start over>`. A client matches this status, the code and the
55
+ * reason, never the wording.
56
+ */
57
+ export declare const STORE_REFUSED_EXIT = 78;
58
+ /**
59
+ * Why a store is refused (spec §8.8):
60
+ * - `pre-reset`: it records no store generation, or another one. Starting over (moving the home aside) is the remedy.
61
+ * - `newer`: its `min_reader` is above this reader's schema: a newer messagingd wrote it. Upgrading is the remedy;
62
+ * moving the home aside would set a newer home aside.
63
+ */
64
+ export declare const StoreRefusedReason: z.ZodEnum<{
65
+ "pre-reset": "pre-reset";
66
+ newer: "newer";
67
+ }>;
68
+ export type StoreRefusedReason = z.infer<typeof StoreRefusedReason>;
48
69
  export declare const ErrorBody: z.ZodObject<{
49
70
  code: z.ZodEnum<{
50
71
  expired: "expired";
@@ -74,6 +95,8 @@ export declare const ErrorBody: z.ZodObject<{
74
95
  binding_invalid: "binding_invalid";
75
96
  jelly_unavailable: "jelly_unavailable";
76
97
  log_conflict: "log_conflict";
98
+ conv_conflict: "conv_conflict";
99
+ stale_epoch: "stale_epoch";
77
100
  device_limit: "device_limit";
78
101
  admission_required: "admission_required";
79
102
  admission_invalid: "admission_invalid";
@@ -88,6 +111,7 @@ export declare const ErrorBody: z.ZodObject<{
88
111
  ticket_invalid: "ticket_invalid";
89
112
  daemon_unavailable: "daemon_unavailable";
90
113
  daemon_mismatch: "daemon_mismatch";
114
+ store_refused: "store_refused";
91
115
  internal: "internal";
92
116
  }>;
93
117
  message: z.ZodString;
@@ -101,4 +125,18 @@ export declare class MessagingError extends Error {
101
125
  });
102
126
  toBody(): ErrorBody;
103
127
  }
128
+ /** `store_refused`, with its reason as a field: clients branch on `reason`, never on the message. */
129
+ export declare class StoreRefusedError extends MessagingError {
130
+ readonly reason: StoreRefusedReason;
131
+ constructor(reason: StoreRefusedReason, message: string, options?: {
132
+ cause?: unknown;
133
+ });
134
+ }
135
+ /** The stderr line of a messagingd that refuses its store: `messagingd: store_refused: <reason>: <text>`. */
136
+ export declare function storeRefusedLine(reason: StoreRefusedReason, text: string): string;
137
+ /**
138
+ * The reason on a messagingd refusal line, or undefined for any other line. Reads the tokens only; the text after
139
+ * them may change between releases.
140
+ */
141
+ export declare function storeRefusedReason(line: string): StoreRefusedReason | undefined;
104
142
  export declare function isMessagingError(value: unknown): value is MessagingError;
@@ -13,3 +13,4 @@ export * from "./directory-frames.js";
13
13
  export * from "./ipc.js";
14
14
  export * from "./ipc/device.js";
15
15
  export * from "./ipc/consent.js";
16
+ export * from "./conversation.js";
@@ -236,6 +236,8 @@ export declare const LoginState: z.ZodDiscriminatedUnion<[z.ZodObject<{
236
236
  binding_invalid: "binding_invalid";
237
237
  jelly_unavailable: "jelly_unavailable";
238
238
  log_conflict: "log_conflict";
239
+ conv_conflict: "conv_conflict";
240
+ stale_epoch: "stale_epoch";
239
241
  device_limit: "device_limit";
240
242
  admission_required: "admission_required";
241
243
  admission_invalid: "admission_invalid";
@@ -250,6 +252,7 @@ export declare const LoginState: z.ZodDiscriminatedUnion<[z.ZodObject<{
250
252
  ticket_invalid: "ticket_invalid";
251
253
  daemon_unavailable: "daemon_unavailable";
252
254
  daemon_mismatch: "daemon_mismatch";
255
+ store_refused: "store_refused";
253
256
  internal: "internal";
254
257
  }>;
255
258
  message: z.ZodString;
@@ -523,6 +526,8 @@ export declare const DEVICE_METHODS: {
523
526
  binding_invalid: "binding_invalid";
524
527
  jelly_unavailable: "jelly_unavailable";
525
528
  log_conflict: "log_conflict";
529
+ conv_conflict: "conv_conflict";
530
+ stale_epoch: "stale_epoch";
526
531
  device_limit: "device_limit";
527
532
  admission_required: "admission_required";
528
533
  admission_invalid: "admission_invalid";
@@ -537,6 +542,7 @@ export declare const DEVICE_METHODS: {
537
542
  ticket_invalid: "ticket_invalid";
538
543
  daemon_unavailable: "daemon_unavailable";
539
544
  daemon_mismatch: "daemon_mismatch";
545
+ store_refused: "store_refused";
540
546
  internal: "internal";
541
547
  }>;
542
548
  message: z.ZodString;
@@ -331,6 +331,8 @@ export declare const SendResult: z.ZodObject<{
331
331
  binding_invalid: "binding_invalid";
332
332
  jelly_unavailable: "jelly_unavailable";
333
333
  log_conflict: "log_conflict";
334
+ conv_conflict: "conv_conflict";
335
+ stale_epoch: "stale_epoch";
334
336
  device_limit: "device_limit";
335
337
  admission_required: "admission_required";
336
338
  admission_invalid: "admission_invalid";
@@ -345,6 +347,7 @@ export declare const SendResult: z.ZodObject<{
345
347
  ticket_invalid: "ticket_invalid";
346
348
  daemon_unavailable: "daemon_unavailable";
347
349
  daemon_mismatch: "daemon_mismatch";
350
+ store_refused: "store_refused";
348
351
  internal: "internal";
349
352
  }>>;
350
353
  expect: z.ZodOptional<z.ZodEnum<{
@@ -219,6 +219,8 @@ export declare const SURFACE_METHODS: {
219
219
  binding_invalid: "binding_invalid";
220
220
  jelly_unavailable: "jelly_unavailable";
221
221
  log_conflict: "log_conflict";
222
+ conv_conflict: "conv_conflict";
223
+ stale_epoch: "stale_epoch";
222
224
  device_limit: "device_limit";
223
225
  admission_required: "admission_required";
224
226
  admission_invalid: "admission_invalid";
@@ -233,6 +235,7 @@ export declare const SURFACE_METHODS: {
233
235
  ticket_invalid: "ticket_invalid";
234
236
  daemon_unavailable: "daemon_unavailable";
235
237
  daemon_mismatch: "daemon_mismatch";
238
+ store_refused: "store_refused";
236
239
  internal: "internal";
237
240
  }>>;
238
241
  expect: z.ZodOptional<z.ZodEnum<{
@@ -375,6 +378,8 @@ export declare const SURFACE_METHODS: {
375
378
  binding_invalid: "binding_invalid";
376
379
  jelly_unavailable: "jelly_unavailable";
377
380
  log_conflict: "log_conflict";
381
+ conv_conflict: "conv_conflict";
382
+ stale_epoch: "stale_epoch";
378
383
  device_limit: "device_limit";
379
384
  admission_required: "admission_required";
380
385
  admission_invalid: "admission_invalid";
@@ -389,6 +394,7 @@ export declare const SURFACE_METHODS: {
389
394
  ticket_invalid: "ticket_invalid";
390
395
  daemon_unavailable: "daemon_unavailable";
391
396
  daemon_mismatch: "daemon_mismatch";
397
+ store_refused: "store_refused";
392
398
  internal: "internal";
393
399
  }>>;
394
400
  note: z.ZodOptional<z.ZodString>;
@@ -294,6 +294,8 @@ export declare const IPC_METHODS: {
294
294
  binding_invalid: "binding_invalid";
295
295
  jelly_unavailable: "jelly_unavailable";
296
296
  log_conflict: "log_conflict";
297
+ conv_conflict: "conv_conflict";
298
+ stale_epoch: "stale_epoch";
297
299
  device_limit: "device_limit";
298
300
  admission_required: "admission_required";
299
301
  admission_invalid: "admission_invalid";
@@ -308,6 +310,7 @@ export declare const IPC_METHODS: {
308
310
  ticket_invalid: "ticket_invalid";
309
311
  daemon_unavailable: "daemon_unavailable";
310
312
  daemon_mismatch: "daemon_mismatch";
313
+ store_refused: "store_refused";
311
314
  internal: "internal";
312
315
  }>>;
313
316
  expect: z.ZodOptional<z.ZodEnum<{
@@ -445,6 +448,8 @@ export declare const IPC_METHODS: {
445
448
  binding_invalid: "binding_invalid";
446
449
  jelly_unavailable: "jelly_unavailable";
447
450
  log_conflict: "log_conflict";
451
+ conv_conflict: "conv_conflict";
452
+ stale_epoch: "stale_epoch";
448
453
  device_limit: "device_limit";
449
454
  admission_required: "admission_required";
450
455
  admission_invalid: "admission_invalid";
@@ -459,6 +464,7 @@ export declare const IPC_METHODS: {
459
464
  ticket_invalid: "ticket_invalid";
460
465
  daemon_unavailable: "daemon_unavailable";
461
466
  daemon_mismatch: "daemon_mismatch";
467
+ store_refused: "store_refused";
462
468
  internal: "internal";
463
469
  }>>;
464
470
  note: z.ZodOptional<z.ZodString>;
@@ -2515,6 +2521,8 @@ export declare const IPC_METHODS: {
2515
2521
  binding_invalid: "binding_invalid";
2516
2522
  jelly_unavailable: "jelly_unavailable";
2517
2523
  log_conflict: "log_conflict";
2524
+ conv_conflict: "conv_conflict";
2525
+ stale_epoch: "stale_epoch";
2518
2526
  device_limit: "device_limit";
2519
2527
  admission_required: "admission_required";
2520
2528
  admission_invalid: "admission_invalid";
@@ -2529,6 +2537,7 @@ export declare const IPC_METHODS: {
2529
2537
  ticket_invalid: "ticket_invalid";
2530
2538
  daemon_unavailable: "daemon_unavailable";
2531
2539
  daemon_mismatch: "daemon_mismatch";
2540
+ store_refused: "store_refused";
2532
2541
  internal: "internal";
2533
2542
  }>;
2534
2543
  message: z.ZodString;
@@ -2805,6 +2814,8 @@ export declare const IpcEvent: z.ZodDiscriminatedUnion<[z.ZodObject<{
2805
2814
  binding_invalid: "binding_invalid";
2806
2815
  jelly_unavailable: "jelly_unavailable";
2807
2816
  log_conflict: "log_conflict";
2817
+ conv_conflict: "conv_conflict";
2818
+ stale_epoch: "stale_epoch";
2808
2819
  device_limit: "device_limit";
2809
2820
  admission_required: "admission_required";
2810
2821
  admission_invalid: "admission_invalid";
@@ -2819,6 +2830,7 @@ export declare const IpcEvent: z.ZodDiscriminatedUnion<[z.ZodObject<{
2819
2830
  ticket_invalid: "ticket_invalid";
2820
2831
  daemon_unavailable: "daemon_unavailable";
2821
2832
  daemon_mismatch: "daemon_mismatch";
2833
+ store_refused: "store_refused";
2822
2834
  internal: "internal";
2823
2835
  }>>;
2824
2836
  }, z.core.$strip>, z.ZodObject<{
@@ -3052,6 +3064,8 @@ export declare const IpcEvent: z.ZodDiscriminatedUnion<[z.ZodObject<{
3052
3064
  binding_invalid: "binding_invalid";
3053
3065
  jelly_unavailable: "jelly_unavailable";
3054
3066
  log_conflict: "log_conflict";
3067
+ conv_conflict: "conv_conflict";
3068
+ stale_epoch: "stale_epoch";
3055
3069
  device_limit: "device_limit";
3056
3070
  admission_required: "admission_required";
3057
3071
  admission_invalid: "admission_invalid";
@@ -3066,6 +3080,7 @@ export declare const IpcEvent: z.ZodDiscriminatedUnion<[z.ZodObject<{
3066
3080
  ticket_invalid: "ticket_invalid";
3067
3081
  daemon_unavailable: "daemon_unavailable";
3068
3082
  daemon_mismatch: "daemon_mismatch";
3083
+ store_refused: "store_refused";
3069
3084
  internal: "internal";
3070
3085
  }>>;
3071
3086
  }, z.core.$strip>, z.ZodObject<{
@@ -84,6 +84,8 @@ export declare const NackFrame: z.ZodObject<{
84
84
  binding_invalid: "binding_invalid";
85
85
  jelly_unavailable: "jelly_unavailable";
86
86
  log_conflict: "log_conflict";
87
+ conv_conflict: "conv_conflict";
88
+ stale_epoch: "stale_epoch";
87
89
  device_limit: "device_limit";
88
90
  admission_required: "admission_required";
89
91
  admission_invalid: "admission_invalid";
@@ -98,6 +100,7 @@ export declare const NackFrame: z.ZodObject<{
98
100
  ticket_invalid: "ticket_invalid";
99
101
  daemon_unavailable: "daemon_unavailable";
100
102
  daemon_mismatch: "daemon_mismatch";
103
+ store_refused: "store_refused";
101
104
  internal: "internal";
102
105
  }>;
103
106
  message: z.ZodString;
@@ -285,6 +288,8 @@ export declare const ErrorFrame: z.ZodObject<{
285
288
  binding_invalid: "binding_invalid";
286
289
  jelly_unavailable: "jelly_unavailable";
287
290
  log_conflict: "log_conflict";
291
+ conv_conflict: "conv_conflict";
292
+ stale_epoch: "stale_epoch";
288
293
  device_limit: "device_limit";
289
294
  admission_required: "admission_required";
290
295
  admission_invalid: "admission_invalid";
@@ -299,6 +304,7 @@ export declare const ErrorFrame: z.ZodObject<{
299
304
  ticket_invalid: "ticket_invalid";
300
305
  daemon_unavailable: "daemon_unavailable";
301
306
  daemon_mismatch: "daemon_mismatch";
307
+ store_refused: "store_refused";
302
308
  internal: "internal";
303
309
  }>;
304
310
  message: z.ZodString;
@@ -360,6 +366,8 @@ export declare const RelayToClient: z.ZodDiscriminatedUnion<[z.ZodObject<{
360
366
  binding_invalid: "binding_invalid";
361
367
  jelly_unavailable: "jelly_unavailable";
362
368
  log_conflict: "log_conflict";
369
+ conv_conflict: "conv_conflict";
370
+ stale_epoch: "stale_epoch";
363
371
  device_limit: "device_limit";
364
372
  admission_required: "admission_required";
365
373
  admission_invalid: "admission_invalid";
@@ -374,6 +382,7 @@ export declare const RelayToClient: z.ZodDiscriminatedUnion<[z.ZodObject<{
374
382
  ticket_invalid: "ticket_invalid";
375
383
  daemon_unavailable: "daemon_unavailable";
376
384
  daemon_mismatch: "daemon_mismatch";
385
+ store_refused: "store_refused";
377
386
  internal: "internal";
378
387
  }>;
379
388
  message: z.ZodString;
@@ -556,6 +565,8 @@ export declare const RelayToClient: z.ZodDiscriminatedUnion<[z.ZodObject<{
556
565
  binding_invalid: "binding_invalid";
557
566
  jelly_unavailable: "jelly_unavailable";
558
567
  log_conflict: "log_conflict";
568
+ conv_conflict: "conv_conflict";
569
+ stale_epoch: "stale_epoch";
559
570
  device_limit: "device_limit";
560
571
  admission_required: "admission_required";
561
572
  admission_invalid: "admission_invalid";
@@ -570,6 +581,7 @@ export declare const RelayToClient: z.ZodDiscriminatedUnion<[z.ZodObject<{
570
581
  ticket_invalid: "ticket_invalid";
571
582
  daemon_unavailable: "daemon_unavailable";
572
583
  daemon_mismatch: "daemon_mismatch";
584
+ store_refused: "store_refused";
573
585
  internal: "internal";
574
586
  }>;
575
587
  message: z.ZodString;
@@ -7,6 +7,7 @@ export { encodeTicket } from "./roster.js";
7
7
  export { grantHash } from "./delegation.js";
8
8
  export { signJellyToken } from "./directory/jelly-issuer.js";
9
9
  export { jellyHostDouble, type JellyHostDouble } from "./jelly-host-double.js";
10
+ export { sealConvMetaWith, sealConvMsgWith, sealKeySharesWith, type ShareRandomness } from "./conversation/seal.js";
10
11
  /**
11
12
  * Narrows a result whose `kind` tells its shape (`item.read`, `conv.read`) to the expected kind, and
12
13
  * throws with both kinds named otherwise: `client.call("item.read", p).then(asKind("received"))`.
@@ -3,4 +3,4 @@
3
3
  * its IPC hello and a client compares it with its own (spec §8.2). A test keeps it equal to the
4
4
  * root package.json.
5
5
  */
6
- export declare const VERSION = "0.7.0";
6
+ export declare const VERSION = "0.7.1";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joe-broadhead/messaging",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "description": "Messaging: the relay, the per-machine daemon and its CLI, and the MCP server as bundled single files, plus the client libraries and the protocol spec. Zero dependencies.",
5
5
  "type": "module",
6
6
  "license": "MIT",