instar 1.3.385 → 1.3.387

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 (41) hide show
  1. package/README.md +1 -0
  2. package/dist/commands/server.d.ts.map +1 -1
  3. package/dist/commands/server.js +92 -1
  4. package/dist/commands/server.js.map +1 -1
  5. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  6. package/dist/core/PostUpdateMigrator.js +16 -0
  7. package/dist/core/PostUpdateMigrator.js.map +1 -1
  8. package/dist/core/types.d.ts +10 -0
  9. package/dist/core/types.d.ts.map +1 -1
  10. package/dist/core/types.js.map +1 -1
  11. package/dist/monitoring/A2ARedeliverySentinel.d.ts +82 -0
  12. package/dist/monitoring/A2ARedeliverySentinel.d.ts.map +1 -0
  13. package/dist/monitoring/A2ARedeliverySentinel.js +143 -0
  14. package/dist/monitoring/A2ARedeliverySentinel.js.map +1 -0
  15. package/dist/scaffold/templates.d.ts.map +1 -1
  16. package/dist/scaffold/templates.js +7 -0
  17. package/dist/scaffold/templates.js.map +1 -1
  18. package/dist/server/AgentServer.d.ts +2 -0
  19. package/dist/server/AgentServer.d.ts.map +1 -1
  20. package/dist/server/AgentServer.js +20 -0
  21. package/dist/server/AgentServer.js.map +1 -1
  22. package/dist/server/routes.d.ts +3 -0
  23. package/dist/server/routes.d.ts.map +1 -1
  24. package/dist/server/routes.js +81 -0
  25. package/dist/server/routes.js.map +1 -1
  26. package/dist/threadline/A2ADeliveryTracker.d.ts +151 -0
  27. package/dist/threadline/A2ADeliveryTracker.d.ts.map +1 -0
  28. package/dist/threadline/A2ADeliveryTracker.js +315 -0
  29. package/dist/threadline/A2ADeliveryTracker.js.map +1 -0
  30. package/dist/threadline/ListenerSessionManager.d.ts +15 -0
  31. package/dist/threadline/ListenerSessionManager.d.ts.map +1 -1
  32. package/dist/threadline/ListenerSessionManager.js +41 -0
  33. package/dist/threadline/ListenerSessionManager.js.map +1 -1
  34. package/package.json +1 -1
  35. package/src/data/builtin-manifest.json +64 -64
  36. package/src/scaffold/templates.ts +7 -0
  37. package/upgrades/1.3.386.md +58 -0
  38. package/upgrades/1.3.387.md +25 -0
  39. package/upgrades/side-effects/a2a-durable-delivery.md +165 -0
  40. package/upgrades/side-effects/a2a-redelivery-escalation.md +112 -0
  41. package/upgrades/1.3.385.md +0 -43
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-06-06T23:14:06.425Z",
5
- "instarVersion": "1.3.385",
4
+ "generatedAt": "2026-06-07T00:18:22.466Z",
5
+ "instarVersion": "1.3.387",
6
6
  "entryCount": 199,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -11,7 +11,7 @@
11
11
  "domain": "identity",
12
12
  "sourcePath": "src/core/PostUpdateMigrator.ts",
13
13
  "installedPath": ".instar/hooks/instar/session-start.sh",
14
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
14
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
15
15
  "since": "2025-01-01"
16
16
  },
17
17
  "hook:dangerous-command-guard": {
@@ -20,7 +20,7 @@
20
20
  "domain": "safety",
21
21
  "sourcePath": "src/core/PostUpdateMigrator.ts",
22
22
  "installedPath": ".instar/hooks/instar/dangerous-command-guard.sh",
23
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
23
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
24
24
  "since": "2025-01-01"
25
25
  },
26
26
  "hook:grounding-before-messaging": {
@@ -29,7 +29,7 @@
29
29
  "domain": "safety",
30
30
  "sourcePath": "src/core/PostUpdateMigrator.ts",
31
31
  "installedPath": ".instar/hooks/instar/grounding-before-messaging.sh",
32
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
32
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
33
33
  "since": "2025-01-01"
34
34
  },
35
35
  "hook:compaction-recovery": {
@@ -38,7 +38,7 @@
38
38
  "domain": "identity",
39
39
  "sourcePath": "src/core/PostUpdateMigrator.ts",
40
40
  "installedPath": ".instar/hooks/instar/compaction-recovery.sh",
41
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
41
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
42
42
  "since": "2025-01-01"
43
43
  },
44
44
  "hook:external-operation-gate": {
@@ -47,7 +47,7 @@
47
47
  "domain": "safety",
48
48
  "sourcePath": "src/core/PostUpdateMigrator.ts",
49
49
  "installedPath": ".instar/hooks/instar/external-operation-gate.js",
50
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
50
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
51
51
  "since": "2025-01-01"
52
52
  },
53
53
  "hook:deferral-detector": {
@@ -56,7 +56,7 @@
56
56
  "domain": "safety",
57
57
  "sourcePath": "src/core/PostUpdateMigrator.ts",
58
58
  "installedPath": ".instar/hooks/instar/deferral-detector.js",
59
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
59
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
60
60
  "since": "2025-01-01"
61
61
  },
62
62
  "hook:self-stop-guard": {
@@ -65,7 +65,7 @@
65
65
  "domain": "coherence",
66
66
  "sourcePath": "src/core/PostUpdateMigrator.ts",
67
67
  "installedPath": ".instar/hooks/instar/self-stop-guard.js",
68
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
68
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
69
69
  "since": "2025-01-01"
70
70
  },
71
71
  "hook:post-action-reflection": {
@@ -74,7 +74,7 @@
74
74
  "domain": "evolution",
75
75
  "sourcePath": "src/core/PostUpdateMigrator.ts",
76
76
  "installedPath": ".instar/hooks/instar/post-action-reflection.js",
77
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
77
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
78
78
  "since": "2025-01-01"
79
79
  },
80
80
  "hook:external-communication-guard": {
@@ -83,7 +83,7 @@
83
83
  "domain": "safety",
84
84
  "sourcePath": "src/core/PostUpdateMigrator.ts",
85
85
  "installedPath": ".instar/hooks/instar/external-communication-guard.js",
86
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
86
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
87
87
  "since": "2025-01-01"
88
88
  },
89
89
  "hook:scope-coherence-collector": {
@@ -92,7 +92,7 @@
92
92
  "domain": "coherence",
93
93
  "sourcePath": "src/core/PostUpdateMigrator.ts",
94
94
  "installedPath": ".instar/hooks/instar/scope-coherence-collector.js",
95
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
95
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
96
96
  "since": "2025-01-01"
97
97
  },
98
98
  "hook:scope-coherence-checkpoint": {
@@ -101,7 +101,7 @@
101
101
  "domain": "coherence",
102
102
  "sourcePath": "src/core/PostUpdateMigrator.ts",
103
103
  "installedPath": ".instar/hooks/instar/scope-coherence-checkpoint.js",
104
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
104
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
105
105
  "since": "2025-01-01"
106
106
  },
107
107
  "hook:free-text-guard": {
@@ -110,7 +110,7 @@
110
110
  "domain": "safety",
111
111
  "sourcePath": "src/core/PostUpdateMigrator.ts",
112
112
  "installedPath": ".instar/hooks/instar/free-text-guard.sh",
113
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
113
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
114
114
  "since": "2025-01-01"
115
115
  },
116
116
  "hook:claim-intercept": {
@@ -119,7 +119,7 @@
119
119
  "domain": "coherence",
120
120
  "sourcePath": "src/core/PostUpdateMigrator.ts",
121
121
  "installedPath": ".instar/hooks/instar/claim-intercept.js",
122
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
122
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
123
123
  "since": "2025-01-01"
124
124
  },
125
125
  "hook:claim-intercept-response": {
@@ -128,7 +128,7 @@
128
128
  "domain": "coherence",
129
129
  "sourcePath": "src/core/PostUpdateMigrator.ts",
130
130
  "installedPath": ".instar/hooks/instar/claim-intercept-response.js",
131
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
131
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
132
132
  "since": "2025-01-01"
133
133
  },
134
134
  "hook:stop-gate-router": {
@@ -137,7 +137,7 @@
137
137
  "domain": "safety",
138
138
  "sourcePath": "src/core/PostUpdateMigrator.ts",
139
139
  "installedPath": ".instar/hooks/instar/stop-gate-router.js",
140
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
140
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
141
141
  "since": "2025-01-01"
142
142
  },
143
143
  "hook:auto-approve-permissions": {
@@ -146,7 +146,7 @@
146
146
  "domain": "safety",
147
147
  "sourcePath": "src/core/PostUpdateMigrator.ts",
148
148
  "installedPath": ".instar/hooks/instar/auto-approve-permissions.js",
149
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
149
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
150
150
  "since": "2025-01-01"
151
151
  },
152
152
  "job:health-check": {
@@ -418,7 +418,7 @@
418
418
  "type": "route-group",
419
419
  "domain": "monitoring",
420
420
  "sourcePath": "src/server/routes.ts",
421
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
421
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
422
422
  "since": "2025-01-01"
423
423
  },
424
424
  "route-group:agents": {
@@ -426,7 +426,7 @@
426
426
  "type": "route-group",
427
427
  "domain": "sessions",
428
428
  "sourcePath": "src/server/routes.ts",
429
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
429
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
430
430
  "since": "2025-01-01"
431
431
  },
432
432
  "route-group:backups": {
@@ -434,7 +434,7 @@
434
434
  "type": "route-group",
435
435
  "domain": "operations",
436
436
  "sourcePath": "src/server/routes.ts",
437
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
437
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
438
438
  "since": "2025-01-01"
439
439
  },
440
440
  "route-group:git": {
@@ -442,7 +442,7 @@
442
442
  "type": "route-group",
443
443
  "domain": "coordination",
444
444
  "sourcePath": "src/server/routes.ts",
445
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
445
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
446
446
  "since": "2025-01-01"
447
447
  },
448
448
  "route-group:memory": {
@@ -450,7 +450,7 @@
450
450
  "type": "route-group",
451
451
  "domain": "memory",
452
452
  "sourcePath": "src/server/routes.ts",
453
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
453
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
454
454
  "since": "2025-01-01"
455
455
  },
456
456
  "route-group:semantic": {
@@ -458,7 +458,7 @@
458
458
  "type": "route-group",
459
459
  "domain": "memory",
460
460
  "sourcePath": "src/server/routes.ts",
461
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
461
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
462
462
  "since": "2025-01-01"
463
463
  },
464
464
  "route-group:status": {
@@ -466,7 +466,7 @@
466
466
  "type": "route-group",
467
467
  "domain": "monitoring",
468
468
  "sourcePath": "src/server/routes.ts",
469
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
469
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
470
470
  "since": "2025-01-01"
471
471
  },
472
472
  "route-group:capabilities": {
@@ -474,7 +474,7 @@
474
474
  "type": "route-group",
475
475
  "domain": "mapping",
476
476
  "sourcePath": "src/server/routes.ts",
477
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
477
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
478
478
  "since": "2025-01-01"
479
479
  },
480
480
  "route-group:project-map": {
@@ -482,7 +482,7 @@
482
482
  "type": "route-group",
483
483
  "domain": "mapping",
484
484
  "sourcePath": "src/server/routes.ts",
485
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
485
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
486
486
  "since": "2025-01-01"
487
487
  },
488
488
  "route-group:coherence": {
@@ -490,7 +490,7 @@
490
490
  "type": "route-group",
491
491
  "domain": "coherence",
492
492
  "sourcePath": "src/server/routes.ts",
493
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
493
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
494
494
  "since": "2025-01-01"
495
495
  },
496
496
  "route-group:topic-bindings": {
@@ -498,7 +498,7 @@
498
498
  "type": "route-group",
499
499
  "domain": "sessions",
500
500
  "sourcePath": "src/server/routes.ts",
501
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
501
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
502
502
  "since": "2025-01-01"
503
503
  },
504
504
  "route-group:context": {
@@ -506,7 +506,7 @@
506
506
  "type": "route-group",
507
507
  "domain": "context",
508
508
  "sourcePath": "src/server/routes.ts",
509
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
509
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
510
510
  "since": "2025-01-01"
511
511
  },
512
512
  "route-group:scope-coherence": {
@@ -514,7 +514,7 @@
514
514
  "type": "route-group",
515
515
  "domain": "coherence",
516
516
  "sourcePath": "src/server/routes.ts",
517
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
517
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
518
518
  "since": "2025-01-01"
519
519
  },
520
520
  "route-group:canonical-state": {
@@ -522,7 +522,7 @@
522
522
  "type": "route-group",
523
523
  "domain": "state",
524
524
  "sourcePath": "src/server/routes.ts",
525
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
525
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
526
526
  "since": "2025-01-01"
527
527
  },
528
528
  "route-group:ci": {
@@ -530,7 +530,7 @@
530
530
  "type": "route-group",
531
531
  "domain": "monitoring",
532
532
  "sourcePath": "src/server/routes.ts",
533
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
533
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
534
534
  "since": "2025-01-01"
535
535
  },
536
536
  "route-group:sessions": {
@@ -538,7 +538,7 @@
538
538
  "type": "route-group",
539
539
  "domain": "sessions",
540
540
  "sourcePath": "src/server/routes.ts",
541
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
541
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
542
542
  "since": "2025-01-01"
543
543
  },
544
544
  "route-group:jobs": {
@@ -546,7 +546,7 @@
546
546
  "type": "route-group",
547
547
  "domain": "scheduling",
548
548
  "sourcePath": "src/server/routes.ts",
549
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
549
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
550
550
  "since": "2025-01-01"
551
551
  },
552
552
  "route-group:skip-ledger": {
@@ -554,7 +554,7 @@
554
554
  "type": "route-group",
555
555
  "domain": "scheduling",
556
556
  "sourcePath": "src/server/routes.ts",
557
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
557
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
558
558
  "since": "2025-01-01"
559
559
  },
560
560
  "route-group:telegram": {
@@ -562,7 +562,7 @@
562
562
  "type": "route-group",
563
563
  "domain": "communication",
564
564
  "sourcePath": "src/server/routes.ts",
565
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
565
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
566
566
  "since": "2025-01-01"
567
567
  },
568
568
  "route-group:attention": {
@@ -570,7 +570,7 @@
570
570
  "type": "route-group",
571
571
  "domain": "communication",
572
572
  "sourcePath": "src/server/routes.ts",
573
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
573
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
574
574
  "since": "2025-01-01"
575
575
  },
576
576
  "route-group:relationships": {
@@ -578,7 +578,7 @@
578
578
  "type": "route-group",
579
579
  "domain": "relationships",
580
580
  "sourcePath": "src/server/routes.ts",
581
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
581
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
582
582
  "since": "2025-01-01"
583
583
  },
584
584
  "route-group:feedback": {
@@ -586,7 +586,7 @@
586
586
  "type": "route-group",
587
587
  "domain": "feedback",
588
588
  "sourcePath": "src/server/routes.ts",
589
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
589
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
590
590
  "since": "2025-01-01"
591
591
  },
592
592
  "route-group:updates": {
@@ -594,7 +594,7 @@
594
594
  "type": "route-group",
595
595
  "domain": "updates",
596
596
  "sourcePath": "src/server/routes.ts",
597
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
597
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
598
598
  "since": "2025-01-01"
599
599
  },
600
600
  "route-group:dispatches": {
@@ -602,7 +602,7 @@
602
602
  "type": "route-group",
603
603
  "domain": "dispatches",
604
604
  "sourcePath": "src/server/routes.ts",
605
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
605
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
606
606
  "since": "2025-01-01"
607
607
  },
608
608
  "route-group:quota": {
@@ -610,7 +610,7 @@
610
610
  "type": "route-group",
611
611
  "domain": "monitoring",
612
612
  "sourcePath": "src/server/routes.ts",
613
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
613
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
614
614
  "since": "2025-01-01"
615
615
  },
616
616
  "route-group:publishing": {
@@ -618,7 +618,7 @@
618
618
  "type": "route-group",
619
619
  "domain": "publishing",
620
620
  "sourcePath": "src/server/routes.ts",
621
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
621
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
622
622
  "since": "2025-01-01"
623
623
  },
624
624
  "route-group:private-views": {
@@ -626,7 +626,7 @@
626
626
  "type": "route-group",
627
627
  "domain": "publishing",
628
628
  "sourcePath": "src/server/routes.ts",
629
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
629
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
630
630
  "since": "2025-01-01"
631
631
  },
632
632
  "route-group:tunnel": {
@@ -634,7 +634,7 @@
634
634
  "type": "route-group",
635
635
  "domain": "networking",
636
636
  "sourcePath": "src/server/routes.ts",
637
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
637
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
638
638
  "since": "2025-01-01"
639
639
  },
640
640
  "route-group:events": {
@@ -642,7 +642,7 @@
642
642
  "type": "route-group",
643
643
  "domain": "networking",
644
644
  "sourcePath": "src/server/routes.ts",
645
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
645
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
646
646
  "since": "2025-01-01"
647
647
  },
648
648
  "route-group:evolution": {
@@ -650,7 +650,7 @@
650
650
  "type": "route-group",
651
651
  "domain": "evolution",
652
652
  "sourcePath": "src/server/routes.ts",
653
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
653
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
654
654
  "since": "2025-01-01"
655
655
  },
656
656
  "route-group:watchdog": {
@@ -658,7 +658,7 @@
658
658
  "type": "route-group",
659
659
  "domain": "monitoring",
660
660
  "sourcePath": "src/server/routes.ts",
661
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
661
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
662
662
  "since": "2025-01-01"
663
663
  },
664
664
  "route-group:topic-memory": {
@@ -666,7 +666,7 @@
666
666
  "type": "route-group",
667
667
  "domain": "memory",
668
668
  "sourcePath": "src/server/routes.ts",
669
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
669
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
670
670
  "since": "2025-01-01"
671
671
  },
672
672
  "route-group:state-sync": {
@@ -674,7 +674,7 @@
674
674
  "type": "route-group",
675
675
  "domain": "coordination",
676
676
  "sourcePath": "src/server/routes.ts",
677
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
677
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
678
678
  "since": "2025-01-01"
679
679
  },
680
680
  "route-group:intent": {
@@ -682,7 +682,7 @@
682
682
  "type": "route-group",
683
683
  "domain": "intent",
684
684
  "sourcePath": "src/server/routes.ts",
685
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
685
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
686
686
  "since": "2025-01-01"
687
687
  },
688
688
  "route-group:triage": {
@@ -690,7 +690,7 @@
690
690
  "type": "route-group",
691
691
  "domain": "safety",
692
692
  "sourcePath": "src/server/routes.ts",
693
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
693
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
694
694
  "since": "2025-01-01"
695
695
  },
696
696
  "route-group:operations": {
@@ -698,7 +698,7 @@
698
698
  "type": "route-group",
699
699
  "domain": "safety",
700
700
  "sourcePath": "src/server/routes.ts",
701
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
701
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
702
702
  "since": "2025-01-01"
703
703
  },
704
704
  "route-group:sentinel": {
@@ -706,7 +706,7 @@
706
706
  "type": "route-group",
707
707
  "domain": "safety",
708
708
  "sourcePath": "src/server/routes.ts",
709
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
709
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
710
710
  "since": "2025-01-01"
711
711
  },
712
712
  "route-group:trust": {
@@ -714,7 +714,7 @@
714
714
  "type": "route-group",
715
715
  "domain": "safety",
716
716
  "sourcePath": "src/server/routes.ts",
717
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
717
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
718
718
  "since": "2025-01-01"
719
719
  },
720
720
  "route-group:monitoring": {
@@ -722,7 +722,7 @@
722
722
  "type": "route-group",
723
723
  "domain": "monitoring",
724
724
  "sourcePath": "src/server/routes.ts",
725
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
725
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
726
726
  "since": "2025-01-01"
727
727
  },
728
728
  "route-group:commitments": {
@@ -730,7 +730,7 @@
730
730
  "type": "route-group",
731
731
  "domain": "commitments",
732
732
  "sourcePath": "src/server/routes.ts",
733
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
733
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
734
734
  "since": "2025-01-01"
735
735
  },
736
736
  "route-group:episodes": {
@@ -738,7 +738,7 @@
738
738
  "type": "route-group",
739
739
  "domain": "memory",
740
740
  "sourcePath": "src/server/routes.ts",
741
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
741
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
742
742
  "since": "2025-01-01"
743
743
  },
744
744
  "route-group:messages": {
@@ -746,7 +746,7 @@
746
746
  "type": "route-group",
747
747
  "domain": "coordination",
748
748
  "sourcePath": "src/server/routes.ts",
749
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
749
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
750
750
  "since": "2025-01-01"
751
751
  },
752
752
  "route-group:system-reviews": {
@@ -754,7 +754,7 @@
754
754
  "type": "route-group",
755
755
  "domain": "monitoring",
756
756
  "sourcePath": "src/server/routes.ts",
757
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
757
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
758
758
  "since": "2025-01-01"
759
759
  },
760
760
  "route-group:machine-mesh": {
@@ -770,7 +770,7 @@
770
770
  "type": "route-group",
771
771
  "domain": "security",
772
772
  "sourcePath": "src/server/routes.ts",
773
- "contentHash": "3eae324993a4fc5e7942437ec88b1bc94e6125b009fe06c7471d4347dd20b58d",
773
+ "contentHash": "7569713fc8f4f6a3bb9400bc1b5907d6de329c338ab9309ade25bca9b72a2363",
774
774
  "since": "2025-01-01"
775
775
  },
776
776
  "cli:init": {
@@ -1506,7 +1506,7 @@
1506
1506
  "type": "subsystem",
1507
1507
  "domain": "server",
1508
1508
  "sourcePath": "src/server/AgentServer.ts",
1509
- "contentHash": "4b3de410b5b3d64bf7545f9323689637b9b83ecb42a43c6e5d7c41ce81a340f6",
1509
+ "contentHash": "c01cfb05a7caab04511cfc2bf92247879981a848e0e49724f164e543f0b9189b",
1510
1510
  "since": "2025-01-01"
1511
1511
  },
1512
1512
  "subsystem:session-manager": {
@@ -1538,7 +1538,7 @@
1538
1538
  "type": "subsystem",
1539
1539
  "domain": "updates",
1540
1540
  "sourcePath": "src/core/PostUpdateMigrator.ts",
1541
- "contentHash": "c883b594a53aff0e7dbde016bea9b754c147579d52e01c6f78cb0b97aff6b8da",
1541
+ "contentHash": "8d2952d0097dacb8077f2cf4dc3e48ee95de7aacf3517ca1d36aad156a3a4a7b",
1542
1542
  "since": "2025-01-01"
1543
1543
  },
1544
1544
  "subsystem:scheduler": {
@@ -1591,6 +1591,13 @@ I have these Threadline tools for managing agent-to-agent communication:
1591
1591
 
1592
1592
  If a peer's messages to me never land (their side shows \`sent=true\`, my \`logs/server.log\` shows no "Accepted message from <them>"), the usual cause is a **wrong address**. The authoritative "what address reaches me" value is my **routing fingerprint** — the one my relay registers with (\`logs/server.log\`: \`Threadline: relay connected (fingerprint: …)\`) and the one I publish at \`GET /threadline/health\` (\`fingerprint\` field) and in \`threadline/agent-info.json\`. These are sourced from my canonical \`identity.json\`, so they always agree. Hand peers THAT fingerprint — never the legacy \`publicKey\` hex from an old keypair. If \`/threadline/health\` returns no \`fingerprint\`, I have no resolvable routing identity yet (none on disk, or it's locked-encrypted) and am simply not relay-discoverable until I do.
1593
1593
 
1594
+ ### Is my channel to a peer alive? (A2A delivery health)
1595
+
1596
+ Agent-to-agent delivery is tracked durably so a message can't silently die out. Every message I send to a peer starts \`awaiting-ack\` and flips to \`acked\` when the peer processes it — and a **reply on the thread counts as that acknowledgement** (so it works with any peer, no upgrade needed). "Is my channel to <peer> alive?" is a read, not a guess:
1597
+ - All peers: \`curl http://localhost:${port}/threadline/peers/health\` → \`{ peers: [{ peerFp, peerName, lastSentAt, lastAckedAt, lastInboundAt, pendingCount, oldestPendingAgeMs, stale }], staleCount }\`
1598
+ - One peer: \`curl http://localhost:${port}/threadline/peers/<fingerprint>/health\`
1599
+ - \`stale: true\` (or a non-zero \`staleCount\`) means a message has been awaiting acknowledgement past the threshold — the peer may be dark or unreachable; check the relay and the peer's address before assuming they're ignoring me. **Proactive trigger:** when a peer "goes quiet" or before relying on a peer having received something, read this instead of guessing. Read-only — never gates a send.
1600
+
1594
1601
  ### The "Threadline" hub topic — notifications + "open this"
1595
1602
 
1596
1603
  Threadline activity NEVER spawns a new Telegram topic per event. Notices route one of two ways:
@@ -0,0 +1,58 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ Added the durable spine of agent-to-agent delivery robustness (A2A-DURABLE-DELIVERY-SPEC.md, issue #939, CMT-1143) — PR1 of "communications never just die out."
9
+
10
+ A new SQLite component, A2ADeliveryTracker (per-agent, mirrors the MessageProcessingLedger substrate), records every outbound agent-to-agent message's delivery lifecycle (awaiting-ack → acked → escalated/failed) plus a per-peer inbound-liveness clock. It is wired recording-only (it never gates a send) into both relay-send paths and BOTH inbound accept points: the cross-machine relay-ingest in server.ts (where the peer's real fingerprint is in scope) and the same-machine relay-agent route. A reply on a thread is treated as an implicit processed-ack, keyed on threadId so it is robust to the local-name vs relay-fingerprint identity asymmetry (the bug a multi-agent convergence review caught before merge: the ack had been keyed by the wrong identifier and would never have fired in production despite green tests). Two read-only routes expose peer health: GET /threadline/peers/health and GET /threadline/peers/:fp/health. AgentServer self-constructs the tracker from stateDir so the routes are alive on every entry path.
11
+
12
+ Redelivery, the explicit ack control-message, and the escalation sentinel are PR2. <!-- tracked: #939 -->
13
+
14
+ Quota-aware placement is meant to route work away from a rate-limited machine.
15
+ But each machine only ever knew its OWN quota: a peer's quota state rides the
16
+ session-status response (the peer's own capacity already includes it), yet the
17
+ receive side parsed it away — the exact same narrowing bug that previously
18
+ dropped the commitments advert (#931). So the router could avoid placing onto a
19
+ rate-limited LOCAL machine but never onto a rate-limited PEER — which is the
20
+ original EXO failure (the laptop placing work onto a rate-limited Mini).
21
+
22
+ The peer-capacity parse + the PeerPresencePuller now carry `quotaState` through
23
+ to the pool registry. Absent from an older peer = treated as not blocked
24
+ (fail-open, unchanged).
25
+
26
+ ## What to Tell Your User
27
+
28
+ You now have a durable way to know whether your messages to another agent actually got through. Every message you send to another agent is tracked until it is confirmed, and a reply counts as that confirmation — so a message can no longer silently vanish with everyone assuming it was delivered. You can ask whether your channel to a specific agent is alive, and the answer comes from a real record instead of a guess: when you last reached them, when they last confirmed, and whether anything is stuck waiting. Automatic retries and an alert when an agent goes dark are coming in the next piece. This is internal plumbing — nothing for you to turn on.
29
+
30
+ If one of your machines hits its usage limit, the other machine now actually
31
+ knows and stops sending new work to it — instead of finding out the hard way.
32
+
33
+ - audience: agent-only
34
+ - maturity: stable
35
+
36
+ ## Summary of New Capabilities
37
+
38
+ - Durable per-peer delivery tracking for agent-to-agent messages (sent, confirmed, stuck, escalated).
39
+ - A reply on a conversation thread automatically confirms the prior message — works with any peer, no upgrade needed.
40
+ - A read-only peer-health view answering "is my channel to this agent alive?" — last sent, last confirmed, last heard-from, how many are pending, and a stale flag.
41
+ - Recording-only: it cannot block or alter a message; if it failed, sending is unchanged.
42
+
43
+ - `PeerCapacity.quotaState` carried from the session-status response through
44
+ `fetchPeerCapacity` and `PeerPresencePuller` into the pool registry.
45
+ - `GET /pool` now shows a peer's `quotaState`, not just the local machine's.
46
+ - Pairs with finding A1 (the collector that produces the data now runs on
47
+ lifeline-driven agents).
48
+
49
+ ## Evidence
50
+
51
+ The convergence-caught wiring bug: outbound rows were keyed by the peer's fingerprint, but the inbound accept point keyed the implicit-ack by the sender's display name (local transport) and was wired only on the same-machine path — so the ack never fired for the real cross-machine case despite a green test suite. Reproduced and pinned by a new round-trip wiring-integrity test (tests/integration/a2a-delivery-wiring.test.ts): before the fix, an inbound reply on a thread left the pre-recorded outbound message at awaiting-ack; after the fix (ack keyed on threadId + the cross-machine relay-ingest path wired with the real fingerprint), the same round-trip flips it to acked. 31 tests across all three tiers; tsc clean; pre-commit lints clean.
52
+
53
+ - `tests/unit/peer-presence-puller.test.ts` (+2): a peer quotaState propagates
54
+ into the recorded heartbeat; an old peer omitting it records no quotaState
55
+ (fail-open). 13/13 in file incl. the existing wiring suite.
56
+ - Live (pre-fix, v1.3.384): laptop `/pool` shows its own `quotaState:{blocked:false}`
57
+ but the Mini's stays `null` after 5+ minutes despite the Mini's `/quota`
58
+ reading `status:ok`.
@@ -0,0 +1,25 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ Added the active-recovery layer of "communications never just die out" (A2A-DURABLE-DELIVERY-SPEC §4, issue #939, CMT-1143) — the follow-on to the durable delivery tracker shipped in v1.3.386.
9
+
10
+ `src/monitoring/A2ARedeliverySentinel.ts` sweeps the delivery tracker's overdue work-list on a cadence: each unacknowledged agent-to-agent message still under the attempt cap is re-sent with exponential backoff (the body recovered from the canonical outbox via the new `ListenerSessionManager.readCanonicalOutboxEntry`, re-emitted through the relay client); once attempts are exhausted, it raises ONE aggregated attention item per dark peer (P17 — never one per message). Wired in `server.ts` mirroring the `CollaborationRedriveEngine` block, gated on the new `monitoring.a2aRedelivery` config (ships OFF). Recording-and-sending only — no blocking authority; escalate-once is structural (an escalated message leaves the overdue work-list). The explicit `a2a-ack` control message (spec §3 Layer B) remains a tracked follow-on; the implicit ack-via-reply (PR1) plus this sentinel already cover the no-reply case.
11
+
12
+ ## What to Tell Your User
13
+
14
+ When you message another agent and it goes unanswered, the system now tries to fix it before bothering you: it quietly re-sends the message a few times with growing pauses, and only if the other agent still hasn't acknowledged after several tries does it raise a single, clear alert that the peer has gone dark — one alert per peer, never a flood. It can't invent or alter a message (it only re-sends what you actually sent, and only what it can recover), and it can't interfere with normal sending. This ships turned off; enable it when you want automatic recovery for agent-to-agent delivery.
15
+
16
+ ## Summary of New Capabilities
17
+
18
+ - Automatic redelivery of unacknowledged agent-to-agent messages, with exponential backoff and a per-sweep cap.
19
+ - One aggregated "this peer has gone dark" alert per peer after retries are exhausted (never one per message).
20
+ - A reply on the thread still counts as acknowledgement (from the prior release), so successful conversations never trigger redelivery.
21
+ - Ships off; recording-and-sending only — it can never block or alter a send.
22
+
23
+ ## Evidence
24
+
25
+ Before: an agent-to-agent message that went unacknowledged had no recovery path — it sat in the tracker as `awaiting-ack` indefinitely, and a peer going dark was only visible by reading the peer-health surface. After: the sentinel re-sends it with backoff and, on exhaustion, surfaces one operator-visible escalation per dark peer. Pinned by a real-outbox wiring-integrity test (`tests/integration/a2a-redelivery-wiring.test.ts`): a recorded+outboxed message is recovered by id and re-sent via a captured relay; a message absent from the outbox is left for escalation rather than fabricated. 14 tests across both files; `tsc` clean; no-silent-fallbacks at baseline (461); docs-coverage green on the merge state.