@seat-mesh/daemon 1.0.0 → 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 +11 -2
  22. package/dist/connectivity/connectivity-recovery.d.ts.map +1 -1
  23. package/dist/connectivity/connectivity-recovery.js +65 -34
  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 +232 -20
  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 +6 -5
  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,54 +1,134 @@
1
- const UI_CSS = `
2
- body{font-family:system-ui,sans-serif;margin:2rem;max-width:36rem;line-height:1.45}
3
- h1{font-size:1.25rem}
4
- .btn{display:inline-block;margin:.35rem .5rem .35rem 0;padding:.55rem 1.1rem;
5
- border-radius:6px;text-decoration:none;font-weight:600;font-size:.95rem}
6
- .btn-yes{background:#2e7d32;color:#fff}
7
- .btn-no{background:#5f6368;color:#fff}
8
- .btn-link{background:#1565c0;color:#fff}
9
- .btn-muted{background:#eceff1;color:#202124}
10
- .row{margin:1.25rem 0}
11
- small{color:#5f6368}
1
+ import { renderSimpleMarkdown } from "./simple-markdown.js";
2
+ /** Shared blueish shell — matches packages/daemon/static/ui/targets.css */
3
+ export const MESH_UI_CSS = `
4
+ :root{
5
+ --bg:#0b1220;--panel:#121a2b;--ink:#e8eef8;--muted:#8b9bb4;--line:#243149;
6
+ --accent:#5b9fd4;--yes:#3d8bfd;--no:#5a6a80;--info:#7eb8e8;
7
+ --ok:#5bb89a;--danger:#c47a6a;--warn:#d4a574;
8
+ --font:"IBM Plex Sans","Segoe UI",system-ui,sans-serif;
9
+ --mono:"IBM Plex Mono",ui-monospace,monospace;
10
+ }
11
+ *{box-sizing:border-box}
12
+ html,body{margin:0;min-height:100%;background:var(--bg);color:var(--ink);font:15px/1.45 var(--font)}
13
+ .top{display:flex;align-items:center;gap:1.5rem;padding:.85rem 1.5rem;border-bottom:1px solid var(--line);background:var(--panel)}
14
+ .brand{font-weight:650;letter-spacing:.04em;text-transform:lowercase}
15
+ nav a{color:var(--muted);text-decoration:none;margin-right:1rem}
16
+ nav a.on{color:var(--accent)}
17
+ .meta{margin-left:auto;color:var(--muted);font-size:.85rem;font-family:var(--mono)}
18
+ main{max-width:40rem;margin:0 auto;padding:1.75rem 1.25rem 4rem}
19
+ h1{font-size:1.55rem;font-weight:600;margin:0 0 .5rem}
20
+ .lede{color:var(--muted);margin:0 0 1.25rem}
21
+ .body,.md{color:var(--muted);margin:0 0 1.25rem}
22
+ .md h1,.md h2,.md h3{color:var(--ink);margin:1rem 0 .4rem;font-weight:600}
23
+ .md h1{font-size:1.35rem}.md h2{font-size:1.15rem}.md h3{font-size:1.05rem}
24
+ .md p{margin:.55rem 0}.md ul{margin:.4rem 0 .8rem 1.2rem;padding:0}
25
+ .md li{margin:.25rem 0}.md code{font-family:var(--mono);font-size:.9em;color:var(--ink)}
26
+ .md a{color:var(--accent)}.md-img{display:block;max-width:100%;margin:.75rem 0;border:1px solid var(--line)}
27
+ .panel{padding:1.25rem;background:var(--panel);border:1px solid var(--line);margin-bottom:1.25rem}
28
+ .row{display:flex;flex-wrap:wrap;gap:.65rem;margin:1.1rem 0}
29
+ .btn{display:inline-block;padding:.55rem 1.15rem;border-radius:2px;text-decoration:none;font-weight:600;font-size:.95rem;border:1px solid transparent}
30
+ .btn-yes{background:var(--yes);color:#061018}
31
+ .btn-no{background:var(--no);color:var(--ink)}
32
+ .btn-info{background:transparent;color:var(--info);border-color:var(--line)}
33
+ .btn-link{background:var(--accent);color:#061018}
34
+ .btn-muted{background:transparent;color:var(--muted);border-color:var(--line)}
35
+ .ok h1{color:var(--ok)}
36
+ .bad h1{color:var(--danger)}
37
+ small,.foot{color:var(--muted);font-size:.8rem}
38
+ .foot{border-top:1px solid var(--line);padding:1rem 1.5rem;margin-top:2rem}
39
+ .foot a{color:var(--accent)}
40
+ code{font-family:var(--mono);font-size:.9em}
12
41
  `;
13
- export function htmlUiShell(title, bodyHtml) {
42
+ export function htmlUiShell(title, bodyHtml, opts) {
43
+ const on = opts?.navOn ?? "";
14
44
  return `<!DOCTYPE html>
15
- <html lang="en"><head><meta charset="utf-8"><title>${escapeHtml(title)}</title>
16
- <style>${UI_CSS}</style></head><body>${bodyHtml}</body></html>`;
45
+ <html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
46
+ <title>${escapeHtml(title)}</title>
47
+ <style>${MESH_UI_CSS}</style></head>
48
+ <body>
49
+ <header class="top">
50
+ <div class="brand">seatmesh</div>
51
+ <nav>
52
+ <a class="${on === "targets" ? "on" : ""}" href="/ui/">Targets</a>
53
+ <a class="${on === "decide" ? "on" : ""}" href="/ui/decide.html">Decide</a>
54
+ </nav>
55
+ </header>
56
+ ${bodyHtml}
57
+ </body></html>`;
17
58
  }
18
59
  export function htmlButtonLinks(links, variant = "plain") {
19
60
  if (!links.length)
20
- return "<p><em>No links registered.</em></p>";
61
+ return "<p class=\"lede\"><em>No action links.</em></p>";
21
62
  return links
22
63
  .map((l, i) => {
23
64
  const label = escapeHtml(l.label);
24
65
  const href = escapeHtmlAttr(l.url);
25
66
  let cls = "btn btn-link";
26
- if (variant === "yesno" && links.length >= 2) {
27
- if (i === 0)
67
+ const lower = l.label.toLowerCase();
68
+ if (variant === "yesno") {
69
+ if (lower === "yes" || (i === 0 && links.length >= 2))
28
70
  cls = "btn btn-yes";
29
- else if (i === 1)
71
+ else if (lower === "no" || (i === 1 && links.length >= 2))
30
72
  cls = "btn btn-no";
31
73
  }
32
74
  return `<a class="${cls}" href="${href}">${label}</a>`;
33
75
  })
34
76
  .join("\n");
35
77
  }
36
- /** Browser page: same one-shot Yes/No URLs as embedded in desktop toasts. */
78
+ /** Browser Info card markdown body + optional Yes/No (and other) actions. */
79
+ export function htmlDecideCardPage(card, port) {
80
+ const buttons = card.links.length
81
+ ? `<p class="lede">Actions (one-shot):</p><div class="row">${htmlButtonLinks(card.links, "yesno")}</div>`
82
+ : "";
83
+ const body = card.body
84
+ ? `<div class="md">${renderSimpleMarkdown(card.body)}</div>`
85
+ : `<p class="lede">No description.</p>`;
86
+ return htmlUiShell(`seatmesh · ${card.title}`, `<main>
87
+ <section class="panel">
88
+ <h1>${escapeHtml(card.title)}</h1>
89
+ ${body}
90
+ ${buttons}
91
+ </section>
92
+ </main>
93
+ <div class="foot">seatmesh Info · :${port} · <a href="/ui/">Targets</a> · <a href="/ui/decide.html">Decide</a></div>`, { navOn: "decide" });
94
+ }
37
95
  export function htmlDemoYesNoPage(links, port) {
38
96
  const buttons = htmlButtonLinks(links, "yesno");
39
- return htmlUiShell("seatmesh · Yes / No", `<h1>Yes / No (notify-act)</h1>
40
- <p>Same links as in a desktop notification. One click executes the action and burns the token.</p>
41
- <div class="row">${buttons}</div>
42
- <p><small>POST /act/register · :${port} · <a href="/ui">/ui</a> · <a href="/health">/health</a></small></p>`);
97
+ return htmlUiShell("seatmesh · Yes / No demo", `<main>
98
+ <section class="panel">
99
+ <h1>Yes / No (demo)</h1>
100
+ <p class="lede">Same one-shot links as a desktop toast. Info opens a real card from <code>notify yesno</code>.</p>
101
+ <div class="row">${buttons}</div>
102
+ </section>
103
+ </main>
104
+ <div class="foot">POST /act/register · :${port} · <a href="/ui/">Targets</a></div>`, { navOn: "decide" });
105
+ }
106
+ export function htmlActPage(title, body, ok) {
107
+ const cls = ok ? "ok" : "bad";
108
+ return htmlUiShell(title, `<main class="${cls}">
109
+ <section class="panel">
110
+ <h1>${escapeHtml(title)}</h1>
111
+ <p class="body">${escapeHtml(body)}</p>
112
+ <div class="row">
113
+ <a class="btn btn-link" href="/ui/">Back to Targets</a>
114
+ <a class="btn btn-muted" href="/ui/decide.html">Decide</a>
115
+ </div>
116
+ </section>
117
+ </main>
118
+ <div class="foot">seatmesh notify-act · one-shot</div>`);
43
119
  }
44
120
  export function htmlUiHome(port) {
45
- return htmlUiShell("seatmesh ui", `<h1>seatmesh browser</h1>
46
- <p>Local inbox control plane on <code>127.0.0.1:${port}</code>.</p>
47
- <div class="row">
48
- <a class="btn btn-link" href="/ui/demo-yesno">Yes / No (demo links)</a>
49
- <a class="btn btn-muted" href="/health">Health (JSON)</a>
50
- </div>
51
- <p><small>CLI: <code>notify yesno</code> · toast body uses HTML Yes/No anchors only.</small></p>`);
121
+ return htmlUiShell("seatmesh ui", `<main>
122
+ <section class="panel">
123
+ <h1>seatmesh browser</h1>
124
+ <p class="lede">Local inbox control plane on <code>127.0.0.1:${port}</code>.</p>
125
+ <div class="row">
126
+ <a class="btn btn-link" href="/ui/">Targets</a>
127
+ <a class="btn btn-info" href="/ui/decide.html">Decide</a>
128
+ <a class="btn btn-muted" href="/health">Health</a>
129
+ </div>
130
+ </section>
131
+ </main>`, { navOn: "targets" });
52
132
  }
53
133
  function escapeHtml(s) {
54
134
  return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
@@ -1 +1 @@
1
- {"version":3,"file":"notify-act-ui.js","sourceRoot":"","sources":["../../src/notify/notify-act-ui.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG;;;;;;;;;;;CAWd,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,QAAgB;IACzD,OAAO;qDAC4C,UAAU,CAAC,KAAK,CAAC;SAC7D,MAAM,wBAAwB,QAAQ,gBAAgB,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAsB,EAAE,UAA6B,OAAO;IAC1F,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,sCAAsC,CAAC;IACjE,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACZ,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,cAAc,CAAC;QACzB,IAAI,OAAO,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC;gBAAE,GAAG,GAAG,aAAa,CAAC;iBAC5B,IAAI,CAAC,KAAK,CAAC;gBAAE,GAAG,GAAG,YAAY,CAAC;QACvC,CAAC;QACD,OAAO,aAAa,GAAG,WAAW,IAAI,KAAK,KAAK,MAAM,CAAC;IACzD,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB,CAAC,KAAsB,EAAE,IAAY;IACpE,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,WAAW,CAChB,qBAAqB,EACrB;;mBAEe,OAAO;kCACQ,IAAI,sEAAsE,CACzG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,WAAW,CAChB,aAAa,EACb;kDAC8C,IAAI;;;;;iGAK2C,CAC9F,CAAC;AACJ,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,cAAc,CAAC,CAAS;IAC/B,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"notify-act-ui.js","sourceRoot":"","sources":["../../src/notify/notify-act-ui.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
+ import type { NotifyActCard, NotifyActLink, NotifyActRegisterAction, NotifyActType } from "@seat-mesh/core";
1
2
  import type { LoadedProfile } from "@seat-mesh/core";
2
- import type { NotifyActLink, NotifyActRegisterAction, NotifyActType } from "@seat-mesh/core";
3
3
  import type { PeerRow } from "../store/jsonl-store.js";
4
4
  export interface NotifyActStore {
5
5
  resolveInbox(input: {
@@ -25,6 +25,13 @@ export interface NotifyActTokenRow {
25
25
  expiresAt: number;
26
26
  used: boolean;
27
27
  }
28
+ export interface NotifyActCardRow {
29
+ id: string;
30
+ title: string;
31
+ body: string;
32
+ links: NotifyActLink[];
33
+ expiresAt: number;
34
+ }
28
35
  export interface NotifyActExecuteCtx {
29
36
  loaded: LoadedProfile;
30
37
  store: NotifyActStore;
@@ -33,6 +40,12 @@ export interface NotifyActExecuteCtx {
33
40
  }
34
41
  export declare function createNotifyActRegistry(): {
35
42
  register: (actions: NotifyActRegisterAction[], ttlSec: number, baseUrl: string) => NotifyActLink[];
43
+ registerCard: (input: {
44
+ title: string;
45
+ body: string;
46
+ links: NotifyActLink[];
47
+ }, ttlSec: number, baseUrl: string) => NotifyActCard;
48
+ getCard: (id: string) => NotifyActCardRow | null;
36
49
  take: (token: string) => NotifyActTokenRow | null;
37
50
  pruneExpired: () => void;
38
51
  };
@@ -41,5 +54,4 @@ export declare function executeNotifyAct(row: NotifyActTokenRow, ctx: NotifyActE
41
54
  ok: boolean;
42
55
  summary: string;
43
56
  }>;
44
- export declare function htmlActPage(title: string, body: string, ok: boolean): string;
45
57
  //# sourceMappingURL=notify-act.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notify-act.d.ts","sourceRoot":"","sources":["../../src/notify/notify-act.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EACV,aAAa,EACb,uBAAuB,EACvB,aAAa,EACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,KAAK,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACzF,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtG,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,wBAAgB,uBAAuB;wBAW1B,uBAAuB,EAAE,UAC1B,MAAM,WACL,MAAM,KACd,aAAa,EAAE;kBAuBG,MAAM,KAAG,iBAAiB,GAAG,IAAI;wBAlC7B,IAAI;EA4C9B;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE3E,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,iBAAiB,EACtB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAkE3C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,CAY5E"}
1
+ {"version":3,"file":"notify-act.d.ts","sourceRoot":"","sources":["../../src/notify/notify-act.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,aAAa,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,KAAK,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACzF,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtG,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,wBAAgB,uBAAuB;wBAe1B,uBAAuB,EAAE,UAC1B,MAAM,WACL,MAAM,KACd,aAAa,EAAE;0BAwBT;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,aAAa,EAAE,CAAA;KAAE,UACtD,MAAM,WACL,MAAM,KACd,aAAa;kBAyBK,MAAM,KAAG,gBAAgB,GAAG,IAAI;kBAOhC,MAAM,KAAG,iBAAiB,GAAG,IAAI;wBAzE7B,IAAI;EAmF9B;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE3E,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,iBAAiB,EACtB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAuE3C"}
@@ -1,12 +1,17 @@
1
1
  import { resolvePaneTarget } from "@seat-mesh/tmux";
2
2
  export function createNotifyActRegistry() {
3
3
  const tokens = new Map();
4
+ const cards = new Map();
4
5
  function pruneExpired() {
5
6
  const now = Date.now();
6
7
  for (const [id, row] of tokens) {
7
8
  if (row.expiresAt <= now || row.used)
8
9
  tokens.delete(id);
9
10
  }
11
+ for (const [id, row] of cards) {
12
+ if (row.expiresAt <= now)
13
+ cards.delete(id);
14
+ }
10
15
  }
11
16
  function register(actions, ttlSec, baseUrl) {
12
17
  pruneExpired();
@@ -31,6 +36,37 @@ export function createNotifyActRegistry() {
31
36
  }
32
37
  return links;
33
38
  }
39
+ function registerCard(input, ttlSec, baseUrl) {
40
+ pruneExpired();
41
+ const ttl = Math.min(Math.max(ttlSec, 60), 86_400);
42
+ const base = baseUrl.replace(/\/$/, "");
43
+ const id = crypto.randomUUID();
44
+ const expiresAt = Date.now() + ttl * 1000;
45
+ const row = {
46
+ id,
47
+ title: input.title.trim() || "Decision",
48
+ body: input.body.trim(),
49
+ links: input.links,
50
+ expiresAt,
51
+ };
52
+ cards.set(id, row);
53
+ const infoUrl = `${base}/act/card/${id}`;
54
+ return {
55
+ id,
56
+ title: row.title,
57
+ body: row.body,
58
+ infoUrl,
59
+ links: row.links,
60
+ expiresAt,
61
+ };
62
+ }
63
+ function getCard(id) {
64
+ pruneExpired();
65
+ const row = cards.get(id);
66
+ if (!row || row.expiresAt <= Date.now())
67
+ return null;
68
+ return row;
69
+ }
34
70
  function take(token) {
35
71
  pruneExpired();
36
72
  const row = tokens.get(token);
@@ -40,7 +76,7 @@ export function createNotifyActRegistry() {
40
76
  tokens.delete(token);
41
77
  return row;
42
78
  }
43
- return { register, take, pruneExpired };
79
+ return { register, registerCard, getCard, take, pruneExpired };
44
80
  }
45
81
  export async function executeNotifyAct(row, ctx) {
46
82
  switch (row.type) {
@@ -91,10 +127,15 @@ export async function executeNotifyAct(row, ctx) {
91
127
  id: crypto.randomUUID(),
92
128
  at: now,
93
129
  kind,
94
- fromSlot: "notify-act",
130
+ fromSlot: "operator",
131
+ fromAgent: "operator",
95
132
  fromPorts: null,
96
133
  targetPane: resolved.paneId,
97
- targetLabel: resolved.row.slot || target,
134
+ targetLabel: resolved.row.slot?.startsWith("mini-")
135
+ ? resolved.row.slot
136
+ : resolved.row.slot && /^\d+$/.test(resolved.row.slot)
137
+ ? `slot-${resolved.row.slot}`
138
+ : resolved.row.slot || target,
98
139
  msg,
99
140
  sent: false,
100
141
  };
@@ -110,24 +151,4 @@ export async function executeNotifyAct(row, ctx) {
110
151
  return { ok: false, summary: `Unknown action type.` };
111
152
  }
112
153
  }
113
- export function htmlActPage(title, body, ok) {
114
- const safeTitle = escapeHtml(title);
115
- const safeBody = escapeHtml(body);
116
- const color = ok ? "#2e7d32" : "#c62828";
117
- return `<!DOCTYPE html>
118
- <html lang="en"><head><meta charset="utf-8"><title>${safeTitle}</title>
119
- <style>body{font-family:system-ui,sans-serif;margin:2rem;max-width:40rem;line-height:1.45}
120
- h1{color:${color};font-size:1.25rem}a.btn{display:inline-block;margin-top:1rem;padding:.5rem 1rem;
121
- background:#1565c0;color:#fff;border-radius:6px;text-decoration:none;font-weight:600}</style>
122
- </head><body><h1>${safeTitle}</h1><p>${safeBody}</p>
123
- <a class="btn" href="/ui">Back to mesh UI</a>
124
- <p><small>seatmesh notify-act · one-shot</small></p></body></html>`;
125
- }
126
- function escapeHtml(s) {
127
- return s
128
- .replace(/&/g, "&amp;")
129
- .replace(/</g, "&lt;")
130
- .replace(/>/g, "&gt;")
131
- .replace(/"/g, "&quot;");
132
- }
133
154
  //# sourceMappingURL=notify-act.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notify-act.js","sourceRoot":"","sources":["../../src/notify/notify-act.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAyBpD,MAAM,UAAU,uBAAuB;IACrC,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEpD,SAAS,YAAY;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI;gBAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,SAAS,QAAQ,CACf,OAAkC,EAClC,MAAc,EACd,OAAe;QAEf,YAAY,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;gBAChB,KAAK;gBACL,KAAK;gBACL,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;gBACtB,SAAS;gBACT,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,IAAI,CAAC,KAAa;QACzB,YAAY,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QACjE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC1C,CAAC;AAID,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAsB,EACtB,GAAwB;IAExB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,GAAG,CAAC,GAAG,CAAC,yBAAyB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC;QAC/D,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrE,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC;YACpC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACnD,GAAG,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7D,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,YAAY,MAAM,CAAC,QAAQ,gBAAgB;aACrD,CAAC;QACJ,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,EAAE;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;YAChE,MAAM,GAAG,GACP,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI;gBACvB,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM;gBACzB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;YAC1D,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;YAC7E,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,EAAE,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;QAC9D,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;YAC/D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;gBACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;YAChD,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;YACpD,MAAM,IAAI,GACR,OAAO,KAAK,SAAS;gBACrB,OAAO,KAAK,SAAS;gBACrB,OAAO,KAAK,QAAQ;gBACpB,OAAO,KAAK,MAAM;gBAChB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,QAAQ,CAAC;YACf,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,IAAI,GAAY;gBACpB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,EAAE,EAAE,GAAG;gBACP,IAAI;gBACJ,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,QAAQ,CAAC,MAAM;gBAC3B,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM;gBACxC,GAAG;gBACH,IAAI,EAAE,KAAK;aACZ,CAAC;YACF,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3B,GAAG,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,WAAW,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACzE,MAAM,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,kBAAkB,IAAI,CAAC,WAAW,KAAK,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aAChF,CAAC;QACJ,CAAC;QACD;YACE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,IAAY,EAAE,EAAW;IAClE,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACzC,OAAO;qDAC4C,SAAS;;WAEnD,KAAK;;mBAEG,SAAS,WAAW,QAAQ;;mEAEoB,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
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"}