@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,227 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Mesh inbox supervisor — keeps mesh-inbox-server alive (crash restart + dist HMR).
4
+ * Started by ./sm.sh engine (session up / reload / ensureMeshInbox), not by hand.
5
+ */
6
+ import { spawn } from "node:child_process";
7
+ import fs from "node:fs";
8
+ import http from "node:http";
9
+ import path from "node:path";
10
+ import { fileURLToPath } from "node:url";
11
+ import { loadProfile, meshRuntimePaths, resolveDaemonPort, seatMeshPackageRoot } from "@seat-mesh/core";
12
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
13
+ function parseArgs() {
14
+ const out = {};
15
+ const argv = process.argv.slice(2);
16
+ for (let i = 0; i < argv.length; i++) {
17
+ if (argv[i] === "--profile" && argv[i + 1])
18
+ out.profilePath = argv[++i];
19
+ }
20
+ return out;
21
+ }
22
+ function sleepMs(ms) {
23
+ return new Promise((r) => setTimeout(r, ms));
24
+ }
25
+ function processAlive(pid) {
26
+ try {
27
+ process.kill(pid, 0);
28
+ return true;
29
+ }
30
+ catch {
31
+ return false;
32
+ }
33
+ }
34
+ function appendLog(logPath, line) {
35
+ fs.mkdirSync(path.dirname(logPath), { recursive: true });
36
+ fs.appendFileSync(logPath, `${new Date().toISOString()} ${line}\n`, { encoding: "utf8" });
37
+ }
38
+ function fetchHealth(port) {
39
+ return new Promise((resolve) => {
40
+ const req = http.get(`http://127.0.0.1:${port}/health`, { timeout: 2000 }, (res) => {
41
+ const chunks = [];
42
+ res.on("data", (c) => chunks.push(c));
43
+ res.on("end", () => {
44
+ try {
45
+ resolve(JSON.parse(Buffer.concat(chunks).toString("utf8")));
46
+ }
47
+ catch {
48
+ resolve(null);
49
+ }
50
+ });
51
+ });
52
+ req.on("error", () => resolve(null));
53
+ req.on("timeout", () => {
54
+ req.destroy();
55
+ resolve(null);
56
+ });
57
+ });
58
+ }
59
+ async function waitForHealth(port, timeoutMs) {
60
+ const t0 = Date.now();
61
+ while (Date.now() - t0 < timeoutMs) {
62
+ const h = await fetchHealth(port);
63
+ if (h?.engine === "@seat-mesh/daemon" && h.ok === true)
64
+ return h;
65
+ await sleepMs(200);
66
+ }
67
+ return null;
68
+ }
69
+ async function main() {
70
+ const { profilePath } = parseArgs();
71
+ const loaded = loadProfile(profilePath);
72
+ const profile = loaded.profile;
73
+ const workspace = loaded.workspace;
74
+ const port = resolveDaemonPort(profile, workspace);
75
+ const restartDelayMs = profile.daemon?.restartDelayMs ?? 1500;
76
+ const hmrPollMs = profile.daemon?.hmrPollMs ?? 2000;
77
+ const rt = meshRuntimePaths(loaded);
78
+ const stateDir = rt.daemonDir;
79
+ const metaPath = rt.meshInboxMeta;
80
+ const stopPath = rt.meshInboxStop;
81
+ const logPath = rt.meshInboxLog;
82
+ const serverJs = path.join(seatMeshPackageRoot(), "packages/daemon/dist/mesh-inbox-server.js");
83
+ if (!fs.existsSync(serverJs)) {
84
+ console.error(`mesh-inbox-supervisor: missing ${serverJs} — run ./sm.sh reload`);
85
+ process.exit(1);
86
+ }
87
+ let shuttingDown = false;
88
+ let child = null;
89
+ let childStartedAt = 0;
90
+ let restarts = 0;
91
+ let lastBundleMtime = fs.statSync(serverJs).mtimeMs;
92
+ let logFd = null;
93
+ const supervisorStartedAt = new Date().toISOString();
94
+ const writeMeta = (childPid) => {
95
+ const meta = {
96
+ supervisorPid: process.pid,
97
+ pid: childPid,
98
+ port,
99
+ session: loaded.sessionName,
100
+ workspaceId: loaded.workspaceId,
101
+ watch: true,
102
+ hmr: true,
103
+ serverJs,
104
+ childStartedAt: childPid ? new Date(childStartedAt).toISOString() : undefined,
105
+ restarts,
106
+ startedAt: supervisorStartedAt,
107
+ };
108
+ fs.mkdirSync(stateDir, { recursive: true });
109
+ fs.writeFileSync(metaPath, JSON.stringify(meta, null, 2) + "\n");
110
+ };
111
+ const log = (msg) => {
112
+ appendLog(logPath, `[supervisor] ${msg}`);
113
+ console.error(`mesh-inbox-supervisor: ${msg}`);
114
+ };
115
+ const stopChild = (signal = "SIGTERM") => {
116
+ if (!child?.pid)
117
+ return;
118
+ try {
119
+ process.kill(child.pid, signal);
120
+ }
121
+ catch {
122
+ /* gone */
123
+ }
124
+ };
125
+ const spawnChild = async (reason) => {
126
+ if (shuttingDown)
127
+ return;
128
+ if (fs.existsSync(stopPath)) {
129
+ shuttingDown = true;
130
+ return;
131
+ }
132
+ if (logFd == null) {
133
+ fs.mkdirSync(path.dirname(logPath), { recursive: true });
134
+ logFd = fs.openSync(logPath, "a");
135
+ }
136
+ log(`spawn child (${reason})`);
137
+ child = spawn("node", [serverJs, "--profile", loaded.profilePath], {
138
+ cwd: workspace,
139
+ stdio: ["ignore", logFd, logFd],
140
+ env: { ...process.env, MESH_INBOX_SUPERVISED: "1" },
141
+ });
142
+ childStartedAt = Date.now();
143
+ lastBundleMtime = fs.statSync(serverJs).mtimeMs;
144
+ child.on("exit", (code, signal) => {
145
+ child = null;
146
+ writeMeta(undefined);
147
+ if (shuttingDown) {
148
+ log(`child exit during shutdown code=${code ?? "?"} signal=${signal ?? "-"}`);
149
+ return;
150
+ }
151
+ restarts++;
152
+ log(`child exit code=${code ?? "?"} signal=${signal ?? "-"} — restart in ${restartDelayMs}ms (#${restarts})`);
153
+ setTimeout(() => {
154
+ void spawnChild("crash-restart");
155
+ }, restartDelayMs);
156
+ });
157
+ const health = await waitForHealth(port, 15_000);
158
+ if (!health) {
159
+ log("WARN: child did not become healthy in 15s");
160
+ writeMeta(child.pid ?? undefined);
161
+ return;
162
+ }
163
+ writeMeta(Number(health.pid ?? child.pid ?? 0) || child.pid);
164
+ log(`child healthy pid=${String(health.pid ?? child.pid ?? "?")}`);
165
+ };
166
+ const shutdown = (why) => {
167
+ if (shuttingDown)
168
+ return;
169
+ shuttingDown = true;
170
+ log(`shutdown (${why})`);
171
+ stopChild("SIGTERM");
172
+ setTimeout(() => stopChild("SIGKILL"), 3000);
173
+ if (fs.existsSync(stopPath)) {
174
+ try {
175
+ fs.unlinkSync(stopPath);
176
+ }
177
+ catch {
178
+ /* ignore */
179
+ }
180
+ }
181
+ setTimeout(() => process.exit(0), 500);
182
+ };
183
+ process.on("SIGTERM", () => shutdown("SIGTERM"));
184
+ process.on("SIGINT", () => shutdown("SIGINT"));
185
+ writeMeta(undefined);
186
+ log(`watching ${serverJs} port=:${port} restartDelay=${restartDelayMs}ms hmrPoll=${hmrPollMs}ms`);
187
+ await spawnChild("initial");
188
+ setInterval(() => {
189
+ if (shuttingDown || !child?.pid)
190
+ return;
191
+ if (fs.existsSync(stopPath)) {
192
+ shutdown("stop-file");
193
+ return;
194
+ }
195
+ try {
196
+ const mtime = fs.statSync(serverJs).mtimeMs;
197
+ if (mtime > lastBundleMtime + 1) {
198
+ lastBundleMtime = mtime;
199
+ log("HMR: server bundle changed — restarting child");
200
+ stopChild("SIGTERM");
201
+ }
202
+ }
203
+ catch (e) {
204
+ log(`hmr stat error ${e.message}`);
205
+ }
206
+ }, hmrPollMs);
207
+ // Keep supervisor alive even if spawnChild throws once.
208
+ setInterval(() => {
209
+ if (shuttingDown)
210
+ return;
211
+ if (fs.existsSync(stopPath)) {
212
+ shutdown("stop-file");
213
+ return;
214
+ }
215
+ if (!child?.pid && !shuttingDown) {
216
+ void spawnChild("orphan-recover");
217
+ }
218
+ else if (child?.pid && !processAlive(child.pid)) {
219
+ child = null;
220
+ }
221
+ }, Math.max(hmrPollMs, 3000));
222
+ }
223
+ void main().catch((e) => {
224
+ console.error(`mesh-inbox-supervisor fatal: ${e.message}`);
225
+ process.exit(1);
226
+ });
227
+ //# sourceMappingURL=mesh-inbox-supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-inbox-supervisor.js","sourceRoot":"","sources":["../src/mesh-inbox-supervisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { LoadedProfile, ProviderRegistry } from "@seat-mesh/core";
2
+ import type { ToMasterRow } from "./create-queue-store.js";
3
+ import type { QueueStore } from "./create-queue-store.js";
4
+ import { type PaneOpsDrainCtx } from "./pane-ops-drain.js";
5
+ export interface MeshOrchestratorCtx {
6
+ loaded: LoadedProfile;
7
+ registry: ProviderRegistry;
8
+ store: QueueStore;
9
+ session: string;
10
+ baseWindow: string;
11
+ workersWindow: string;
12
+ minisWindow: string;
13
+ log: (line: string) => void;
14
+ ocLimitedPaneIds: Set<string>;
15
+ proxyDownActive?: boolean;
16
+ paneOps?: PaneOpsDrainCtx;
17
+ }
18
+ export interface DrainTickResult {
19
+ attempted: number;
20
+ delivered: number;
21
+ held: number;
22
+ }
23
+ /** ACK-class worker mail -> secretary first (harness parity); substance -> manager. */
24
+ export declare function isAckClassInbox(row: ToMasterRow): boolean;
25
+ /** Harness parity: secretary ACK lane + manager substance lane each poll tick. */
26
+ export declare function drainInboxOnce(ctx: MeshOrchestratorCtx): DrainTickResult;
27
+ export declare function drainPeerOnce(ctx: MeshOrchestratorCtx): DrainTickResult;
28
+ export declare function fireDueCheckbacks(ctx: MeshOrchestratorCtx): void;
29
+ export declare function orchestratorDrainTick(ctx: MeshOrchestratorCtx): DrainTickResult;
30
+ /** Yield between heavy steps so daemon /health can answer during drain. */
31
+ export declare function orchestratorDrainTickAsync(ctx: MeshOrchestratorCtx): Promise<DrainTickResult>;
32
+ //# sourceMappingURL=mesh-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-orchestrator.d.ts","sourceRoot":"","sources":["../src/mesh-orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAevE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAiB7E,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;AASD,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;AAgDD,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,GAAG,EAAE,mBAAmB,GAAG,eAAe,CAQxE;AAkBD,wBAAgB,aAAa,CAAC,GAAG,EAAE,mBAAmB,GAAG,eAAe,CAyGvE;AAKD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAyHhE;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"}
@@ -0,0 +1,340 @@
1
+ import { formatCompactSeat, formatGenericCheckback, formatRoomCallCheckback, formatRoomCommsCheckback, isRoomCallExpect, } from "@seat-mesh/core";
2
+ import { buildMiniCampaignDigest, capturePaneSnapshot, meshManagerPane, meshSecretaryPane, paneMetaForPane, } from "@seat-mesh/tmux";
3
+ import { paintMeshBorders } from "./border-paint.js";
4
+ import { deliverToPane } from "./inject-delivery.js";
5
+ import { isInboxDelivered } from "./create-queue-store.js";
6
+ import { drainPaneOpsOnce } from "./pane-ops-drain.js";
7
+ import { armRecipientCheckbackAfterPeer } from "./peer-comms-checkback.js";
8
+ import { isAckClassPeer, parkPeerToBacklog, pendingPeerRows, promotePeerBacklog, shouldBacklogPeerHold, } from "./peer-backlog.js";
9
+ import { markPeerRowSkipped, shouldSkipDeliveredColdStart, shouldSkipGlobalWorkerRoomPing, } from "./peer-skip.js";
10
+ import { deliveryHoldForPane } from "./delivery-hold.js";
11
+ import { markColdStartDelivered } from "@seat-mesh/tmux";
12
+ function borderConnectivity(ctx) {
13
+ return {
14
+ proxyDownActive: ctx.proxyDownActive === true,
15
+ ocLimitedPaneIds: ctx.ocLimitedPaneIds,
16
+ };
17
+ }
18
+ /** ACK-class worker mail -> secretary first (harness parity); substance -> manager. */
19
+ export function isAckClassInbox(row) {
20
+ const msg = String(row.msg ?? "").trim();
21
+ return /^(ACK|FYI|STAND-?BY|BUSY|MCP-?SYNCED)\b/i.test(msg);
22
+ }
23
+ function drainInboxLaneOnce(ctx, lane) {
24
+ const rows = ctx.store.readInbox();
25
+ const row = rows.find((r) => {
26
+ if (r.resolved || isInboxDelivered(r))
27
+ return false;
28
+ const ack = isAckClassInbox(r);
29
+ return lane === "secretary" ? ack : !ack;
30
+ });
31
+ if (!row)
32
+ return { attempted: 0, delivered: 0, held: 0 };
33
+ if (row.sent && !row.sentAt) {
34
+ ctx.log(`INBOX forge-reset id=${row.id} (sent:true without sentAt/deliverPane)`);
35
+ row.sent = false;
36
+ }
37
+ const secPane = meshSecretaryPane(ctx.session, ctx.baseWindow);
38
+ const mgrPane = meshManagerPane(ctx.session, ctx.baseWindow);
39
+ const targetPane = lane === "secretary" ? secPane : mgrPane;
40
+ if (!targetPane)
41
+ return { attempted: 0, delivered: 0, held: 0 };
42
+ const payload = ctx.store.formatInboxInject(row, lane);
43
+ const hold = deliveryHoldForPane(ctx, targetPane);
44
+ if (hold.hold) {
45
+ ctx.log(`INBOX held id=${row.id} lane=${lane} reason=${hold.reason}`);
46
+ return { attempted: 1, delivered: 0, held: 1 };
47
+ }
48
+ const result = deliverToPane(targetPane, payload, ctx.registry);
49
+ if (!result.ok) {
50
+ ctx.log(`INBOX held id=${row.id} lane=${lane} reason=${result.reason}`);
51
+ return { attempted: 1, delivered: 0, held: 1 };
52
+ }
53
+ const at = new Date().toISOString();
54
+ row.sent = true;
55
+ row.sentAt = at;
56
+ row.deliveredTo = lane === "secretary" ? "secretary" : "manager";
57
+ row.deliverPane = targetPane;
58
+ row.deliverMode = result.mode;
59
+ ctx.store.writeInbox(rows);
60
+ ctx.log(`INBOX inject id=${row.id} lane=${lane} slot=${row.slot ?? "-"} to=${row.deliveredTo} provider=${result.providerId} mode=${result.mode} verified=${result.verified}`);
61
+ return { attempted: 1, delivered: 1, held: 0 };
62
+ }
63
+ /** Harness parity: secretary ACK lane + manager substance lane each poll tick. */
64
+ export function drainInboxOnce(ctx) {
65
+ const sec = drainInboxLaneOnce(ctx, "secretary");
66
+ const mgr = drainInboxLaneOnce(ctx, "manager");
67
+ return {
68
+ attempted: sec.attempted + mgr.attempted,
69
+ delivered: sec.delivered + mgr.delivered,
70
+ held: sec.held + mgr.held,
71
+ };
72
+ }
73
+ /** Permanent skip only — transient holds (plain_shell during launch) must retry. */
74
+ const PEER_SKIP_REASONS = new Set(["no_snapshot", "no_provider"]);
75
+ const PEER_KIND_PRIORITY = {
76
+ prompt: 0,
77
+ remind: 1,
78
+ "to-slot": 2,
79
+ "to-mini": 3,
80
+ room: 4,
81
+ };
82
+ function peerRowPriority(row) {
83
+ if (row.fromSlot === "mesh-cold-start")
84
+ return -1;
85
+ return PEER_KIND_PRIORITY[row.kind] ?? 9;
86
+ }
87
+ export function drainPeerOnce(ctx) {
88
+ promotePeerBacklog(ctx.store, ctx.registry, ctx.log);
89
+ const compacted = ctx.store.compactPeer();
90
+ if (compacted > 0) {
91
+ ctx.log(`PEER compact removed ${compacted} duplicate row(s)`);
92
+ }
93
+ const pending = pendingPeerRows(ctx.store).sort((a, b) => peerRowPriority(a) - peerRowPriority(b) || a.at.localeCompare(b.at));
94
+ if (!pending.length)
95
+ return { attempted: 0, delivered: 0, held: 0 };
96
+ let attempted = 0;
97
+ let delivered = 0;
98
+ let held = 0;
99
+ for (const row of pending) {
100
+ if (row.sent && !row.sentAt) {
101
+ ctx.log(`PEER forge-reset id=${row.id} (sent:true without proof)`);
102
+ row.sent = false;
103
+ }
104
+ if (shouldSkipDeliveredColdStart(row)) {
105
+ markPeerRowSkipped(ctx.store, row);
106
+ ctx.log(`PEER skip id=${row.id.slice(0, 8)} -> ${row.targetLabel} reason=cold-start-already-delivered`);
107
+ continue;
108
+ }
109
+ if (shouldSkipGlobalWorkerRoomPing(row)) {
110
+ markPeerRowSkipped(ctx.store, row);
111
+ ctx.log(`PEER skip id=${row.id} -> ${row.targetLabel} reason=global-worker-thin-fyi`);
112
+ continue;
113
+ }
114
+ const isColdStart = row.fromSlot === "mesh-cold-start";
115
+ const hold = deliveryHoldForPane(ctx, row.targetPane, { isColdStart });
116
+ if (hold.hold) {
117
+ ctx.log(`PEER held id=${row.id.slice(0, 8)} -> ${row.targetLabel} reason=${hold.reason}`);
118
+ held++;
119
+ continue;
120
+ }
121
+ attempted++;
122
+ const roomPing = row.kind === "room";
123
+ const thinRoomPing = roomPing && /\[mesh-inbox-room\]/.test(row.msg);
124
+ const toManager = row.targetLabel === "manager" ||
125
+ row.targetLabel === "master" ||
126
+ row.targetLabel === "manager" ||
127
+ paneMetaForPane(row.targetPane)?.role === "manager";
128
+ const lightweight = isAckClassPeer(row.msg) || roomPing;
129
+ const result = deliverToPane(row.targetPane, row.msg, ctx.registry, {
130
+ lightweight,
131
+ // Thin room ledger pings bypass coord idle-settle (manager/manager-b/secretary).
132
+ roomPing: thinRoomPing || (roomPing && !toManager),
133
+ });
134
+ if (!result.ok) {
135
+ if (PEER_SKIP_REASONS.has(result.reason)) {
136
+ const rows = ctx.store.readPeer();
137
+ const i = rows.findIndex((r) => r.id === row.id);
138
+ if (i >= 0) {
139
+ rows[i].sent = true;
140
+ rows[i].sentAt = new Date().toISOString();
141
+ rows[i].deliverPane = "skipped";
142
+ rows[i].deliverMode = "idle";
143
+ ctx.store.writePeer(rows);
144
+ }
145
+ ctx.log(`PEER skip id=${row.id} -> ${row.targetLabel} reason=${result.reason}`);
146
+ continue;
147
+ }
148
+ if (shouldBacklogPeerHold(result.reason, row.msg)) {
149
+ parkPeerToBacklog(ctx.store, row, result.reason, ctx.log);
150
+ continue;
151
+ }
152
+ ctx.log(`PEER held id=${row.id} reason=${result.reason}`);
153
+ held++;
154
+ continue;
155
+ }
156
+ const rows = ctx.store.readPeer();
157
+ const i = rows.findIndex((r) => r.id === row.id);
158
+ if (i >= 0) {
159
+ rows[i].sent = true;
160
+ rows[i].sentAt = new Date().toISOString();
161
+ rows[i].deliverPane = row.targetPane;
162
+ rows[i].deliverMode = result.mode;
163
+ ctx.store.writePeer(rows);
164
+ }
165
+ const from = row.kind === "room"
166
+ ? row.fromSlot
167
+ : row.kind === "prompt" || row.kind === "remind"
168
+ ? row.fromSlot
169
+ : `slot-${row.fromSlot}`;
170
+ ctx.log(`PEER inject ${row.kind} -> ${row.targetLabel} from ${from} provider=${result.providerId} mode=${result.mode}`);
171
+ if (isColdStart) {
172
+ markColdStartDelivered(ctx.loaded, row.targetPane);
173
+ }
174
+ armRecipientCheckbackAfterPeer(ctx.store, ctx.loaded, row);
175
+ delivered++;
176
+ }
177
+ return { attempted, delivered, held };
178
+ }
179
+ /** Max due checkbacks handled per drain tick — avoids wedging /health on burst renew. */
180
+ const CHECKBACK_FIRE_BUDGET = 1;
181
+ export function fireDueCheckbacks(ctx) {
182
+ const now = Date.now();
183
+ const rows = ctx.store.readCheckbacks();
184
+ let processed = 0;
185
+ for (const row of rows) {
186
+ if (row.status !== "active")
187
+ continue;
188
+ const exp = row.expiresAt ? Date.parse(row.expiresAt) : 0;
189
+ if (!exp || exp > now)
190
+ continue;
191
+ if (processed >= CHECKBACK_FIRE_BUDGET)
192
+ break;
193
+ processed++;
194
+ const pane = row.ownerPane;
195
+ if (!pane)
196
+ continue;
197
+ if (row.kind === "mesh-watch") {
198
+ const digest = buildMiniCampaignDigest(ctx.loaded);
199
+ if (digest.allDone) {
200
+ row.status = "cancelled";
201
+ row.updatedAt = new Date().toISOString();
202
+ ctx.log(`mesh-watch AUTO-OFF campaign complete ${digest.done}/${digest.total}`);
203
+ continue;
204
+ }
205
+ const mgrPane = meshManagerPane(ctx.session, ctx.baseWindow);
206
+ const digestBlock = `[mesh-inbox] DIGEST: ${digest.text}`;
207
+ if (mgrPane) {
208
+ deliverToPane(mgrPane, digestBlock, ctx.registry, { skipVerify: true });
209
+ }
210
+ const secMsg = `${formatCompactSeat({ role: "secretary" })} | [mesh-inbox] DIGEST INCOMPLETE: ${digest.done}/${digest.total} open=[${digest.openIds.join(",")}] — ./sm.sh secretary collect --nudge`;
211
+ deliverToPane(pane, secMsg, ctx.registry, { skipVerify: true });
212
+ ctx.log(`mesh-watch digest done=${digest.done}/${digest.total} open=${digest.openIds.join(",") || "none"}`);
213
+ }
214
+ else if (row.kind === "manager-nudge") {
215
+ // Supervisee is always manager — never worker slots 1-8 / minis.
216
+ const mgrPane = meshManagerPane(ctx.session, ctx.baseWindow) || undefined;
217
+ if (mgrPane && pane && pane !== mgrPane) {
218
+ ctx.log(`manager-nudge retarget ${pane} -> ${mgrPane} (supervisee must be manager)`);
219
+ row.ownerPane = mgrPane;
220
+ ctx.store.writeCheckbacks(rows);
221
+ }
222
+ if (mgrPane) {
223
+ const snap = capturePaneSnapshot(mgrPane);
224
+ const prov = snap ? ctx.registry.detect(snap) : null;
225
+ const state = prov && snap ? prov.composerState(snap) : null;
226
+ const idle = !state ||
227
+ state.phase === "empty" ||
228
+ state.phase === "afk" ||
229
+ state.phase === "plain_shell";
230
+ if (idle) {
231
+ const msg = "[mesh-inbox] CONTINUE: read manager/FOCUS + seat-mesh/TODO; next authorized slice (no operator yes/continue)";
232
+ const r = deliverToPane(mgrPane, msg, ctx.registry, { skipVerify: true });
233
+ ctx.log(`manager-nudge ${r.ok ? "delivered" : `held:${r.reason}`} pane=${mgrPane}`);
234
+ }
235
+ else {
236
+ ctx.log(`manager-nudge skip (phase=${state?.phase ?? "?"}) pane=${mgrPane}`);
237
+ }
238
+ }
239
+ }
240
+ else if (row.kind === "secretary-supervise") {
241
+ const secMsg = `${formatCompactSeat({ role: "secretary" })} | [mesh-inbox] SUPERVISE: ./sm.sh contexts; idle manager + open FOCUS -> to-master CONTINUE`;
242
+ const r = deliverToPane(pane, secMsg, ctx.registry, { skipVerify: true });
243
+ ctx.log(`secretary-supervise ${r.ok ? "delivered" : `held:${r.reason}`} pane=${pane}`);
244
+ }
245
+ else if (row.expect && (row.kind === "room-call" || isRoomCallExpect(row.expect))) {
246
+ const meta = pane ? paneMetaForPane(pane) : null;
247
+ const msg = formatRoomCallCheckback(row.expect, {
248
+ role: meta?.role || row.recipientLabel || "worker",
249
+ slot: meta?.slot,
250
+ mini: meta?.mini,
251
+ ports: meta?.ports,
252
+ workerCount: ctx.loaded.profile.session.workerCount,
253
+ miniMax: ctx.loaded.profile.session.miniMax,
254
+ });
255
+ const r = deliverToPane(pane, msg, ctx.registry, { skipVerify: true });
256
+ if (!r.ok)
257
+ continue;
258
+ ctx.log(`room-call checkback pane=${pane} expect=${row.expect}`);
259
+ }
260
+ else if (row.expect &&
261
+ (row.kind === "room-comms" || row.expect.startsWith("chat-room:"))) {
262
+ const meta = pane ? paneMetaForPane(pane) : null;
263
+ const msg = formatRoomCommsCheckback(row.expect, {
264
+ role: meta?.role || row.recipientLabel || "worker",
265
+ slot: meta?.slot,
266
+ mini: meta?.mini,
267
+ ports: meta?.ports,
268
+ workerCount: ctx.loaded.profile.session.workerCount,
269
+ miniMax: ctx.loaded.profile.session.miniMax,
270
+ });
271
+ const r = deliverToPane(pane, msg, ctx.registry, { skipVerify: true });
272
+ if (!r.ok)
273
+ continue;
274
+ ctx.log(`room-comms checkback pane=${pane} expect=${row.expect}`);
275
+ }
276
+ else {
277
+ const meta = pane ? paneMetaForPane(pane) : null;
278
+ const cbCtx = {
279
+ role: meta?.role || row.recipientLabel || "worker",
280
+ slot: meta?.slot,
281
+ mini: meta?.mini,
282
+ ports: meta?.ports,
283
+ workerCount: ctx.loaded.profile.session.workerCount,
284
+ miniMax: ctx.loaded.profile.session.miniMax,
285
+ };
286
+ const expect = row.expect ?? row.kind;
287
+ const msg = formatGenericCheckback(expect, cbCtx);
288
+ const r = deliverToPane(pane, msg, ctx.registry, { skipVerify: true });
289
+ if (!r.ok)
290
+ continue;
291
+ ctx.log(`checkback pane=${pane} expect=${expect.slice(0, 80)}`);
292
+ }
293
+ if (row.renewSec && row.renewSec > 0) {
294
+ row.expiresAt = new Date(now + row.renewSec * 1000).toISOString();
295
+ row.updatedAt = new Date().toISOString();
296
+ }
297
+ else {
298
+ row.status = "cancelled";
299
+ row.updatedAt = new Date().toISOString();
300
+ }
301
+ }
302
+ ctx.store.writeCheckbacks(rows);
303
+ }
304
+ function yieldEventLoop() {
305
+ return new Promise((resolve) => setImmediate(resolve));
306
+ }
307
+ export function orchestratorDrainTick(ctx) {
308
+ if (ctx.paneOps) {
309
+ drainPaneOpsOnce(ctx.paneOps);
310
+ }
311
+ const a = drainInboxOnce(ctx);
312
+ const b = drainPeerOnce(ctx);
313
+ fireDueCheckbacks(ctx);
314
+ paintMeshBorders(ctx.loaded, ctx.registry, ctx.store, ctx.session, ctx.baseWindow, ctx.workersWindow, ctx.minisWindow, new Set(), borderConnectivity(ctx), ctx.store.stateDir);
315
+ return {
316
+ attempted: a.attempted + b.attempted,
317
+ delivered: a.delivered + b.delivered,
318
+ held: a.held + b.held,
319
+ };
320
+ }
321
+ /** Yield between heavy steps so daemon /health can answer during drain. */
322
+ export async function orchestratorDrainTickAsync(ctx) {
323
+ if (ctx.paneOps) {
324
+ drainPaneOpsOnce(ctx.paneOps);
325
+ }
326
+ await yieldEventLoop();
327
+ const a = drainInboxOnce(ctx);
328
+ await yieldEventLoop();
329
+ const b = drainPeerOnce(ctx);
330
+ await yieldEventLoop();
331
+ fireDueCheckbacks(ctx);
332
+ await yieldEventLoop();
333
+ paintMeshBorders(ctx.loaded, ctx.registry, ctx.store, ctx.session, ctx.baseWindow, ctx.workersWindow, ctx.minisWindow, new Set(), borderConnectivity(ctx), ctx.store.stateDir);
334
+ return {
335
+ attempted: a.attempted + b.attempted,
336
+ delivered: a.delivered + b.delivered,
337
+ held: a.held + b.held,
338
+ };
339
+ }
340
+ //# sourceMappingURL=mesh-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-orchestrator.js","sourceRoot":"","sources":["../src/mesh-orchestrator.ts"],"names":[],"mappings":"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"}