@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.
- package/dist/ack/ack-open.d.ts +5 -0
- package/dist/ack/ack-open.d.ts.map +1 -0
- package/dist/ack/ack-open.js +86 -0
- package/dist/ack/ack-open.js.map +1 -0
- package/dist/ack/ack-sweep.d.ts +14 -0
- package/dist/ack/ack-sweep.d.ts.map +1 -0
- package/dist/ack/ack-sweep.js +186 -0
- package/dist/ack/ack-sweep.js.map +1 -0
- package/dist/ack/ack-watch.d.ts +13 -0
- package/dist/ack/ack-watch.d.ts.map +1 -0
- package/dist/ack/ack-watch.js +46 -0
- package/dist/ack/ack-watch.js.map +1 -0
- package/dist/border/border-paint.d.ts +24 -1
- package/dist/border/border-paint.d.ts.map +1 -1
- package/dist/border/border-paint.js +207 -82
- package/dist/border/border-paint.js.map +1 -1
- package/dist/border/border-paint.test.d.ts +2 -0
- package/dist/border/border-paint.test.d.ts.map +1 -0
- package/dist/border/border-paint.test.js +58 -0
- package/dist/border/border-paint.test.js.map +1 -0
- package/dist/connectivity/connectivity-recovery.d.ts +11 -2
- package/dist/connectivity/connectivity-recovery.d.ts.map +1 -1
- package/dist/connectivity/connectivity-recovery.js +65 -34
- package/dist/connectivity/connectivity-recovery.js.map +1 -1
- package/dist/connectivity/connectivity-recovery.test.js +7 -1
- package/dist/connectivity/connectivity-recovery.test.js.map +1 -1
- package/dist/connectivity/oc-resume-broadcast.d.ts +20 -0
- package/dist/connectivity/oc-resume-broadcast.d.ts.map +1 -0
- package/dist/connectivity/oc-resume-broadcast.js +74 -0
- package/dist/connectivity/oc-resume-broadcast.js.map +1 -0
- package/dist/connectivity/oc-resume-broadcast.test.d.ts +2 -0
- package/dist/connectivity/oc-resume-broadcast.test.d.ts.map +1 -0
- package/dist/connectivity/oc-resume-broadcast.test.js +9 -0
- package/dist/connectivity/oc-resume-broadcast.test.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/inject/compose-gate.d.ts +7 -0
- package/dist/inject/compose-gate.d.ts.map +1 -1
- package/dist/inject/compose-gate.js +46 -2
- package/dist/inject/compose-gate.js.map +1 -1
- package/dist/inject/compose-gate.test.js +20 -1
- package/dist/inject/compose-gate.test.js.map +1 -1
- package/dist/inject/inject-delivery.d.ts.map +1 -1
- package/dist/inject/inject-delivery.js +7 -3
- package/dist/inject/inject-delivery.js.map +1 -1
- package/dist/inject/inject-delivery.test.js +2 -0
- package/dist/inject/inject-delivery.test.js.map +1 -1
- package/dist/inject/pane-hold.d.ts +4 -0
- package/dist/inject/pane-hold.d.ts.map +1 -0
- package/dist/inject/pane-hold.js +30 -0
- package/dist/inject/pane-hold.js.map +1 -0
- package/dist/mesh-inbox-server.js +232 -20
- package/dist/mesh-inbox-server.js.map +1 -1
- package/dist/mesh-inbox-supervisor.js +2 -2
- package/dist/mesh-inbox-supervisor.js.map +1 -1
- package/dist/notify/notify-act-ui.d.ts +9 -2
- package/dist/notify/notify-act-ui.d.ts.map +1 -1
- package/dist/notify/notify-act-ui.js +110 -30
- package/dist/notify/notify-act-ui.js.map +1 -1
- package/dist/notify/notify-act.d.ts +14 -2
- package/dist/notify/notify-act.d.ts.map +1 -1
- package/dist/notify/notify-act.js +44 -23
- package/dist/notify/notify-act.js.map +1 -1
- package/dist/notify/notify-act.test.js +11 -0
- package/dist/notify/notify-act.test.js.map +1 -1
- package/dist/notify/simple-markdown.d.ts +6 -0
- package/dist/notify/simple-markdown.d.ts.map +1 -0
- package/dist/notify/simple-markdown.js +74 -0
- package/dist/notify/simple-markdown.js.map +1 -0
- package/dist/notify/simple-markdown.test.d.ts +2 -0
- package/dist/notify/simple-markdown.test.d.ts.map +1 -0
- package/dist/notify/simple-markdown.test.js +15 -0
- package/dist/notify/simple-markdown.test.js.map +1 -0
- package/dist/orchestrator/mesh-orchestrator.d.ts +1 -0
- package/dist/orchestrator/mesh-orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/mesh-orchestrator.js +89 -163
- package/dist/orchestrator/mesh-orchestrator.js.map +1 -1
- package/dist/peer/peer-backlog.d.ts +1 -1
- package/dist/peer/peer-backlog.d.ts.map +1 -1
- package/dist/peer/peer-backlog.js +52 -34
- package/dist/peer/peer-backlog.js.map +1 -1
- package/dist/peer/peer-bulk-drain.d.ts +18 -0
- package/dist/peer/peer-bulk-drain.d.ts.map +1 -0
- package/dist/peer/peer-bulk-drain.js +254 -0
- package/dist/peer/peer-bulk-drain.js.map +1 -0
- package/dist/peer/peer-skip.test.js +2 -2
- package/dist/peer/peer-skip.test.js.map +1 -1
- package/dist/peer/peer-target-resolve.d.ts +1 -0
- package/dist/peer/peer-target-resolve.d.ts.map +1 -1
- package/dist/peer/peer-target-resolve.js +17 -6
- package/dist/peer/peer-target-resolve.js.map +1 -1
- package/dist/store/create-queue-store.d.ts +1 -0
- package/dist/store/create-queue-store.d.ts.map +1 -1
- package/dist/store/create-queue-store.js.map +1 -1
- package/dist/store/jsonl-store.d.ts +32 -1
- package/dist/store/jsonl-store.d.ts.map +1 -1
- package/dist/store/jsonl-store.js +108 -1
- package/dist/store/jsonl-store.js.map +1 -1
- package/dist/store/sqlite-store.d.ts +22 -1
- package/dist/store/sqlite-store.d.ts.map +1 -1
- package/dist/store/sqlite-store.js +115 -1
- package/dist/store/sqlite-store.js.map +1 -1
- package/dist/store/target-jsonl.d.ts +31 -0
- package/dist/store/target-jsonl.d.ts.map +1 -0
- package/dist/store/target-jsonl.js +76 -0
- package/dist/store/target-jsonl.js.map +1 -0
- package/dist/store/target-jsonl.test.d.ts +2 -0
- package/dist/store/target-jsonl.test.d.ts.map +1 -0
- package/dist/store/target-jsonl.test.js +37 -0
- package/dist/store/target-jsonl.test.js.map +1 -0
- package/dist/target/target-fire.d.ts +22 -0
- package/dist/target/target-fire.d.ts.map +1 -0
- package/dist/target/target-fire.js +86 -0
- package/dist/target/target-fire.js.map +1 -0
- package/package.json +6 -5
- package/static/ui/decide.html +66 -0
- package/static/ui/index.html +68 -0
- package/static/ui/targets.css +119 -0
- package/static/ui/targets.js +186 -0
|
@@ -1,54 +1,134 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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"><
|
|
16
|
-
<
|
|
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
|
|
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
|
-
|
|
27
|
-
|
|
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
|
|
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", `<
|
|
40
|
-
<
|
|
41
|
-
<
|
|
42
|
-
<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", `<
|
|
46
|
-
<
|
|
47
|
-
<
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
</
|
|
51
|
-
<
|
|
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, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify-act-ui.js","sourceRoot":"","sources":["../../src/notify/notify-act-ui.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG
|
|
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,
|
|
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: "
|
|
130
|
+
fromSlot: "operator",
|
|
131
|
+
fromAgent: "operator",
|
|
95
132
|
fromPorts: null,
|
|
96
133
|
targetPane: resolved.paneId,
|
|
97
|
-
targetLabel: resolved.row.slot
|
|
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, "&")
|
|
129
|
-
.replace(/</g, "<")
|
|
130
|
-
.replace(/>/g, ">")
|
|
131
|
-
.replace(/"/g, """);
|
|
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":"
|
|
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, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
59
|
+
}
|
|
60
|
+
function escapeAttr(s) {
|
|
61
|
+
return escapeHtml(s).replace(/"/g, """);
|
|
62
|
+
}
|
|
63
|
+
function inline(s) {
|
|
64
|
+
let t = escapeHtml(s);
|
|
65
|
+
// images  — 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":"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"}
|
|
@@ -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("");
|
|
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"}
|
|
@@ -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;
|
|
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"}
|