@seat-mesh/daemon 0.1.2

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/border-paint.d.ts +11 -0
  2. package/dist/border-paint.d.ts.map +1 -0
  3. package/dist/border-paint.js +163 -0
  4. package/dist/border-paint.js.map +1 -0
  5. package/dist/bullmq-runtime.d.ts +19 -0
  6. package/dist/bullmq-runtime.d.ts.map +1 -0
  7. package/dist/bullmq-runtime.js +78 -0
  8. package/dist/bullmq-runtime.js.map +1 -0
  9. package/dist/compose-gate.d.ts +18 -0
  10. package/dist/compose-gate.d.ts.map +1 -0
  11. package/dist/compose-gate.js +80 -0
  12. package/dist/compose-gate.js.map +1 -0
  13. package/dist/compose-gate.test.d.ts +2 -0
  14. package/dist/compose-gate.test.d.ts.map +1 -0
  15. package/dist/compose-gate.test.js +35 -0
  16. package/dist/compose-gate.test.js.map +1 -0
  17. package/dist/connectivity-recovery.d.ts +81 -0
  18. package/dist/connectivity-recovery.d.ts.map +1 -0
  19. package/dist/connectivity-recovery.js +454 -0
  20. package/dist/connectivity-recovery.js.map +1 -0
  21. package/dist/connectivity-recovery.test.d.ts +2 -0
  22. package/dist/connectivity-recovery.test.d.ts.map +1 -0
  23. package/dist/connectivity-recovery.test.js +147 -0
  24. package/dist/connectivity-recovery.test.js.map +1 -0
  25. package/dist/create-queue-store.d.ts +8 -0
  26. package/dist/create-queue-store.d.ts.map +1 -0
  27. package/dist/create-queue-store.js +13 -0
  28. package/dist/create-queue-store.js.map +1 -0
  29. package/dist/delivery-hold.d.ts +10 -0
  30. package/dist/delivery-hold.d.ts.map +1 -0
  31. package/dist/delivery-hold.js +21 -0
  32. package/dist/delivery-hold.js.map +1 -0
  33. package/dist/delivery-hold.test.d.ts +2 -0
  34. package/dist/delivery-hold.test.d.ts.map +1 -0
  35. package/dist/delivery-hold.test.js +35 -0
  36. package/dist/delivery-hold.test.js.map +1 -0
  37. package/dist/index.d.ts +3 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +3 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/inject-delivery.d.ts +26 -0
  42. package/dist/inject-delivery.d.ts.map +1 -0
  43. package/dist/inject-delivery.js +108 -0
  44. package/dist/inject-delivery.js.map +1 -0
  45. package/dist/inject-delivery.test.d.ts +2 -0
  46. package/dist/inject-delivery.test.d.ts.map +1 -0
  47. package/dist/inject-delivery.test.js +14 -0
  48. package/dist/inject-delivery.test.js.map +1 -0
  49. package/dist/jsonl-dedupe.test.d.ts +2 -0
  50. package/dist/jsonl-dedupe.test.d.ts.map +1 -0
  51. package/dist/jsonl-dedupe.test.js +27 -0
  52. package/dist/jsonl-dedupe.test.js.map +1 -0
  53. package/dist/jsonl-store.d.ts +103 -0
  54. package/dist/jsonl-store.d.ts.map +1 -0
  55. package/dist/jsonl-store.js +235 -0
  56. package/dist/jsonl-store.js.map +1 -0
  57. package/dist/mesh-inbox-server.d.ts +3 -0
  58. package/dist/mesh-inbox-server.d.ts.map +1 -0
  59. package/dist/mesh-inbox-server.js +483 -0
  60. package/dist/mesh-inbox-server.js.map +1 -0
  61. package/dist/mesh-inbox-supervisor.d.ts +3 -0
  62. package/dist/mesh-inbox-supervisor.d.ts.map +1 -0
  63. package/dist/mesh-inbox-supervisor.js +227 -0
  64. package/dist/mesh-inbox-supervisor.js.map +1 -0
  65. package/dist/mesh-orchestrator.d.ts +32 -0
  66. package/dist/mesh-orchestrator.d.ts.map +1 -0
  67. package/dist/mesh-orchestrator.js +340 -0
  68. package/dist/mesh-orchestrator.js.map +1 -0
  69. package/dist/oc-resume-ack.d.ts +32 -0
  70. package/dist/oc-resume-ack.d.ts.map +1 -0
  71. package/dist/oc-resume-ack.js +89 -0
  72. package/dist/oc-resume-ack.js.map +1 -0
  73. package/dist/oc-resume-ack.test.d.ts +2 -0
  74. package/dist/oc-resume-ack.test.d.ts.map +1 -0
  75. package/dist/oc-resume-ack.test.js +23 -0
  76. package/dist/oc-resume-ack.test.js.map +1 -0
  77. package/dist/oc-resume.d.ts +25 -0
  78. package/dist/oc-resume.d.ts.map +1 -0
  79. package/dist/oc-resume.js +102 -0
  80. package/dist/oc-resume.js.map +1 -0
  81. package/dist/orchestrator.d.ts +17 -0
  82. package/dist/orchestrator.d.ts.map +1 -0
  83. package/dist/orchestrator.js +11 -0
  84. package/dist/orchestrator.js.map +1 -0
  85. package/dist/pane-ops-drain.d.ts +14 -0
  86. package/dist/pane-ops-drain.d.ts.map +1 -0
  87. package/dist/pane-ops-drain.js +53 -0
  88. package/dist/pane-ops-drain.js.map +1 -0
  89. package/dist/peer-backlog.d.ts +18 -0
  90. package/dist/peer-backlog.d.ts.map +1 -0
  91. package/dist/peer-backlog.js +137 -0
  92. package/dist/peer-backlog.js.map +1 -0
  93. package/dist/peer-comms-checkback.d.ts +5 -0
  94. package/dist/peer-comms-checkback.d.ts.map +1 -0
  95. package/dist/peer-comms-checkback.js +57 -0
  96. package/dist/peer-comms-checkback.js.map +1 -0
  97. package/dist/peer-skip.d.ts +10 -0
  98. package/dist/peer-skip.d.ts.map +1 -0
  99. package/dist/peer-skip.js +26 -0
  100. package/dist/peer-skip.js.map +1 -0
  101. package/dist/peer-skip.test.d.ts +2 -0
  102. package/dist/peer-skip.test.d.ts.map +1 -0
  103. package/dist/peer-skip.test.js +33 -0
  104. package/dist/peer-skip.test.js.map +1 -0
  105. package/dist/ppa-state.d.ts +32 -0
  106. package/dist/ppa-state.d.ts.map +1 -0
  107. package/dist/ppa-state.js +63 -0
  108. package/dist/ppa-state.js.map +1 -0
  109. package/dist/sqlite-store.d.ts +44 -0
  110. package/dist/sqlite-store.d.ts.map +1 -0
  111. package/dist/sqlite-store.js +422 -0
  112. package/dist/sqlite-store.js.map +1 -0
  113. package/dist/sqlite-store.test.d.ts +2 -0
  114. package/dist/sqlite-store.test.d.ts.map +1 -0
  115. package/dist/sqlite-store.test.js +63 -0
  116. package/dist/sqlite-store.test.js.map +1 -0
  117. package/dist/workers.d.ts +11 -0
  118. package/dist/workers.d.ts.map +1 -0
  119. package/dist/workers.js +12 -0
  120. package/dist/workers.js.map +1 -0
  121. package/package.json +28 -0
@@ -0,0 +1,422 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { createRequire } from "node:module";
4
+ import { formatMeshSteeringInject } from "@seat-mesh/core";
5
+ import { dedupeJsonlRowsById, } from "./jsonl-store.js";
6
+ const require = createRequire(import.meta.url);
7
+ function openSqliteDb(dbPath) {
8
+ const Ctor = require("better-sqlite3");
9
+ return new Ctor(dbPath);
10
+ }
11
+ function sqlRows(rows, map) {
12
+ return rows.map((row) => map(row));
13
+ }
14
+ function sqlChanges(result) {
15
+ return Number(result.changes ?? 0);
16
+ }
17
+ const SCHEMA = `
18
+ PRAGMA journal_mode = WAL;
19
+ PRAGMA synchronous = NORMAL;
20
+
21
+ CREATE TABLE IF NOT EXISTS meta (
22
+ key TEXT PRIMARY KEY,
23
+ value TEXT NOT NULL
24
+ );
25
+
26
+ CREATE TABLE IF NOT EXISTS inbox (
27
+ id TEXT PRIMARY KEY,
28
+ at TEXT NOT NULL,
29
+ from_agent TEXT NOT NULL,
30
+ slot TEXT,
31
+ ports TEXT,
32
+ msg TEXT NOT NULL,
33
+ sent INTEGER NOT NULL DEFAULT 0,
34
+ sent_at TEXT,
35
+ delivered_to TEXT,
36
+ deliver_pane TEXT,
37
+ deliver_mode TEXT,
38
+ resolved INTEGER NOT NULL DEFAULT 0,
39
+ read_flag INTEGER NOT NULL DEFAULT 0
40
+ );
41
+
42
+ CREATE TABLE IF NOT EXISTS peer (
43
+ id TEXT PRIMARY KEY,
44
+ at TEXT NOT NULL,
45
+ kind TEXT NOT NULL,
46
+ from_slot TEXT NOT NULL,
47
+ from_ports TEXT,
48
+ room_slug TEXT,
49
+ from_agent TEXT,
50
+ target_pane TEXT NOT NULL,
51
+ target_label TEXT NOT NULL,
52
+ msg TEXT NOT NULL,
53
+ sent INTEGER NOT NULL DEFAULT 0,
54
+ sent_at TEXT,
55
+ deliver_pane TEXT,
56
+ deliver_mode TEXT
57
+ );
58
+
59
+ CREATE TABLE IF NOT EXISTS checkback (
60
+ id TEXT PRIMARY KEY,
61
+ kind TEXT,
62
+ status TEXT NOT NULL,
63
+ renew_sec INTEGER,
64
+ expect TEXT,
65
+ owner_pane TEXT,
66
+ expires_at TEXT,
67
+ sender_label TEXT,
68
+ recipient_label TEXT,
69
+ created_at TEXT NOT NULL,
70
+ updated_at TEXT NOT NULL
71
+ );
72
+
73
+ CREATE TABLE IF NOT EXISTS pane_ops (
74
+ id TEXT PRIMARY KEY,
75
+ row_json TEXT NOT NULL
76
+ );
77
+
78
+ CREATE INDEX IF NOT EXISTS idx_inbox_pending ON inbox(sent, resolved);
79
+ CREATE INDEX IF NOT EXISTS idx_peer_pending ON peer(sent);
80
+ CREATE INDEX IF NOT EXISTS idx_checkback_active ON checkback(status, expires_at);
81
+ `;
82
+ function bool(v) {
83
+ return v ? 1 : 0;
84
+ }
85
+ function readJsonlFile(file) {
86
+ if (!fs.existsSync(file))
87
+ return [];
88
+ return fs
89
+ .readFileSync(file, "utf8")
90
+ .split("\n")
91
+ .map((l) => l.trim())
92
+ .filter(Boolean)
93
+ .map((l) => {
94
+ try {
95
+ return JSON.parse(l);
96
+ }
97
+ catch {
98
+ return null;
99
+ }
100
+ })
101
+ .filter((r) => r !== null);
102
+ }
103
+ export function migrateJsonlDirToSqlite(dbPath, jsonlDir, log) {
104
+ if (fs.existsSync(dbPath)) {
105
+ const db = openSqliteDb(dbPath);
106
+ const row = db.prepare("SELECT value FROM meta WHERE key = ?").get("migrated_from_jsonl");
107
+ db.close();
108
+ if (row)
109
+ return false;
110
+ }
111
+ const inboxPath = path.join(jsonlDir, "INBOX.jsonl");
112
+ const peerPath = path.join(jsonlDir, "PEER.jsonl");
113
+ const checkPath = path.join(jsonlDir, "CHECKBACK.jsonl");
114
+ const panePath = path.join(jsonlDir, "PANE_OPS.jsonl");
115
+ const hasAny = fs.existsSync(inboxPath) ||
116
+ fs.existsSync(peerPath) ||
117
+ fs.existsSync(checkPath) ||
118
+ fs.existsSync(panePath);
119
+ if (!hasAny)
120
+ return false;
121
+ fs.mkdirSync(path.dirname(dbPath), { recursive: true });
122
+ const store = new SqliteStore(dbPath, jsonlDir, log);
123
+ const inbox = readJsonlFile(inboxPath);
124
+ const peer = dedupeJsonlRowsById(readJsonlFile(peerPath));
125
+ const checkbacks = readJsonlFile(checkPath);
126
+ const paneOps = readJsonlFile(panePath);
127
+ if (inbox.length)
128
+ store.writeInbox(inbox);
129
+ if (peer.length)
130
+ store.writePeer(peer);
131
+ if (checkbacks.length)
132
+ store.writeCheckbacks(checkbacks);
133
+ if (paneOps.length)
134
+ store.writePaneOps(paneOps);
135
+ store.setMeta("migrated_from_jsonl", new Date().toISOString());
136
+ log(`SQLITE migrate jsonl -> ${dbPath} inbox=${inbox.length} peer=${peer.length} checkback=${checkbacks.length} pane_ops=${paneOps.length}`);
137
+ return true;
138
+ }
139
+ export class SqliteStore {
140
+ stateDir;
141
+ log;
142
+ db;
143
+ constructor(dbPath, stateDir, log = () => { }) {
144
+ this.stateDir = stateDir;
145
+ this.log = log;
146
+ fs.mkdirSync(stateDir, { recursive: true });
147
+ fs.mkdirSync(path.dirname(dbPath), { recursive: true });
148
+ this.db = openSqliteDb(dbPath);
149
+ this.db.exec(SCHEMA);
150
+ }
151
+ close() {
152
+ this.db.close();
153
+ }
154
+ setMeta(key, value) {
155
+ this.db
156
+ .prepare("INSERT INTO meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value")
157
+ .run(key, value);
158
+ }
159
+ get checkbackPath() {
160
+ return path.join(this.stateDir, "CHECKBACK.jsonl");
161
+ }
162
+ get inboxPath() {
163
+ return path.join(this.stateDir, "INBOX.jsonl");
164
+ }
165
+ get peerPath() {
166
+ return path.join(this.stateDir, "PEER.jsonl");
167
+ }
168
+ get paneOpsPath() {
169
+ return path.join(this.stateDir, "PANE_OPS.jsonl");
170
+ }
171
+ readCheckbacks() {
172
+ return sqlRows(this.db.prepare("SELECT * FROM checkback ORDER BY created_at").all(), rowToCheckback);
173
+ }
174
+ writeCheckbacks(rows) {
175
+ const del = this.db.prepare("DELETE FROM checkback");
176
+ const ins = this.db.prepare(`
177
+ INSERT INTO checkback(id, kind, status, renew_sec, expect, owner_pane, expires_at, sender_label, recipient_label, created_at, updated_at)
178
+ VALUES (@id, @kind, @status, @renewSec, @expect, @ownerPane, @expiresAt, @senderLabel, @recipientLabel, @createdAt, @updatedAt)
179
+ `);
180
+ this.db.transaction(() => {
181
+ del.run();
182
+ for (const r of rows)
183
+ ins.run(r);
184
+ })();
185
+ }
186
+ upsertCheckback(row) {
187
+ this.db
188
+ .prepare(`
189
+ INSERT INTO checkback(id, kind, status, renew_sec, expect, owner_pane, expires_at, sender_label, recipient_label, created_at, updated_at)
190
+ VALUES (@id, @kind, @status, @renewSec, @expect, @ownerPane, @expiresAt, @senderLabel, @recipientLabel, @createdAt, @updatedAt)
191
+ ON CONFLICT(id) DO UPDATE SET
192
+ kind=excluded.kind, status=excluded.status, renew_sec=excluded.renew_sec, expect=excluded.expect,
193
+ owner_pane=excluded.owner_pane, expires_at=excluded.expires_at, sender_label=excluded.sender_label,
194
+ recipient_label=excluded.recipient_label, updated_at=excluded.updated_at
195
+ `)
196
+ .run(row);
197
+ return row;
198
+ }
199
+ cancelCheckback(id) {
200
+ const r = this.db
201
+ .prepare("UPDATE checkback SET status = 'cancelled', updated_at = ? WHERE status = 'active' AND (id = ? OR id LIKE ?)")
202
+ .run(new Date().toISOString(), id, `${id}%`);
203
+ return sqlChanges(r) > 0;
204
+ }
205
+ cancelAllCheckbacks() {
206
+ const r = this.db
207
+ .prepare("UPDATE checkback SET status = 'cancelled', updated_at = ? WHERE status = 'active'")
208
+ .run(new Date().toISOString());
209
+ return sqlChanges(r);
210
+ }
211
+ cancelCheckbacksForPaneExpect(ownerPane, expect) {
212
+ const r = this.db
213
+ .prepare("UPDATE checkback SET status = 'cancelled', updated_at = ? WHERE status = 'active' AND owner_pane = ? AND expect = ?")
214
+ .run(new Date().toISOString(), ownerPane, expect);
215
+ return sqlChanges(r);
216
+ }
217
+ clearPaneOps() {
218
+ const rows = this.readPaneOps();
219
+ const open = rows.filter((r) => r.status === "pending" || r.status === "running");
220
+ const kept = rows.filter((r) => r.status !== "pending" && r.status !== "running");
221
+ if (open.length)
222
+ this.writePaneOps(kept);
223
+ return open.length;
224
+ }
225
+ readInbox() {
226
+ return sqlRows(this.db.prepare("SELECT * FROM inbox ORDER BY at").all(), rowToInbox);
227
+ }
228
+ writeInbox(rows) {
229
+ const del = this.db.prepare("DELETE FROM inbox");
230
+ const ins = this.db.prepare(`
231
+ INSERT INTO inbox(id, at, from_agent, slot, ports, msg, sent, sent_at, delivered_to, deliver_pane, deliver_mode, resolved, read_flag)
232
+ VALUES (@id, @at, @from, @slot, @ports, @msg, @sent, @sentAt, @deliveredTo, @deliverPane, @deliverMode, @resolved, @read)
233
+ `);
234
+ this.db.transaction(() => {
235
+ del.run();
236
+ for (const r of rows) {
237
+ ins.run({
238
+ ...r,
239
+ sent: bool(r.sent),
240
+ resolved: bool(r.resolved),
241
+ read: bool(r.read),
242
+ });
243
+ }
244
+ })();
245
+ }
246
+ appendInbox(row) {
247
+ this.db
248
+ .prepare(`
249
+ INSERT OR REPLACE INTO inbox(id, at, from_agent, slot, ports, msg, sent, sent_at, delivered_to, deliver_pane, deliver_mode, resolved, read_flag)
250
+ VALUES (@id, @at, @from, @slot, @ports, @msg, @sent, @sentAt, @deliveredTo, @deliverPane, @deliverMode, @resolved, @read)
251
+ `)
252
+ .run({
253
+ ...row,
254
+ sent: bool(row.sent),
255
+ resolved: bool(row.resolved),
256
+ read: bool(row.read),
257
+ });
258
+ }
259
+ resolveInbox(opts) {
260
+ const rows = this.readInbox();
261
+ const ids = [];
262
+ let resolved = 0;
263
+ for (const r of rows) {
264
+ if (r.resolved)
265
+ continue;
266
+ const hit = opts.all === true ||
267
+ (opts.id != null && (r.id === opts.id || r.id.startsWith(opts.id)));
268
+ if (!hit)
269
+ continue;
270
+ r.resolved = true;
271
+ r.read = true;
272
+ ids.push(r.id);
273
+ resolved++;
274
+ }
275
+ if (resolved > 0) {
276
+ const stmt = this.db.prepare("UPDATE inbox SET resolved = 1, read_flag = 1 WHERE id = ?");
277
+ for (const id of ids)
278
+ stmt.run(id);
279
+ }
280
+ return { resolved, ids };
281
+ }
282
+ readPeer() {
283
+ return dedupeJsonlRowsById(this.db
284
+ .prepare("SELECT * FROM peer ORDER BY at")
285
+ .all()
286
+ .map((row) => rowToPeer(row)));
287
+ }
288
+ writePeer(rows) {
289
+ const del = this.db.prepare("DELETE FROM peer");
290
+ const ins = this.db.prepare(`
291
+ INSERT INTO peer(id, at, kind, from_slot, from_ports, room_slug, from_agent, target_pane, target_label, msg, sent, sent_at, deliver_pane, deliver_mode)
292
+ VALUES (@id, @at, @kind, @fromSlot, @fromPorts, @roomSlug, @fromAgent, @targetPane, @targetLabel, @msg, @sent, @sentAt, @deliverPane, @deliverMode)
293
+ `);
294
+ this.db.transaction(() => {
295
+ del.run();
296
+ for (const r of rows) {
297
+ ins.run({ ...r, sent: bool(r.sent) });
298
+ }
299
+ })();
300
+ }
301
+ appendPeer(row) {
302
+ this.db
303
+ .prepare(`
304
+ INSERT OR REPLACE INTO peer(id, at, kind, from_slot, from_ports, room_slug, from_agent, target_pane, target_label, msg, sent, sent_at, deliver_pane, deliver_mode)
305
+ VALUES (@id, @at, @kind, @fromSlot, @fromPorts, @roomSlug, @fromAgent, @targetPane, @targetLabel, @msg, @sent, @sentAt, @deliverPane, @deliverMode)
306
+ `)
307
+ .run({ ...row, sent: bool(row.sent) });
308
+ }
309
+ appendPeers(rows) {
310
+ for (const row of rows)
311
+ this.appendPeer(row);
312
+ }
313
+ readPaneOps() {
314
+ return this.db
315
+ .prepare("SELECT row_json FROM pane_ops")
316
+ .all()
317
+ .map((row) => JSON.parse(String(row.row_json)));
318
+ }
319
+ writePaneOps(rows) {
320
+ const del = this.db.prepare("DELETE FROM pane_ops");
321
+ const ins = this.db.prepare("INSERT INTO pane_ops(id, row_json) VALUES (?, ?)");
322
+ this.db.transaction(() => {
323
+ del.run();
324
+ for (const r of rows)
325
+ ins.run(r.id, JSON.stringify(r));
326
+ })();
327
+ }
328
+ appendPaneOp(row) {
329
+ this.db
330
+ .prepare("INSERT OR REPLACE INTO pane_ops(id, row_json) VALUES (?, ?)")
331
+ .run(row.id, JSON.stringify(row));
332
+ }
333
+ updatePaneOp(row) {
334
+ this.appendPaneOp(row);
335
+ }
336
+ countPaneOpsPending() {
337
+ return this.readPaneOps().filter((r) => r.status === "pending" || r.status === "running").length;
338
+ }
339
+ formatInboxInject(row, targetRole = "manager") {
340
+ const from = String(row.from ?? "").trim();
341
+ const slot = row.slot != null ? String(row.slot) : "";
342
+ let who;
343
+ if (from === "secretary" || from === "manager" || slot === "secretary" || slot === "manager") {
344
+ who = from || slot;
345
+ }
346
+ else if (/^\d+$/.test(slot)) {
347
+ who = `slot-${slot}${row.ports ? ` (${row.ports})` : ""}`;
348
+ }
349
+ else {
350
+ who = from || slot || "unknown";
351
+ }
352
+ const body = String(row.msg || "").trim().slice(0, 400);
353
+ const label = targetRole === "secretary" ? `TO-SECRETARY from ${who}` : `TO-MASTER from ${who}`;
354
+ return formatMeshSteeringInject({ role: targetRole }, label, body);
355
+ }
356
+ compactPeer() {
357
+ const raw = this.db
358
+ .prepare("SELECT * FROM peer ORDER BY at")
359
+ .all()
360
+ .map((row) => rowToPeer(row));
361
+ const deduped = dedupeJsonlRowsById(raw);
362
+ if (deduped.length === raw.length)
363
+ return 0;
364
+ this.writePeer(deduped);
365
+ return raw.length - deduped.length;
366
+ }
367
+ }
368
+ function rowToInbox(row) {
369
+ return {
370
+ id: String(row.id),
371
+ at: String(row.at),
372
+ from: String(row.from_agent),
373
+ slot: row.slot != null ? String(row.slot) : null,
374
+ ports: row.ports != null ? String(row.ports) : null,
375
+ msg: String(row.msg),
376
+ sent: Number(row.sent) === 1,
377
+ sentAt: row.sent_at != null ? String(row.sent_at) : undefined,
378
+ deliveredTo: row.delivered_to != null ? String(row.delivered_to) : undefined,
379
+ deliverPane: row.deliver_pane != null ? String(row.deliver_pane) : undefined,
380
+ deliverMode: row.deliver_mode === "idle" || row.deliver_mode === "steer"
381
+ ? row.deliver_mode
382
+ : undefined,
383
+ resolved: Number(row.resolved) === 1,
384
+ read: Number(row.read_flag) === 1,
385
+ };
386
+ }
387
+ function rowToPeer(row) {
388
+ return {
389
+ id: String(row.id),
390
+ at: String(row.at),
391
+ kind: row.kind,
392
+ fromSlot: String(row.from_slot),
393
+ fromPorts: row.from_ports != null ? String(row.from_ports) : null,
394
+ roomSlug: row.room_slug != null ? String(row.room_slug) : null,
395
+ fromAgent: row.from_agent != null ? String(row.from_agent) : null,
396
+ targetPane: String(row.target_pane),
397
+ targetLabel: String(row.target_label),
398
+ msg: String(row.msg),
399
+ sent: Number(row.sent) === 1,
400
+ sentAt: row.sent_at != null ? String(row.sent_at) : undefined,
401
+ deliverPane: row.deliver_pane != null ? String(row.deliver_pane) : undefined,
402
+ deliverMode: row.deliver_mode === "idle" || row.deliver_mode === "steer"
403
+ ? row.deliver_mode
404
+ : undefined,
405
+ };
406
+ }
407
+ function rowToCheckback(row) {
408
+ return {
409
+ id: String(row.id),
410
+ kind: String(row.kind ?? ""),
411
+ status: row.status === "cancelled" ? "cancelled" : "active",
412
+ renewSec: row.renew_sec != null ? Number(row.renew_sec) : undefined,
413
+ expect: row.expect != null ? String(row.expect) : undefined,
414
+ ownerPane: row.owner_pane != null ? String(row.owner_pane) : undefined,
415
+ expiresAt: row.expires_at != null ? String(row.expires_at) : undefined,
416
+ senderLabel: row.sender_label != null ? String(row.sender_label) : undefined,
417
+ recipientLabel: row.recipient_label != null ? String(row.recipient_label) : undefined,
418
+ createdAt: String(row.created_at),
419
+ updatedAt: String(row.updated_at),
420
+ };
421
+ }
422
+ //# sourceMappingURL=sqlite-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../src/sqlite-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sqlite-store.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.test.d.ts","sourceRoot":"","sources":["../src/sqlite-store.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { describe, expect, it } from "vitest";
5
+ import { JsonlStore } from "./jsonl-store.js";
6
+ import { migrateJsonlDirToSqlite, SqliteStore } from "./sqlite-store.js";
7
+ describe("SqliteStore", () => {
8
+ it("roundtrips inbox and peer rows", () => {
9
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), "sm-sqlite-"));
10
+ const db = path.join(dir, "mesh.sqlite");
11
+ const store = new SqliteStore(db, path.join(dir, "daemon"));
12
+ store.appendInbox({
13
+ id: "in-1",
14
+ at: new Date().toISOString(),
15
+ from: "worker",
16
+ slot: "3",
17
+ ports: "3030/3031",
18
+ msg: "DONE: test",
19
+ sent: false,
20
+ resolved: false,
21
+ read: false,
22
+ });
23
+ store.appendPeer({
24
+ id: "pe-1",
25
+ at: new Date().toISOString(),
26
+ kind: "room",
27
+ fromSlot: "3",
28
+ fromPorts: null,
29
+ targetPane: "%0",
30
+ targetLabel: "slot-3",
31
+ msg: "FYI",
32
+ sent: false,
33
+ });
34
+ expect(store.readInbox()).toHaveLength(1);
35
+ expect(store.readPeer()).toHaveLength(1);
36
+ store.close();
37
+ });
38
+ it("migrates jsonl dir once", () => {
39
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), "sm-migrate-"));
40
+ const jsonlDir = path.join(dir, "daemon");
41
+ fs.mkdirSync(jsonlDir, { recursive: true });
42
+ const jl = new JsonlStore(jsonlDir);
43
+ jl.appendInbox({
44
+ id: "m1",
45
+ at: new Date().toISOString(),
46
+ from: "worker",
47
+ slot: "1",
48
+ ports: null,
49
+ msg: "migrate me",
50
+ sent: false,
51
+ resolved: false,
52
+ read: false,
53
+ });
54
+ const db = path.join(dir, "mesh.sqlite");
55
+ const log = [];
56
+ expect(migrateJsonlDirToSqlite(db, jsonlDir, (l) => log.push(l))).toBe(true);
57
+ const store = new SqliteStore(db, jsonlDir);
58
+ expect(store.readInbox()).toHaveLength(1);
59
+ expect(migrateJsonlDirToSqlite(db, jsonlDir, () => { })).toBe(false);
60
+ store.close();
61
+ });
62
+ });
63
+ //# sourceMappingURL=sqlite-store.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.test.js","sourceRoot":"","sources":["../src/sqlite-store.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * BullMQ worker definitions — one worker type per queue channel.
3
+ * Handlers call orchestrator drain + limit hooks; never tmux directly from producers.
4
+ */
5
+ export declare const QUEUE_NAMES: {
6
+ readonly inject: "mesh-inject";
7
+ readonly limits: "mesh-limits";
8
+ readonly connectivity: "mesh-connectivity";
9
+ readonly checkback: "mesh-checkback";
10
+ };
11
+ //# sourceMappingURL=workers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers.d.ts","sourceRoot":"","sources":["../src/workers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,WAAW;;;;;CAKd,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * BullMQ worker definitions — one worker type per queue channel.
3
+ * Handlers call orchestrator drain + limit hooks; never tmux directly from producers.
4
+ */
5
+ export const QUEUE_NAMES = {
6
+ inject: "mesh-inject",
7
+ limits: "mesh-limits",
8
+ connectivity: "mesh-connectivity",
9
+ checkback: "mesh-checkback",
10
+ };
11
+ // Phase 3: new Worker(QUEUE_NAMES.inject, processor, { connection })
12
+ //# sourceMappingURL=workers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers.js","sourceRoot":"","sources":["../src/workers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,aAAa;IACrB,YAAY,EAAE,mBAAmB;IACjC,SAAS,EAAE,gBAAgB;CACnB,CAAC;AAEX,qEAAqE"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@seat-mesh/daemon",
3
+ "version": "0.1.2",
4
+ "type": "module",
5
+ "description": "Inbox orchestrator — sole pane writer; BullMQ workers drain queues.",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "tsc -p tsconfig.json",
10
+ "typecheck": "tsc --noEmit -p tsconfig.json",
11
+ "prepublishOnly": "npm run build"
12
+ },
13
+ "dependencies": {
14
+ "@seat-mesh/core": "0.1.2",
15
+ "@seat-mesh/providers": "0.1.2",
16
+ "@seat-mesh/tmux": "0.1.2",
17
+ "better-sqlite3": "^11.8.1"
18
+ },
19
+ "devDependencies": {
20
+ "@types/better-sqlite3": "^7.6.12"
21
+ },
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ]
28
+ }