@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.
- package/dist/border-paint.d.ts +11 -0
- package/dist/border-paint.d.ts.map +1 -0
- package/dist/border-paint.js +163 -0
- package/dist/border-paint.js.map +1 -0
- package/dist/bullmq-runtime.d.ts +19 -0
- package/dist/bullmq-runtime.d.ts.map +1 -0
- package/dist/bullmq-runtime.js +78 -0
- package/dist/bullmq-runtime.js.map +1 -0
- package/dist/compose-gate.d.ts +18 -0
- package/dist/compose-gate.d.ts.map +1 -0
- package/dist/compose-gate.js +80 -0
- package/dist/compose-gate.js.map +1 -0
- package/dist/compose-gate.test.d.ts +2 -0
- package/dist/compose-gate.test.d.ts.map +1 -0
- package/dist/compose-gate.test.js +35 -0
- package/dist/compose-gate.test.js.map +1 -0
- package/dist/connectivity-recovery.d.ts +81 -0
- package/dist/connectivity-recovery.d.ts.map +1 -0
- package/dist/connectivity-recovery.js +454 -0
- package/dist/connectivity-recovery.js.map +1 -0
- package/dist/connectivity-recovery.test.d.ts +2 -0
- package/dist/connectivity-recovery.test.d.ts.map +1 -0
- package/dist/connectivity-recovery.test.js +147 -0
- package/dist/connectivity-recovery.test.js.map +1 -0
- package/dist/create-queue-store.d.ts +8 -0
- package/dist/create-queue-store.d.ts.map +1 -0
- package/dist/create-queue-store.js +13 -0
- package/dist/create-queue-store.js.map +1 -0
- package/dist/delivery-hold.d.ts +10 -0
- package/dist/delivery-hold.d.ts.map +1 -0
- package/dist/delivery-hold.js +21 -0
- package/dist/delivery-hold.js.map +1 -0
- package/dist/delivery-hold.test.d.ts +2 -0
- package/dist/delivery-hold.test.d.ts.map +1 -0
- package/dist/delivery-hold.test.js +35 -0
- package/dist/delivery-hold.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/inject-delivery.d.ts +26 -0
- package/dist/inject-delivery.d.ts.map +1 -0
- package/dist/inject-delivery.js +108 -0
- package/dist/inject-delivery.js.map +1 -0
- package/dist/inject-delivery.test.d.ts +2 -0
- package/dist/inject-delivery.test.d.ts.map +1 -0
- package/dist/inject-delivery.test.js +14 -0
- package/dist/inject-delivery.test.js.map +1 -0
- package/dist/jsonl-dedupe.test.d.ts +2 -0
- package/dist/jsonl-dedupe.test.d.ts.map +1 -0
- package/dist/jsonl-dedupe.test.js +27 -0
- package/dist/jsonl-dedupe.test.js.map +1 -0
- package/dist/jsonl-store.d.ts +103 -0
- package/dist/jsonl-store.d.ts.map +1 -0
- package/dist/jsonl-store.js +235 -0
- package/dist/jsonl-store.js.map +1 -0
- package/dist/mesh-inbox-server.d.ts +3 -0
- package/dist/mesh-inbox-server.d.ts.map +1 -0
- package/dist/mesh-inbox-server.js +483 -0
- package/dist/mesh-inbox-server.js.map +1 -0
- package/dist/mesh-inbox-supervisor.d.ts +3 -0
- package/dist/mesh-inbox-supervisor.d.ts.map +1 -0
- package/dist/mesh-inbox-supervisor.js +227 -0
- package/dist/mesh-inbox-supervisor.js.map +1 -0
- package/dist/mesh-orchestrator.d.ts +32 -0
- package/dist/mesh-orchestrator.d.ts.map +1 -0
- package/dist/mesh-orchestrator.js +340 -0
- package/dist/mesh-orchestrator.js.map +1 -0
- package/dist/oc-resume-ack.d.ts +32 -0
- package/dist/oc-resume-ack.d.ts.map +1 -0
- package/dist/oc-resume-ack.js +89 -0
- package/dist/oc-resume-ack.js.map +1 -0
- package/dist/oc-resume-ack.test.d.ts +2 -0
- package/dist/oc-resume-ack.test.d.ts.map +1 -0
- package/dist/oc-resume-ack.test.js +23 -0
- package/dist/oc-resume-ack.test.js.map +1 -0
- package/dist/oc-resume.d.ts +25 -0
- package/dist/oc-resume.d.ts.map +1 -0
- package/dist/oc-resume.js +102 -0
- package/dist/oc-resume.js.map +1 -0
- package/dist/orchestrator.d.ts +17 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +11 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/pane-ops-drain.d.ts +14 -0
- package/dist/pane-ops-drain.d.ts.map +1 -0
- package/dist/pane-ops-drain.js +53 -0
- package/dist/pane-ops-drain.js.map +1 -0
- package/dist/peer-backlog.d.ts +18 -0
- package/dist/peer-backlog.d.ts.map +1 -0
- package/dist/peer-backlog.js +137 -0
- package/dist/peer-backlog.js.map +1 -0
- package/dist/peer-comms-checkback.d.ts +5 -0
- package/dist/peer-comms-checkback.d.ts.map +1 -0
- package/dist/peer-comms-checkback.js +57 -0
- package/dist/peer-comms-checkback.js.map +1 -0
- package/dist/peer-skip.d.ts +10 -0
- package/dist/peer-skip.d.ts.map +1 -0
- package/dist/peer-skip.js +26 -0
- package/dist/peer-skip.js.map +1 -0
- package/dist/peer-skip.test.d.ts +2 -0
- package/dist/peer-skip.test.d.ts.map +1 -0
- package/dist/peer-skip.test.js +33 -0
- package/dist/peer-skip.test.js.map +1 -0
- package/dist/ppa-state.d.ts +32 -0
- package/dist/ppa-state.d.ts.map +1 -0
- package/dist/ppa-state.js +63 -0
- package/dist/ppa-state.js.map +1 -0
- package/dist/sqlite-store.d.ts +44 -0
- package/dist/sqlite-store.d.ts.map +1 -0
- package/dist/sqlite-store.js +422 -0
- package/dist/sqlite-store.js.map +1 -0
- package/dist/sqlite-store.test.d.ts +2 -0
- package/dist/sqlite-store.test.d.ts.map +1 -0
- package/dist/sqlite-store.test.js +63 -0
- package/dist/sqlite-store.test.js.map +1 -0
- package/dist/workers.d.ts +11 -0
- package/dist/workers.d.ts.map +1 -0
- package/dist/workers.js +12 -0
- package/dist/workers.js.map +1 -0
- 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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"}
|