@seat-mesh/daemon 1.0.2 → 1.0.3

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 (121) hide show
  1. package/dist/ack/ack-open.d.ts +5 -0
  2. package/dist/ack/ack-open.d.ts.map +1 -0
  3. package/dist/ack/ack-open.js +86 -0
  4. package/dist/ack/ack-open.js.map +1 -0
  5. package/dist/ack/ack-sweep.d.ts +14 -0
  6. package/dist/ack/ack-sweep.d.ts.map +1 -0
  7. package/dist/ack/ack-sweep.js +186 -0
  8. package/dist/ack/ack-sweep.js.map +1 -0
  9. package/dist/ack/ack-watch.d.ts +13 -0
  10. package/dist/ack/ack-watch.d.ts.map +1 -0
  11. package/dist/ack/ack-watch.js +46 -0
  12. package/dist/ack/ack-watch.js.map +1 -0
  13. package/dist/border/border-paint.d.ts +24 -1
  14. package/dist/border/border-paint.d.ts.map +1 -1
  15. package/dist/border/border-paint.js +207 -82
  16. package/dist/border/border-paint.js.map +1 -1
  17. package/dist/border/border-paint.test.d.ts +2 -0
  18. package/dist/border/border-paint.test.d.ts.map +1 -0
  19. package/dist/border/border-paint.test.js +58 -0
  20. package/dist/border/border-paint.test.js.map +1 -0
  21. package/dist/connectivity/connectivity-recovery.d.ts +10 -2
  22. package/dist/connectivity/connectivity-recovery.d.ts.map +1 -1
  23. package/dist/connectivity/connectivity-recovery.js +54 -33
  24. package/dist/connectivity/connectivity-recovery.js.map +1 -1
  25. package/dist/connectivity/connectivity-recovery.test.js +7 -1
  26. package/dist/connectivity/connectivity-recovery.test.js.map +1 -1
  27. package/dist/connectivity/oc-resume-broadcast.d.ts +20 -0
  28. package/dist/connectivity/oc-resume-broadcast.d.ts.map +1 -0
  29. package/dist/connectivity/oc-resume-broadcast.js +74 -0
  30. package/dist/connectivity/oc-resume-broadcast.js.map +1 -0
  31. package/dist/connectivity/oc-resume-broadcast.test.d.ts +2 -0
  32. package/dist/connectivity/oc-resume-broadcast.test.d.ts.map +1 -0
  33. package/dist/connectivity/oc-resume-broadcast.test.js +9 -0
  34. package/dist/connectivity/oc-resume-broadcast.test.js.map +1 -0
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +1 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/inject/compose-gate.d.ts +7 -0
  40. package/dist/inject/compose-gate.d.ts.map +1 -1
  41. package/dist/inject/compose-gate.js +46 -2
  42. package/dist/inject/compose-gate.js.map +1 -1
  43. package/dist/inject/compose-gate.test.js +20 -1
  44. package/dist/inject/compose-gate.test.js.map +1 -1
  45. package/dist/inject/inject-delivery.d.ts.map +1 -1
  46. package/dist/inject/inject-delivery.js +7 -3
  47. package/dist/inject/inject-delivery.js.map +1 -1
  48. package/dist/inject/inject-delivery.test.js +2 -0
  49. package/dist/inject/inject-delivery.test.js.map +1 -1
  50. package/dist/inject/pane-hold.d.ts +4 -0
  51. package/dist/inject/pane-hold.d.ts.map +1 -0
  52. package/dist/inject/pane-hold.js +30 -0
  53. package/dist/inject/pane-hold.js.map +1 -0
  54. package/dist/mesh-inbox-server.js +223 -19
  55. package/dist/mesh-inbox-server.js.map +1 -1
  56. package/dist/mesh-inbox-supervisor.js +2 -2
  57. package/dist/mesh-inbox-supervisor.js.map +1 -1
  58. package/dist/notify/notify-act-ui.d.ts +9 -2
  59. package/dist/notify/notify-act-ui.d.ts.map +1 -1
  60. package/dist/notify/notify-act-ui.js +110 -30
  61. package/dist/notify/notify-act-ui.js.map +1 -1
  62. package/dist/notify/notify-act.d.ts +14 -2
  63. package/dist/notify/notify-act.d.ts.map +1 -1
  64. package/dist/notify/notify-act.js +44 -23
  65. package/dist/notify/notify-act.js.map +1 -1
  66. package/dist/notify/notify-act.test.js +11 -0
  67. package/dist/notify/notify-act.test.js.map +1 -1
  68. package/dist/notify/simple-markdown.d.ts +6 -0
  69. package/dist/notify/simple-markdown.d.ts.map +1 -0
  70. package/dist/notify/simple-markdown.js +74 -0
  71. package/dist/notify/simple-markdown.js.map +1 -0
  72. package/dist/notify/simple-markdown.test.d.ts +2 -0
  73. package/dist/notify/simple-markdown.test.d.ts.map +1 -0
  74. package/dist/notify/simple-markdown.test.js +15 -0
  75. package/dist/notify/simple-markdown.test.js.map +1 -0
  76. package/dist/orchestrator/mesh-orchestrator.d.ts +1 -0
  77. package/dist/orchestrator/mesh-orchestrator.d.ts.map +1 -1
  78. package/dist/orchestrator/mesh-orchestrator.js +89 -163
  79. package/dist/orchestrator/mesh-orchestrator.js.map +1 -1
  80. package/dist/peer/peer-backlog.d.ts +1 -1
  81. package/dist/peer/peer-backlog.d.ts.map +1 -1
  82. package/dist/peer/peer-backlog.js +52 -34
  83. package/dist/peer/peer-backlog.js.map +1 -1
  84. package/dist/peer/peer-bulk-drain.d.ts +18 -0
  85. package/dist/peer/peer-bulk-drain.d.ts.map +1 -0
  86. package/dist/peer/peer-bulk-drain.js +254 -0
  87. package/dist/peer/peer-bulk-drain.js.map +1 -0
  88. package/dist/peer/peer-skip.test.js +2 -2
  89. package/dist/peer/peer-skip.test.js.map +1 -1
  90. package/dist/peer/peer-target-resolve.d.ts +1 -0
  91. package/dist/peer/peer-target-resolve.d.ts.map +1 -1
  92. package/dist/peer/peer-target-resolve.js +17 -6
  93. package/dist/peer/peer-target-resolve.js.map +1 -1
  94. package/dist/store/create-queue-store.d.ts +1 -0
  95. package/dist/store/create-queue-store.d.ts.map +1 -1
  96. package/dist/store/create-queue-store.js.map +1 -1
  97. package/dist/store/jsonl-store.d.ts +32 -1
  98. package/dist/store/jsonl-store.d.ts.map +1 -1
  99. package/dist/store/jsonl-store.js +108 -1
  100. package/dist/store/jsonl-store.js.map +1 -1
  101. package/dist/store/sqlite-store.d.ts +22 -1
  102. package/dist/store/sqlite-store.d.ts.map +1 -1
  103. package/dist/store/sqlite-store.js +115 -1
  104. package/dist/store/sqlite-store.js.map +1 -1
  105. package/dist/store/target-jsonl.d.ts +31 -0
  106. package/dist/store/target-jsonl.d.ts.map +1 -0
  107. package/dist/store/target-jsonl.js +76 -0
  108. package/dist/store/target-jsonl.js.map +1 -0
  109. package/dist/store/target-jsonl.test.d.ts +2 -0
  110. package/dist/store/target-jsonl.test.d.ts.map +1 -0
  111. package/dist/store/target-jsonl.test.js +37 -0
  112. package/dist/store/target-jsonl.test.js.map +1 -0
  113. package/dist/target/target-fire.d.ts +22 -0
  114. package/dist/target/target-fire.d.ts.map +1 -0
  115. package/dist/target/target-fire.js +86 -0
  116. package/dist/target/target-fire.js.map +1 -0
  117. package/package.json +3 -2
  118. package/static/ui/decide.html +66 -0
  119. package/static/ui/index.html +68 -0
  120. package/static/ui/targets.css +119 -0
  121. package/static/ui/targets.js +186 -0
@@ -1 +1 @@
1
- {"version":3,"file":"notify-act.js","sourceRoot":"","sources":["../../src/notify/notify-act.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notify-act.js","sourceRoot":"","sources":["../../src/notify/notify-act.ts"],"names":[],"mappings":"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"}
@@ -25,5 +25,16 @@ describe("notify-act registry", () => {
25
25
  expect(result.ok).toBe(true);
26
26
  expect(logs.some((l) => l.includes("NOTIFY-ACT ping"))).toBe(true);
27
27
  });
28
+ it("registerCard returns infoUrl and getCard until expiry", () => {
29
+ const reg = createNotifyActRegistry();
30
+ const links = reg.register([
31
+ { label: "Yes", type: "ping", params: {} },
32
+ { label: "No", type: "ping", params: {} },
33
+ ], 300, "http://127.0.0.1:31670");
34
+ const card = reg.registerCard({ title: "Ship?", body: "Blue button ok?", links }, 300, "http://127.0.0.1:31670");
35
+ expect(card.infoUrl).toContain("/act/card/");
36
+ expect(reg.getCard(card.id)?.title).toBe("Ship?");
37
+ expect(reg.getCard(card.id)?.links).toHaveLength(2);
38
+ });
28
39
  });
29
40
  //# sourceMappingURL=notify-act.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notify-act.test.js","sourceRoot":"","sources":["../../src/notify/notify-act.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,GAAG,GAAG,uBAAuB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CACxB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAC7C,GAAG,EACH,wBAAwB,CACzB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE5C,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAI,EAAE;YAC1C,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAW;YACnF,KAAK;YACL,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACxB,cAAc,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"notify-act.test.js","sourceRoot":"","sources":["../../src/notify/notify-act.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Tiny safe markdown → HTML for seatmesh Info cards (no deps).
3
+ * Supports headings, lists, bold/italic, links, images (incl. data URIs), paragraphs.
4
+ */
5
+ export declare function renderSimpleMarkdown(src: string): string;
6
+ //# sourceMappingURL=simple-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-markdown.d.ts","sourceRoot":"","sources":["../../src/notify/simple-markdown.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyDxD"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Tiny safe markdown → HTML for seatmesh Info cards (no deps).
3
+ * Supports headings, lists, bold/italic, links, images (incl. data URIs), paragraphs.
4
+ */
5
+ export function renderSimpleMarkdown(src) {
6
+ const text = src.replace(/\r\n/g, "\n").trim();
7
+ if (!text)
8
+ return "";
9
+ const lines = text.split("\n");
10
+ const out = [];
11
+ let i = 0;
12
+ let inUl = false;
13
+ const flushUl = () => {
14
+ if (inUl) {
15
+ out.push("</ul>");
16
+ inUl = false;
17
+ }
18
+ };
19
+ while (i < lines.length) {
20
+ const line = lines[i] ?? "";
21
+ const trimmed = line.trim();
22
+ if (!trimmed) {
23
+ flushUl();
24
+ i++;
25
+ continue;
26
+ }
27
+ const heading = /^(#{1,3})\s+(.+)$/.exec(trimmed);
28
+ if (heading) {
29
+ flushUl();
30
+ const level = heading[1].length;
31
+ out.push(`<h${level}>${inline(heading[2])}</h${level}>`);
32
+ i++;
33
+ continue;
34
+ }
35
+ if (/^[-*]\s+/.test(trimmed)) {
36
+ if (!inUl) {
37
+ out.push("<ul>");
38
+ inUl = true;
39
+ }
40
+ out.push(`<li>${inline(trimmed.replace(/^[-*]\s+/, ""))}</li>`);
41
+ i++;
42
+ continue;
43
+ }
44
+ flushUl();
45
+ // paragraph: gather until blank
46
+ const chunk = [trimmed];
47
+ i++;
48
+ while (i < lines.length && lines[i].trim() && !/^(#{1,3})\s+/.test(lines[i].trim()) && !/^[-*]\s+/.test(lines[i].trim())) {
49
+ chunk.push(lines[i].trim());
50
+ i++;
51
+ }
52
+ out.push(`<p>${inline(chunk.join(" "))}</p>`);
53
+ }
54
+ flushUl();
55
+ return out.join("\n");
56
+ }
57
+ function escapeHtml(s) {
58
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
59
+ }
60
+ function escapeAttr(s) {
61
+ return escapeHtml(s).replace(/"/g, "&quot;");
62
+ }
63
+ function inline(s) {
64
+ let t = escapeHtml(s);
65
+ // images ![alt](url) — allow http(s) and data:
66
+ t = t.replace(/!\[([^\]]*)\]\((data:[^)\s]+|https?:[^)\s]+)\)/g, (_m, alt, url) => `<img src="${escapeAttr(url)}" alt="${escapeAttr(alt)}" class="md-img" />`);
67
+ // links [text](url)
68
+ t = t.replace(/\[([^\]]+)\]\((https?:[^)\s]+)\)/g, (_m, label, url) => `<a href="${escapeAttr(url)}" target="_blank" rel="noopener">${label}</a>`);
69
+ t = t.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>");
70
+ t = t.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g, "<em>$1</em>");
71
+ t = t.replace(/`([^`]+)`/g, "<code>$1</code>");
72
+ return t;
73
+ }
74
+ //# sourceMappingURL=simple-markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-markdown.js","sourceRoot":"","sources":["../../src/notify/simple-markdown.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,IAAI,GAAG,KAAK,CAAC;IAEjB,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,IAAI,GAAG,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;YACV,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;YAC1D,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjB,IAAI,GAAG,IAAI,CAAC;YACd,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAChE,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,OAAO,EAAE,CAAC;QACV,gCAAgC;QAChC,MAAM,KAAK,GAAa,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,EAAE,CAAC;QACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5H,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC,EAAE,CAAC;QACN,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,EAAE,CAAC;IACV,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,+CAA+C;IAC/C,CAAC,GAAG,CAAC,CAAC,OAAO,CACX,iDAAiD,EACjD,CAAC,EAAE,EAAE,GAAW,EAAE,GAAW,EAAE,EAAE,CAC/B,aAAa,UAAU,CAAC,GAAG,CAAC,UAAU,UAAU,CAAC,GAAG,CAAC,qBAAqB,CAC7E,CAAC;IACF,oBAAoB;IACpB,CAAC,GAAG,CAAC,CAAC,OAAO,CACX,mCAAmC,EACnC,CAAC,EAAE,EAAE,KAAa,EAAE,GAAW,EAAE,EAAE,CACjC,YAAY,UAAU,CAAC,GAAG,CAAC,oCAAoC,KAAK,MAAM,CAC7E,CAAC;IACF,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;IACzD,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAC/C,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=simple-markdown.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-markdown.test.d.ts","sourceRoot":"","sources":["../../src/notify/simple-markdown.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { renderSimpleMarkdown } from "./simple-markdown.js";
3
+ describe("renderSimpleMarkdown", () => {
4
+ it("renders headings lists and bold", () => {
5
+ const html = renderSimpleMarkdown("## Hi\n\n- one\n- two\n\n**bold** ok");
6
+ expect(html).toContain("<h2>Hi</h2>");
7
+ expect(html).toContain("<li>one</li>");
8
+ expect(html).toContain("<strong>bold</strong>");
9
+ });
10
+ it("renders data-uri images", () => {
11
+ const html = renderSimpleMarkdown("![x](data:image/png;base64,aaa)");
12
+ expect(html).toContain('<img src="data:image/png;base64,aaa"');
13
+ });
14
+ });
15
+ //# sourceMappingURL=simple-markdown.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-markdown.test.js","sourceRoot":"","sources":["../../src/notify/simple-markdown.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,oBAAoB,CAAC,sCAAsC,CAAC,CAAC;QAC1E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,oBAAoB,CAAC,iCAAiC,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -12,6 +12,7 @@ export interface MeshOrchestratorCtx {
12
12
  minisWindow: string;
13
13
  log: (line: string) => void;
14
14
  ocLimitedPaneIds: Set<string>;
15
+ connectPaneIds?: Set<string>;
15
16
  proxyDownActive?: boolean;
16
17
  paneOps?: PaneOpsDrainCtx;
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/mesh-orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAqCvE,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAehF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AA0BpF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAwCD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAGzD;AAiDD,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,GAAG,EAAE,mBAAmB,GAAG,eAAe,CAQxE;AAkBD,wBAAgB,aAAa,CAAC,GAAG,EAAE,mBAAmB,GAAG,eAAe,CA0KvE;AAkFD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAwRhE;AAMD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,mBAAmB,GAAG,eAAe,CAwB/E;AAED,2EAA2E;AAC3E,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CA4BnG"}
1
+ {"version":3,"file":"mesh-orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/mesh-orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAwCvE,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAiBhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAepF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAuDD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAGzD;AAsFD,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,GAAG,EAAE,mBAAmB,GAAG,eAAe,CAQxE;AAeD,wBAAgB,aAAa,CAAC,GAAG,EAAE,mBAAmB,GAAG,eAAe,CAiCvE;AAkFD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,CA6RhE;AAMD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,mBAAmB,GAAG,eAAe,CA0B/E;AAED,2EAA2E;AAC3E,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgCnG"}
@@ -1,24 +1,28 @@
1
- import { chatRoomConfigForLoaded, formatCompactSeat, formatGenericCheckback, formatRoomCallCheckback, formatRoomCommsCheckback, isRoomCallExpect, lastInboundRoomFrom, listRoomMessages, meshInboxContinueLead, meshInboxDigestBlock, meshInboxDigestIncomplete, loadBalanceVendorContract, contractsDirFor, hubLockActive, isManagerKind, isSecretaryKind, meshInboxBalanceLeadTick, meshInboxBalanceStatus, parseRoomCommsExpect, resolveAgentId, } from "@seat-mesh/core";
1
+ import { chatRoomConfigForLoaded, formatCheckbackCancelHint, formatCompactSeat, formatGenericCheckback, formatPeerBulkDigest, formatRoomCallCheckback, formatRoomCommsCheckback, isRoomCallExpect, lastInboundRoomFrom, listRoomMessages, meshInboxContinueLead, meshInboxDigestBlock, meshInboxDigestIncomplete, loadBalanceVendorContract, contractsDirFor, isManagerKind, isSecretaryKind, meshInboxBalanceLeadTick, meshInboxBalanceStatus, parseRoomCommsExpect, resolveAgentId, takePeerBulkBatch, } from "@seat-mesh/core";
2
2
  import { buildMiniCampaignDigest, capturePaneSnapshot, coordPaneForRole, meshManagerPane, meshSecretaryPane, paneMetaForPane, readSeatSnapshot, handleCoordExpectDue, parseCoordExpect, runBalanceAutoActions, runBalanceTick, runSuperviseTick, } from "@seat-mesh/tmux";
3
- import { paintMeshBorders, paintMeshBordersAsync, } from "../border/border-paint.js";
3
+ import { paintMeshBorders, paintMeshBordersAsync, repaintMeshPaneBorder, } from "../border/border-paint.js";
4
+ import { fireDueTargets } from "../target/target-fire.js";
4
5
  import { deliverToPane } from "../inject/inject-delivery.js";
5
6
  import { ccLimitRetryFingerprintFromExpect, meshInboxCcLimitRetryContinue, paneMatchesCcLimitFingerprint, } from "../connectivity/cc-limit-retry.js";
6
7
  import { isInboxDelivered } from "../store/create-queue-store.js";
7
8
  import { drainPaneOpsOnce } from "../inbox/pane-ops-drain.js";
8
- import { armRecipientCheckbackAfterPeer } from "../peer/peer-comms-checkback.js";
9
9
  import { deferCheckbackAfterFailedFire, sortDueCheckbackIndices, } from "../checkback/checkback-fire.js";
10
- import { isAckClassPeer, parkPeerToBacklog, pendingPeerRows, promotePeerBacklog, shouldBacklogPeerHold, } from "../peer/peer-backlog.js";
11
- import { markPeerRowSkipped, shouldSkipDeliveredColdStart, shouldSkipDuplicateColdStartResummon, shouldSkipGlobalWorkerRoomPing, shouldSkipManagerStatusRoomPing, isThinRoomUnseenPing, } from "../peer/peer-skip.js";
10
+ import { pendingPeerRows, promotePeerBacklog } from "../peer/peer-backlog.js";
11
+ import { drainPeerPaneBulk, refreshAndGroupPeers } from "../peer/peer-bulk-drain.js";
12
12
  import { deliveryHoldForPane } from "../inbox/delivery-hold.js";
13
- import { refreshPeerTargetPane } from "../peer/peer-target-resolve.js";
14
13
  import { evaluateInboxOverload } from "../inbox/inbox-overload.js";
15
- import { markColdStartDelivered } from "@seat-mesh/tmux";
14
+ import { ackSweepTick, openAckForDeliveredInbox, } from "../ack/ack-sweep.js";
15
+ import { notePaneDeliveryHold } from "../inject/pane-hold.js";
16
16
  function borderConnectivity(ctx) {
17
17
  return {
18
18
  proxyDownActive: ctx.proxyDownActive === true,
19
19
  ocLimitedPaneIds: ctx.ocLimitedPaneIds,
20
+ connectPaneIds: ctx.connectPaneIds ?? new Set(),
20
21
  };
21
22
  }
23
+ function repaintPaneBanner(ctx, paneId, label) {
24
+ repaintMeshPaneBorder(ctx.registry, ctx.store, paneId, borderConnectivity(ctx), isSecretaryKind(label), label, ctx.store.stateDir, undefined, ctx.loaded);
25
+ }
22
26
  function gateDelivery(ctx, paneId, opts = {}) {
23
27
  const hold = deliveryHoldForPane(ctx, paneId, opts);
24
28
  if (hold.hold)
@@ -46,46 +50,79 @@ export function isAckClassInbox(row) {
46
50
  const msg = String(row.msg ?? "").trim();
47
51
  return /^(ACK|FYI|STAND-?BY|BUSY|MCP-?SYNCED)\b/i.test(msg);
48
52
  }
53
+ function inboxLaneFrom(row) {
54
+ const from = String(row.from ?? "").trim();
55
+ const slot = row.slot != null ? String(row.slot) : "";
56
+ if (from === "secretary" || from === "manager" || slot === "secretary" || slot === "manager") {
57
+ return from || slot;
58
+ }
59
+ if (/^\d+$/.test(slot))
60
+ return `slot-${slot}`;
61
+ return from || slot || "unknown";
62
+ }
49
63
  function drainInboxLaneOnce(ctx, lane) {
50
64
  const rows = ctx.store.readInbox();
51
- const row = rows.find((r) => {
65
+ const pending = rows.filter((r) => {
52
66
  if (r.resolved || isInboxDelivered(r))
53
67
  return false;
54
68
  const ack = isAckClassInbox(r);
55
69
  return lane === "secretary" ? ack : !ack;
56
70
  });
57
- if (!row)
71
+ if (!pending.length)
58
72
  return { attempted: 0, delivered: 0, held: 0 };
59
- if (row.sent && !row.sentAt) {
60
- ctx.log(`INBOX forge-reset id=${row.id} (sent:true without sentAt/deliverPane)`);
61
- row.sent = false;
73
+ for (const row of pending) {
74
+ if (row.sent && !row.sentAt) {
75
+ ctx.log(`INBOX forge-reset id=${row.id} (sent:true without sentAt/deliverPane)`);
76
+ row.sent = false;
77
+ }
62
78
  }
63
79
  const secPane = meshSecretaryPane(ctx.session, ctx.baseWindow);
64
80
  const mgrPane = meshManagerPane(ctx.session, ctx.baseWindow);
65
81
  const targetPane = lane === "secretary" ? secPane : mgrPane;
66
82
  if (!targetPane)
67
83
  return { attempted: 0, delivered: 0, held: 0 };
68
- const payload = ctx.store.formatInboxInject(row, lane);
84
+ const { batch } = takePeerBulkBatch(pending);
69
85
  const gate = gateDelivery(ctx, targetPane);
70
86
  if (gate.blocked) {
71
- ctx.log(`INBOX held id=${row.id} lane=${lane} reason=${gate.reason}`);
87
+ notePaneDeliveryHold(targetPane, gate.reason ?? "hold");
88
+ ctx.log(`INBOX held id=${batch[0].id} lane=${lane} reason=${gate.reason}`);
72
89
  return { attempted: 1, delivered: 0, held: 1 };
73
90
  }
74
- const result = deliverToPane(targetPane, payload, ctx.registry, { loaded: ctx.loaded,
75
- workspace: ctx.loaded.workspace });
91
+ const useBulk = batch.length > 1;
92
+ const payload = useBulk
93
+ ? formatPeerBulkDigest({
94
+ seat: lane,
95
+ items: batch.map((r) => ({
96
+ from: inboxLaneFrom(r),
97
+ body: ctx.store.formatInboxInject(r, lane),
98
+ })),
99
+ more: Math.max(0, pending.length - batch.length),
100
+ })
101
+ : ctx.store.formatInboxInject(batch[0], lane);
102
+ const result = deliverToPane(targetPane, payload, ctx.registry, {
103
+ loaded: ctx.loaded,
104
+ workspace: ctx.loaded.workspace,
105
+ });
76
106
  if (!result.ok) {
77
- ctx.log(`INBOX held id=${row.id} lane=${lane} reason=${result.reason}`);
107
+ notePaneDeliveryHold(targetPane, result.reason);
108
+ ctx.log(`INBOX held id=${batch[0].id} lane=${lane} reason=${result.reason}`);
78
109
  return { attempted: 1, delivered: 0, held: 1 };
79
110
  }
80
111
  const at = new Date().toISOString();
81
- row.sent = true;
82
- row.sentAt = at;
83
- row.deliveredTo = lane === "secretary" ? "secretary" : "manager";
84
- row.deliverPane = targetPane;
85
- row.deliverMode = result.mode;
112
+ for (const row of batch) {
113
+ row.sent = true;
114
+ row.sentAt = at;
115
+ row.deliveredTo = lane === "secretary" ? "secretary" : "manager";
116
+ row.deliverPane = targetPane;
117
+ row.deliverMode = result.mode;
118
+ openAckForDeliveredInbox(ctx, row, lane, targetPane);
119
+ }
86
120
  ctx.store.writeInbox(rows);
87
- ctx.log(`INBOX inject id=${row.id} lane=${lane} slot=${row.slot ?? "-"} to=${row.deliveredTo} provider=${result.providerId} mode=${result.mode} verified=${result.verified}`);
88
- return { attempted: 1, delivered: 1, held: 0 };
121
+ ctx.log(useBulk
122
+ ? `INBOX inject bulk=${batch.length} lane=${lane} provider=${result.providerId} mode=${result.mode} verified=${result.verified}`
123
+ : `INBOX inject id=${batch[0].id} lane=${lane} slot=${batch[0].slot ?? "-"} to=${batch[0].deliveredTo} provider=${result.providerId} mode=${result.mode} verified=${result.verified}`);
124
+ repaintPaneBanner(ctx, targetPane, lane === "secretary" ? "secretary" : "manager");
125
+ return { attempted: 1, delivered: batch.length, held: 0 };
89
126
  }
90
127
  /** Harness parity: secretary ACK lane + manager substance lane each poll tick. */
91
128
  export function drainInboxOnce(ctx) {
@@ -97,8 +134,6 @@ export function drainInboxOnce(ctx) {
97
134
  held: sec.held + mgr.held,
98
135
  };
99
136
  }
100
- /** Permanent skip only — empty seats / no_provider must backlog until a CLI loads. */
101
- const PEER_SKIP_REASONS = new Set(["no_snapshot"]);
102
137
  const PEER_KIND_PRIORITY = {
103
138
  prompt: 0,
104
139
  remind: 1,
@@ -123,134 +158,18 @@ export function drainPeerOnce(ctx) {
123
158
  let attempted = 0;
124
159
  let delivered = 0;
125
160
  let held = 0;
126
- for (const row of pending) {
127
- if (row.sent && !row.sentAt) {
128
- ctx.log(`PEER forge-reset id=${row.id} (sent:true without proof)`);
129
- row.sent = false;
130
- }
131
- const { paneId: livePane, rerouted } = refreshPeerTargetPane(ctx.loaded, row);
132
- if (rerouted) {
133
- ctx.log(`PEER reroute id=${row.id.slice(0, 8)} ${row.targetLabel} ${row.targetPane}->${livePane}`);
134
- row.targetPane = livePane;
135
- const all = ctx.store.readPeer();
136
- const ri = all.findIndex((r) => r.id === row.id);
137
- if (ri >= 0) {
138
- all[ri].targetPane = livePane;
139
- ctx.store.writePeer(all);
140
- }
141
- }
142
- if (shouldSkipDeliveredColdStart(row)) {
143
- markPeerRowSkipped(ctx.store, row);
144
- if (row.fromSlot === "mesh-cold-start") {
145
- markColdStartDelivered(ctx.loaded, row.targetPane);
146
- }
147
- ctx.log(`PEER skip id=${row.id.slice(0, 8)} -> ${row.targetLabel} reason=cold-start-already-delivered`);
148
- continue;
149
- }
150
- if (shouldSkipDuplicateColdStartResummon(row, ctx.loaded)) {
151
- markPeerRowSkipped(ctx.store, row);
152
- ctx.log(`PEER skip id=${row.id.slice(0, 8)} -> ${row.targetLabel} reason=cold-start-resummon-dup`);
153
- continue;
161
+ /** One substance paste per pane per tick — DIGEST folds ≤5 into that paste. */
162
+ const injectedThisTick = new Set();
163
+ const { byPane, held: heldRefresh } = refreshAndGroupPeers(ctx, pending);
164
+ held += heldRefresh;
165
+ for (const [paneId, paneRows] of byPane) {
166
+ const r = drainPeerPaneBulk(ctx, paneId, paneRows, gateDelivery, injectedThisTick);
167
+ attempted += r.attempted;
168
+ delivered += r.delivered;
169
+ held += r.held;
170
+ if (r.delivered > 0) {
171
+ repaintPaneBanner(ctx, paneId, paneRows[0].targetLabel || "");
154
172
  }
155
- if (shouldSkipGlobalWorkerRoomPing(row)) {
156
- markPeerRowSkipped(ctx.store, row);
157
- ctx.log(`PEER skip id=${row.id} -> ${row.targetLabel} reason=global-worker-thin-fyi`);
158
- continue;
159
- }
160
- if (shouldSkipManagerStatusRoomPing(row)) {
161
- markPeerRowSkipped(ctx.store, row);
162
- ctx.log(`PEER skip id=${row.id.slice(0, 8)} -> ${row.targetLabel} reason=manager-status-room`);
163
- continue;
164
- }
165
- if (hubLockActive(ctx.loaded.workspace) &&
166
- isAckClassPeer(row.msg) &&
167
- (isManagerKind(row.targetLabel) || isSecretaryKind(row.targetLabel))) {
168
- markPeerRowSkipped(ctx.store, row);
169
- ctx.log(`PEER skip id=${row.id.slice(0, 8)} -> ${row.targetLabel} reason=hub-lock`);
170
- continue;
171
- }
172
- const isColdStart = row.fromSlot === "mesh-cold-start";
173
- const gate = gateDelivery(ctx, row.targetPane, { isColdStart });
174
- if (gate.blocked) {
175
- if (isThinRoomUnseenPing(row)) {
176
- markPeerRowSkipped(ctx.store, row);
177
- ctx.log(`PEER skip id=${row.id.slice(0, 8)} -> ${row.targetLabel} reason=thin-room-busy:${gate.reason}`);
178
- continue;
179
- }
180
- ctx.log(`PEER held id=${row.id.slice(0, 8)} -> ${row.targetLabel} reason=${gate.reason}`);
181
- held++;
182
- continue;
183
- }
184
- attempted++;
185
- const roomPing = row.kind === "room";
186
- const thinRoomPing = roomPing && /\[mesh-inbox-room\]/.test(row.msg);
187
- const toManager = isManagerKind(row.targetLabel) ||
188
- row.targetLabel === "master" ||
189
- isManagerKind(paneMetaForPane(row.targetPane)?.role ?? "");
190
- const lightweight = isAckClassPeer(row.msg) || roomPing;
191
- const result = deliverToPane(row.targetPane, row.msg, ctx.registry, {
192
- lightweight,
193
- // Verify cursor-agent pastes — skipVerify hid the pane_input_off inject drop.
194
- // OpenCode/claude still skip inside deliverToPane when provider needs it.
195
- // Thin room ledger pings bypass coord idle-settle (manager/manager-b/secretary) —
196
- // except humanCoTyped panes (profile layout.base.humanCoTyped), which never get that bypass.
197
- roomPing: thinRoomPing || (roomPing && !toManager),
198
- loaded: ctx.loaded,
199
- workspace: ctx.loaded.workspace,
200
- });
201
- if (!result.ok) {
202
- if (PEER_SKIP_REASONS.has(result.reason)) {
203
- const rows = ctx.store.readPeer();
204
- const i = rows.findIndex((r) => r.id === row.id);
205
- if (i >= 0) {
206
- rows[i].sent = true;
207
- rows[i].sentAt = new Date().toISOString();
208
- rows[i].deliverPane = "skipped";
209
- rows[i].deliverMode = "idle";
210
- ctx.store.writePeer(rows);
211
- }
212
- if (isColdStart) {
213
- markColdStartDelivered(ctx.loaded, row.targetPane);
214
- }
215
- ctx.log(`PEER skip id=${row.id} -> ${row.targetLabel} reason=${result.reason}`);
216
- continue;
217
- }
218
- if (shouldBacklogPeerHold(result.reason, row.msg)) {
219
- if (isThinRoomUnseenPing(row)) {
220
- markPeerRowSkipped(ctx.store, row);
221
- ctx.log(`PEER skip id=${row.id.slice(0, 8)} -> ${row.targetLabel} reason=thin-room-no-backlog:${result.reason}`);
222
- continue;
223
- }
224
- parkPeerToBacklog(ctx.store, row, result.reason, ctx.log);
225
- continue;
226
- }
227
- ctx.log(`PEER held id=${row.id} reason=${result.reason}`);
228
- held++;
229
- continue;
230
- }
231
- const rows = ctx.store.readPeer();
232
- const i = rows.findIndex((r) => r.id === row.id);
233
- if (i >= 0) {
234
- const at = new Date().toISOString();
235
- rows[i].sent = true;
236
- rows[i].sentAt = at;
237
- rows[i].deliverPane = row.targetPane;
238
- rows[i].deliverMode = result.mode;
239
- rows[i].injectedPane = row.targetPane;
240
- rows[i].injectedAt = at;
241
- ctx.store.writePeer(rows);
242
- }
243
- const from = row.kind === "room"
244
- ? row.fromSlot
245
- : row.kind === "prompt" || row.kind === "remind"
246
- ? row.fromSlot
247
- : `slot-${row.fromSlot}`;
248
- ctx.log(`PEER inject ${row.kind} -> ${row.targetLabel} from ${from} provider=${result.providerId} mode=${result.mode}`);
249
- if (isColdStart) {
250
- markColdStartDelivered(ctx.loaded, row.targetPane);
251
- }
252
- armRecipientCheckbackAfterPeer(ctx.store, ctx.loaded, row);
253
- delivered++;
254
173
  }
255
174
  return { attempted, delivered, held };
256
175
  }
@@ -438,7 +357,7 @@ export function fireDueCheckbacks(ctx) {
438
357
  continue;
439
358
  }
440
359
  const meta = pane ? paneMetaForPane(pane) : null;
441
- const role = meta?.role ?? "worker";
360
+ const role = meta?.role || "plain";
442
361
  const leadRole = isManagerKind(role) ? role : null;
443
362
  const msg = leadRole
444
363
  ? meshInboxCcLimitRetryContinue(leadRole)
@@ -474,8 +393,9 @@ export function fireDueCheckbacks(ctx) {
474
393
  ctx.log(`coord-expect met target=${parsed?.target ?? "?"} hub=${parsed?.hub ?? "?"}`);
475
394
  continue;
476
395
  }
477
- const msg = `[mesh-inbox] intent=checkback-verify manager | Check: ${row.expect.slice(0, 100)} — ` +
478
- `${outcome.retried ? "re-assigned" : "stale"} (${outcome.reason}); nudge ${parsed?.target ?? "lead"}`;
396
+ const msg = `manager | Check: ${row.expect.slice(0, 100)} — ` +
397
+ `${outcome.retried ? "re-assigned" : "stale"} (${outcome.reason}); nudge ${parsed?.target ?? "lead"}\n` +
398
+ formatCheckbackCancelHint(row.id);
479
399
  const r = deliverToPane(pane, msg, ctx.registry, {
480
400
  skipVerify: true,
481
401
  intent: "checkback-verify",
@@ -510,13 +430,13 @@ export function fireDueCheckbacks(ctx) {
510
430
  else if (row.expect && (row.kind === "room-call" || isRoomCallExpect(row.expect))) {
511
431
  const meta = pane ? paneMetaForPane(pane) : null;
512
432
  const msg = formatRoomCallCheckback(row.expect, {
513
- role: meta?.role || row.recipientLabel || "worker",
433
+ role: meta?.role || row.recipientLabel || "plain",
514
434
  slot: meta?.slot,
515
435
  mini: meta?.mini,
516
436
  ports: meta?.ports,
517
437
  workerCount: ctx.loaded.profile.session.workerCount,
518
438
  miniMax: ctx.loaded.profile.session.miniMax,
519
- });
439
+ }, { id: row.id });
520
440
  const r = deliverToPane(pane, msg, ctx.registry, {
521
441
  skipVerify: true,
522
442
  intent: "checkback-verify",
@@ -534,7 +454,7 @@ export function fireDueCheckbacks(ctx) {
534
454
  const meta = pane ? paneMetaForPane(pane) : null;
535
455
  const parsed = parseRoomCommsExpect(row.expect);
536
456
  const selfId = resolveAgentId({
537
- role: meta?.role || row.recipientLabel || "worker",
457
+ role: meta?.role || row.recipientLabel || "plain",
538
458
  slot: meta?.slot != null ? Number(meta.slot) : null,
539
459
  mini: meta?.mini ?? null,
540
460
  });
@@ -549,13 +469,13 @@ export function fireDueCheckbacks(ctx) {
549
469
  }
550
470
  }
551
471
  const msg = formatRoomCommsCheckback(row.expect, {
552
- role: meta?.role || row.recipientLabel || "worker",
472
+ role: meta?.role || row.recipientLabel || "plain",
553
473
  slot: meta?.slot,
554
474
  mini: meta?.mini,
555
475
  ports: meta?.ports,
556
476
  workerCount: ctx.loaded.profile.session.workerCount,
557
477
  miniMax: ctx.loaded.profile.session.miniMax,
558
- }, from, { verifyOnly: true });
478
+ }, from, { verifyOnly: true, id: row.id });
559
479
  const r = deliverToPane(pane, msg, ctx.registry, {
560
480
  skipVerify: true,
561
481
  intent: "checkback-verify",
@@ -571,7 +491,7 @@ export function fireDueCheckbacks(ctx) {
571
491
  else {
572
492
  const meta = pane ? paneMetaForPane(pane) : null;
573
493
  const cbCtx = {
574
- role: meta?.role || row.recipientLabel || "worker",
494
+ role: meta?.role || row.recipientLabel || "plain",
575
495
  slot: meta?.slot,
576
496
  mini: meta?.mini,
577
497
  ports: meta?.ports,
@@ -579,7 +499,7 @@ export function fireDueCheckbacks(ctx) {
579
499
  miniMax: ctx.loaded.profile.session.miniMax,
580
500
  };
581
501
  const expect = row.expect ?? row.kind;
582
- const msg = formatGenericCheckback(expect, cbCtx);
502
+ const msg = formatGenericCheckback(expect, cbCtx, { id: row.id });
583
503
  const r = deliverToPane(pane, msg, ctx.registry, {
584
504
  skipVerify: true,
585
505
  intent: "checkback-verify",
@@ -613,6 +533,8 @@ export function orchestratorDrainTick(ctx) {
613
533
  const a = drainInboxOnce(ctx);
614
534
  const b = drainPeerOnce(ctx);
615
535
  fireDueCheckbacks(ctx);
536
+ fireDueTargets({ store: ctx.store, loaded: ctx.loaded, log: ctx.log });
537
+ ackSweepTick(ctx);
616
538
  paintMeshBorders(ctx.loaded, ctx.registry, ctx.store, ctx.session, ctx.baseWindow, ctx.workersWindow, ctx.minisWindow, new Set(), borderConnectivity(ctx), ctx.store.stateDir);
617
539
  return {
618
540
  attempted: a.attempted + b.attempted,
@@ -632,6 +554,10 @@ export async function orchestratorDrainTickAsync(ctx) {
632
554
  await yieldEventLoop();
633
555
  fireDueCheckbacks(ctx);
634
556
  await yieldEventLoop();
557
+ fireDueTargets({ store: ctx.store, loaded: ctx.loaded, log: ctx.log });
558
+ await yieldEventLoop();
559
+ ackSweepTick(ctx);
560
+ await yieldEventLoop();
635
561
  await paintMeshBordersAsync(ctx.loaded, ctx.registry, ctx.store, ctx.session, ctx.baseWindow, ctx.workersWindow, ctx.minisWindow, new Set(), borderConnectivity(ctx), ctx.store.stateDir);
636
562
  return {
637
563
  attempted: a.attempted + b.attempted,