@seat-mesh/daemon 0.1.24 → 0.1.25
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.map +1 -1
- package/dist/border-paint.js +23 -18
- package/dist/border-paint.js.map +1 -1
- package/dist/compose-gate.d.ts +5 -0
- package/dist/compose-gate.d.ts.map +1 -1
- package/dist/compose-gate.js +13 -1
- package/dist/compose-gate.js.map +1 -1
- package/dist/connectivity-recovery.d.ts +5 -0
- package/dist/connectivity-recovery.d.ts.map +1 -1
- package/dist/connectivity-recovery.js +75 -14
- package/dist/connectivity-recovery.js.map +1 -1
- package/dist/connectivity-recovery.test.js +24 -1
- package/dist/connectivity-recovery.test.js.map +1 -1
- package/dist/delivery-hold.d.ts +1 -0
- package/dist/delivery-hold.d.ts.map +1 -1
- package/dist/delivery-hold.js +16 -3
- package/dist/delivery-hold.js.map +1 -1
- package/dist/inbox-overload.d.ts.map +1 -1
- package/dist/inbox-overload.js +3 -6
- package/dist/inbox-overload.js.map +1 -1
- package/dist/inbox-overload.test.js +2 -2
- package/dist/inject-delivery.d.ts +2 -0
- package/dist/inject-delivery.d.ts.map +1 -1
- package/dist/inject-delivery.js +17 -6
- package/dist/inject-delivery.js.map +1 -1
- package/dist/inject-delivery.test.js +2 -1
- package/dist/inject-delivery.test.js.map +1 -1
- package/dist/mesh-inbox-server.js +62 -1
- package/dist/mesh-inbox-server.js.map +1 -1
- package/dist/mesh-orchestrator.d.ts.map +1 -1
- package/dist/mesh-orchestrator.js +43 -7
- package/dist/mesh-orchestrator.js.map +1 -1
- package/dist/notify-act-ui.d.ts +7 -0
- package/dist/notify-act-ui.d.ts.map +1 -0
- package/dist/notify-act-ui.js +59 -0
- package/dist/notify-act-ui.js.map +1 -0
- package/dist/notify-act.d.ts +45 -0
- package/dist/notify-act.d.ts.map +1 -0
- package/dist/notify-act.js +130 -0
- package/dist/notify-act.js.map +1 -0
- package/dist/notify-act.test.d.ts +2 -0
- package/dist/notify-act.test.d.ts.map +1 -0
- package/dist/notify-act.test.js +29 -0
- package/dist/notify-act.test.js.map +1 -0
- package/dist/oc-resume.d.ts +3 -3
- package/dist/oc-resume.d.ts.map +1 -1
- package/dist/oc-resume.js +22 -40
- package/dist/oc-resume.js.map +1 -1
- package/dist/peer-pending.d.ts +9 -0
- package/dist/peer-pending.d.ts.map +1 -0
- package/dist/peer-pending.js +19 -0
- package/dist/peer-pending.js.map +1 -0
- package/dist/peer-pending.test.d.ts +2 -0
- package/dist/peer-pending.test.d.ts.map +1 -0
- package/dist/peer-pending.test.js +42 -0
- package/dist/peer-pending.test.js.map +1 -0
- package/dist/peer-skip.d.ts +3 -0
- package/dist/peer-skip.d.ts.map +1 -1
- package/dist/peer-skip.js +9 -0
- package/dist/peer-skip.js.map +1 -1
- package/dist/peer-target-resolve.d.ts +8 -0
- package/dist/peer-target-resolve.d.ts.map +1 -0
- package/dist/peer-target-resolve.js +13 -0
- package/dist/peer-target-resolve.js.map +1 -0
- package/package.json +4 -4
package/dist/oc-resume.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oc-resume.d.ts","sourceRoot":"","sources":["../src/oc-resume.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oc-resume.d.ts","sourceRoot":"","sources":["../src/oc-resume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAIL,iBAAiB,EAEjB,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAC7B,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC,wGAAwG;AACxG,eAAO,MAAM,gBAAgB,QAE+E,CAAC;AAE7G,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,gBAA6B,GACnC,IAAI,CAEN;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,IAAI,CAWN;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,GACzB;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAchD;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAiBxD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,cAAc,GACpB,IAAI,CAwBN"}
|
package/dist/oc-resume.js
CHANGED
|
@@ -1,51 +1,23 @@
|
|
|
1
|
-
import { spawnSync } from "node:child_process";
|
|
2
|
-
import path from "node:path";
|
|
3
1
|
import { formatOpenCodeResumeCommand } from "@seat-mesh/providers";
|
|
4
|
-
import { capturePaneSnapshot, injectToPane, withPaneInputEnabled } from "@seat-mesh/tmux";
|
|
5
|
-
|
|
6
|
-
export const INBOX_NOTIFY_SLOT = "inbox";
|
|
2
|
+
import { capturePaneSnapshot, injectToPane, withPaneInputEnabled, INBOX_NOTIFY_SLOT, runInboxDesktopNotifySync, } from "@seat-mesh/tmux";
|
|
3
|
+
export { INBOX_NOTIFY_SLOT };
|
|
7
4
|
/** Shown on resume-sent / ack toasts so operator knows ack is inbox-automatic, not a manual command. */
|
|
8
5
|
export const RESUME_ACK_HOWTO = "Ack: automatic — when the OC composer is back (limit screen gone), inbox clears the OC-LIMIT border on that pane. " +
|
|
9
6
|
"Complete toast = all borders cleared. Incomplete after 5m = eyeball stuck panes. Nothing for you to run.";
|
|
10
|
-
function phaseLabel(phase) {
|
|
11
|
-
switch (phase) {
|
|
12
|
-
case "starting":
|
|
13
|
-
return "starting";
|
|
14
|
-
case "sent":
|
|
15
|
-
return "resume sent";
|
|
16
|
-
case "complete":
|
|
17
|
-
return "complete";
|
|
18
|
-
case "incomplete":
|
|
19
|
-
return "incomplete";
|
|
20
|
-
case "escalating":
|
|
21
|
-
return "escalating";
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
function notifyInbox(workspace, phase, topic, sessionAbout, check) {
|
|
25
|
-
const notifySh = path.join(workspace, "scripts/notify.sh");
|
|
26
|
-
const title = `${INBOX_NOTIFY_SLOT} · ${topic} (${phaseLabel(phase)})`;
|
|
27
|
-
let body = sessionAbout;
|
|
28
|
-
if (check)
|
|
29
|
-
body += `\n\nCheck: ${check}`;
|
|
30
|
-
try {
|
|
31
|
-
spawnSync("bash", [notifySh, title, body], {
|
|
32
|
-
encoding: "utf8",
|
|
33
|
-
timeout: 5000,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
/* notify optional */
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
7
|
export function notifyConnectivityStatus(workspace, topic, sessionAbout, check, phase = "starting") {
|
|
41
|
-
|
|
8
|
+
runInboxDesktopNotifySync(workspace, { topic, phase, sessionAbout, check });
|
|
42
9
|
}
|
|
43
10
|
/** @deprecated Use resume wave notify with carrier meta instead. */
|
|
44
11
|
export function notifyProxyCarrierIp(workspace, fromIp, toIp, reason) {
|
|
45
12
|
const sessionAbout = fromIp && fromIp !== toIp
|
|
46
13
|
? `Proxy ${reason}: carrier ${fromIp} -> ${toIp}.`
|
|
47
14
|
: `Proxy ${reason}: carrier ${toIp}.`;
|
|
48
|
-
|
|
15
|
+
runInboxDesktopNotifySync(workspace, {
|
|
16
|
+
phase: "sent",
|
|
17
|
+
topic: "Proxy rotate",
|
|
18
|
+
sessionAbout,
|
|
19
|
+
check: "Waiting for OC panes to confirm resume...",
|
|
20
|
+
});
|
|
49
21
|
}
|
|
50
22
|
export function resumeOneOpenCodePane(paneId, registry) {
|
|
51
23
|
const snap = capturePaneSnapshot(paneId);
|
|
@@ -60,7 +32,7 @@ export function resumeOneOpenCodePane(paneId, registry) {
|
|
|
60
32
|
const plan = prov.injectPlan(snap);
|
|
61
33
|
let ok = false;
|
|
62
34
|
withPaneInputEnabled(paneId, () => {
|
|
63
|
-
injectToPane(paneId, cmd, plan, prov.id, snap.captureTail);
|
|
35
|
+
injectToPane(paneId, cmd, plan, prov.id, snap.captureTail, snap.captureTailAnsi);
|
|
64
36
|
ok = true;
|
|
65
37
|
});
|
|
66
38
|
return ok ? { ok: true, cmd } : { ok: false, reason: "inject-failed" };
|
|
@@ -92,11 +64,21 @@ export function notifyResumeWave(workspace, reason, sent, total, meta) {
|
|
|
92
64
|
? `Carrier ${meta.toIp}. `
|
|
93
65
|
: "";
|
|
94
66
|
if (sent > 0) {
|
|
95
|
-
|
|
67
|
+
runInboxDesktopNotifySync(workspace, {
|
|
68
|
+
phase: "sent",
|
|
69
|
+
topic: "OC resume",
|
|
70
|
+
sessionAbout: `${ipLine}Resume pasted to ${sent}/${total} OpenCode panes (${reason}).`,
|
|
71
|
+
check: RESUME_ACK_HOWTO,
|
|
72
|
+
});
|
|
96
73
|
return;
|
|
97
74
|
}
|
|
98
75
|
if (total > 0) {
|
|
99
|
-
|
|
76
|
+
runInboxDesktopNotifySync(workspace, {
|
|
77
|
+
phase: "incomplete",
|
|
78
|
+
topic: "OC resume",
|
|
79
|
+
sessionAbout: `${ipLine}Found ${total} OC panes but resume was not delivered (${reason}).`,
|
|
80
|
+
check: "Check OC panes manually — may be busy or keyboard-locked.",
|
|
81
|
+
});
|
|
100
82
|
}
|
|
101
83
|
}
|
|
102
84
|
//# sourceMappingURL=oc-resume.js.map
|
package/dist/oc-resume.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oc-resume.js","sourceRoot":"","sources":["../src/oc-resume.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oc-resume.js","sourceRoot":"","sources":["../src/oc-resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PeerRow } from "./jsonl-store.js";
|
|
2
|
+
import type { QueueStore } from "./create-queue-store.js";
|
|
3
|
+
/** Parked in PEER-BACKLOG — not live inbox pressure (do not count on pane banner). */
|
|
4
|
+
export declare function isPeerParked(row: PeerRow): boolean;
|
|
5
|
+
/** Awaiting inject or in-flight delivery (excludes backlog/skipped). */
|
|
6
|
+
export declare function isPeerPendingDelivery(row: PeerRow): boolean;
|
|
7
|
+
export declare function countPeerPendingForPane(store: QueueStore, paneId: string): number;
|
|
8
|
+
export declare function countPeerPendingGlobal(store: QueueStore): number;
|
|
9
|
+
//# sourceMappingURL=peer-pending.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-pending.d.ts","sourceRoot":"","sources":["../src/peer-pending.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGlD;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAG3D;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEhE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { isPeerDelivered } from "./create-queue-store.js";
|
|
2
|
+
/** Parked in PEER-BACKLOG — not live inbox pressure (do not count on pane banner). */
|
|
3
|
+
export function isPeerParked(row) {
|
|
4
|
+
const dp = row.deliverPane;
|
|
5
|
+
return dp === "backlog" || dp === "skipped";
|
|
6
|
+
}
|
|
7
|
+
/** Awaiting inject or in-flight delivery (excludes backlog/skipped). */
|
|
8
|
+
export function isPeerPendingDelivery(row) {
|
|
9
|
+
if (isPeerParked(row))
|
|
10
|
+
return false;
|
|
11
|
+
return !isPeerDelivered(row);
|
|
12
|
+
}
|
|
13
|
+
export function countPeerPendingForPane(store, paneId) {
|
|
14
|
+
return store.readPeer().filter((r) => r.targetPane === paneId && isPeerPendingDelivery(r)).length;
|
|
15
|
+
}
|
|
16
|
+
export function countPeerPendingGlobal(store) {
|
|
17
|
+
return store.readPeer().filter((r) => isPeerPendingDelivery(r)).length;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=peer-pending.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-pending.js","sourceRoot":"","sources":["../src/peer-pending.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,sFAAsF;AACtF,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC;IAC3B,OAAO,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,CAAC;AAC9C,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IAAI,YAAY,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAiB,EAAE,MAAc;IACvE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAiB;IACtD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-pending.test.d.ts","sourceRoot":"","sources":["../src/peer-pending.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { countPeerPendingForPane, isPeerParked, isPeerPendingDelivery, } from "./peer-pending.js";
|
|
3
|
+
function mockStore(peer) {
|
|
4
|
+
return {
|
|
5
|
+
readPeer: () => peer,
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
describe("peer-pending", () => {
|
|
9
|
+
it("treats backlog/skipped as parked not pending", () => {
|
|
10
|
+
const row = {
|
|
11
|
+
id: "1",
|
|
12
|
+
at: "",
|
|
13
|
+
kind: "prompt",
|
|
14
|
+
fromSlot: "x",
|
|
15
|
+
fromPorts: "-",
|
|
16
|
+
targetPane: "%1",
|
|
17
|
+
targetLabel: "slot-1",
|
|
18
|
+
msg: "hi",
|
|
19
|
+
sent: true,
|
|
20
|
+
sentAt: "2026-01-01T00:00:00.000Z",
|
|
21
|
+
deliverPane: "backlog",
|
|
22
|
+
};
|
|
23
|
+
expect(isPeerParked(row)).toBe(true);
|
|
24
|
+
expect(isPeerPendingDelivery(row)).toBe(false);
|
|
25
|
+
expect(countPeerPendingForPane(mockStore([row]), "%1")).toBe(0);
|
|
26
|
+
});
|
|
27
|
+
it("counts unsent peer for pane", () => {
|
|
28
|
+
const pending = {
|
|
29
|
+
id: "2",
|
|
30
|
+
at: "",
|
|
31
|
+
kind: "prompt",
|
|
32
|
+
fromSlot: "x",
|
|
33
|
+
fromPorts: "-",
|
|
34
|
+
targetPane: "%1",
|
|
35
|
+
targetLabel: "slot-1",
|
|
36
|
+
msg: "hi",
|
|
37
|
+
sent: false,
|
|
38
|
+
};
|
|
39
|
+
expect(countPeerPendingForPane(mockStore([pending]), "%1")).toBe(1);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=peer-pending.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-pending.test.js","sourceRoot":"","sources":["../src/peer-pending.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAI3B,SAAS,SAAS,CAAC,IAAe;IAChC,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;KACP,CAAC;AAClB,CAAC;AAED,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,GAAG,GAAY;YACnB,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,QAAQ;YACrB,GAAG,EAAE,IAAI;YACT,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,0BAA0B;YAClC,WAAW,EAAE,SAAS;SACvB,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,QAAQ;YACrB,GAAG,EAAE,IAAI;YACT,IAAI,EAAE,KAAK;SACZ,CAAC;QACF,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/peer-skip.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import type { LoadedProfile } from "@seat-mesh/core";
|
|
1
2
|
import type { PeerRow } from "./jsonl-store.js";
|
|
2
3
|
/** Cold-start already delivered to this pane — do not re-inject duplicate pending rows. */
|
|
3
4
|
export declare function shouldSkipDeliveredColdStart(row: PeerRow): boolean;
|
|
5
|
+
/** Duplicate FRESH SUMMON while an earlier cold-start already landed — do not wedge context. */
|
|
6
|
+
export declare function shouldSkipDuplicateColdStartResummon(row: PeerRow, loaded: LoadedProfile): boolean;
|
|
4
7
|
/** Global room thin FYI pings must not land on worker seats (coord + @mention only). */
|
|
5
8
|
export declare function shouldSkipGlobalWorkerRoomPing(row: PeerRow): boolean;
|
|
6
9
|
/** Queued rich STATUS / SUPERVISE-STATUS room pings must never land on the manager lead. */
|
package/dist/peer-skip.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-skip.d.ts","sourceRoot":"","sources":["../src/peer-skip.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,2FAA2F;AAC3F,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGlE;AAED,wFAAwF;AACxF,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAIpE;AAED,4FAA4F;AAC5F,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAIrE;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,OAAO,EAAE,CAAC;IAAC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CAAE,EAC1E,GAAG,EAAE,OAAO,GACX,IAAI,CASN"}
|
|
1
|
+
{"version":3,"file":"peer-skip.d.ts","sourceRoot":"","sources":["../src/peer-skip.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,2FAA2F;AAC3F,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGlE;AAED,gGAAgG;AAChG,wBAAgB,oCAAoC,CAClD,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,GACpB,OAAO,CAIT;AAED,wFAAwF;AACxF,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAIpE;AAED,4FAA4F;AAC5F,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAIrE;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,OAAO,EAAE,CAAC;IAAC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CAAE,EAC1E,GAAG,EAAE,OAAO,GACX,IAAI,CASN"}
|
package/dist/peer-skip.js
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { isSuperviseStatusBroadcast } from "@seat-mesh/core";
|
|
2
|
+
import { hasDeliveredColdStartPeer } from "@seat-mesh/tmux";
|
|
2
3
|
/** Cold-start already delivered to this pane — do not re-inject duplicate pending rows. */
|
|
3
4
|
export function shouldSkipDeliveredColdStart(row) {
|
|
4
5
|
if (row.fromSlot !== "mesh-cold-start")
|
|
5
6
|
return false;
|
|
6
7
|
return row.sent === true && Boolean(row.sentAt);
|
|
7
8
|
}
|
|
9
|
+
/** Duplicate FRESH SUMMON while an earlier cold-start already landed — do not wedge context. */
|
|
10
|
+
export function shouldSkipDuplicateColdStartResummon(row, loaded) {
|
|
11
|
+
if (row.fromSlot !== "mesh-cold-start" || row.sent === true)
|
|
12
|
+
return false;
|
|
13
|
+
if (!/FRESH SUMMON/.test(row.msg ?? ""))
|
|
14
|
+
return false;
|
|
15
|
+
return hasDeliveredColdStartPeer(loaded, row.targetPane);
|
|
16
|
+
}
|
|
8
17
|
/** Global room thin FYI pings must not land on worker seats (coord + @mention only). */
|
|
9
18
|
export function shouldSkipGlobalWorkerRoomPing(row) {
|
|
10
19
|
if (row.kind !== "room" || row.roomSlug !== "global")
|
package/dist/peer-skip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-skip.js","sourceRoot":"","sources":["../src/peer-skip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"peer-skip.js","sourceRoot":"","sources":["../src/peer-skip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,2FAA2F;AAC3F,MAAM,UAAU,4BAA4B,CAAC,GAAY;IACvD,IAAI,GAAG,CAAC,QAAQ,KAAK,iBAAiB;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,oCAAoC,CAClD,GAAY,EACZ,MAAqB;IAErB,IAAI,GAAG,CAAC,QAAQ,KAAK,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1E,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,yBAAyB,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,8BAA8B,CAAC,GAAY;IACzD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACnE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,+BAA+B,CAAC,GAAY;IAC1D,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChF,OAAO,0BAA0B,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAA0E,EAC1E,GAAY;IAEZ,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO;IAClB,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,CAAC,CAAC,CAAE,CAAC,WAAW,GAAG,SAAS,CAAC;IACjC,IAAI,CAAC,CAAC,CAAE,CAAC,WAAW,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LoadedProfile } from "@seat-mesh/core";
|
|
2
|
+
import type { PeerRow } from "./jsonl-store.js";
|
|
3
|
+
/** Re-bind queued PEER rows to live mini-N / slot-N / coord panes (layout drift). */
|
|
4
|
+
export declare function refreshPeerTargetPane(loaded: LoadedProfile, row: PeerRow): {
|
|
5
|
+
paneId: string;
|
|
6
|
+
rerouted: boolean;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=peer-target-resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-target-resolve.d.ts","sourceRoot":"","sources":["../src/peer-target-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,qFAAqF;AACrF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,OAAO,GACX;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CASvC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { resolvePaneTarget } from "@seat-mesh/tmux";
|
|
2
|
+
/** Re-bind queued PEER rows to live mini-N / slot-N / coord panes (layout drift). */
|
|
3
|
+
export function refreshPeerTargetPane(loaded, row) {
|
|
4
|
+
const label = row.targetLabel?.trim();
|
|
5
|
+
if (!label)
|
|
6
|
+
return { paneId: row.targetPane, rerouted: false };
|
|
7
|
+
const resolved = resolvePaneTarget(label, loaded);
|
|
8
|
+
if ("error" in resolved)
|
|
9
|
+
return { paneId: row.targetPane, rerouted: false };
|
|
10
|
+
const rerouted = resolved.paneId !== row.targetPane;
|
|
11
|
+
return { paneId: resolved.paneId, rerouted };
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=peer-target-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-target-resolve.js","sourceRoot":"","sources":["../src/peer-target-resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,qFAAqF;AACrF,MAAM,UAAU,qBAAqB,CACnC,MAAqB,EACrB,GAAY;IAEZ,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAE/D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,IAAI,OAAO,IAAI,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAE5E,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC;IACpD,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seat-mesh/daemon",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.25",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Inbox orchestrator — sole pane writer; BullMQ workers drain queues.",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"prepublishOnly": "npm run build"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@seat-mesh/core": "0.1.
|
|
15
|
-
"@seat-mesh/providers": "0.1.
|
|
16
|
-
"@seat-mesh/tmux": "0.1.
|
|
14
|
+
"@seat-mesh/core": "0.1.25",
|
|
15
|
+
"@seat-mesh/providers": "0.1.25",
|
|
16
|
+
"@seat-mesh/tmux": "0.1.25",
|
|
17
17
|
"bullmq": "^6.3.4",
|
|
18
18
|
"ioredis": "^6.0.0"
|
|
19
19
|
},
|