@seat-mesh/daemon 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ack/ack-open.d.ts +5 -0
- package/dist/ack/ack-open.d.ts.map +1 -0
- package/dist/ack/ack-open.js +86 -0
- package/dist/ack/ack-open.js.map +1 -0
- package/dist/ack/ack-sweep.d.ts +14 -0
- package/dist/ack/ack-sweep.d.ts.map +1 -0
- package/dist/ack/ack-sweep.js +186 -0
- package/dist/ack/ack-sweep.js.map +1 -0
- package/dist/ack/ack-watch.d.ts +13 -0
- package/dist/ack/ack-watch.d.ts.map +1 -0
- package/dist/ack/ack-watch.js +46 -0
- package/dist/ack/ack-watch.js.map +1 -0
- package/dist/border/border-paint.d.ts +24 -1
- package/dist/border/border-paint.d.ts.map +1 -1
- package/dist/border/border-paint.js +207 -82
- package/dist/border/border-paint.js.map +1 -1
- package/dist/border/border-paint.test.d.ts +2 -0
- package/dist/border/border-paint.test.d.ts.map +1 -0
- package/dist/border/border-paint.test.js +58 -0
- package/dist/border/border-paint.test.js.map +1 -0
- package/dist/checkback/checkback-fire.d.ts +13 -0
- package/dist/checkback/checkback-fire.d.ts.map +1 -1
- package/dist/checkback/checkback-fire.js +35 -0
- package/dist/checkback/checkback-fire.js.map +1 -1
- package/dist/checkback/checkback-fire.test.js +25 -1
- package/dist/checkback/checkback-fire.test.js.map +1 -1
- package/dist/connectivity/connectivity-recovery.d.ts +10 -2
- package/dist/connectivity/connectivity-recovery.d.ts.map +1 -1
- package/dist/connectivity/connectivity-recovery.js +54 -33
- package/dist/connectivity/connectivity-recovery.js.map +1 -1
- package/dist/connectivity/connectivity-recovery.test.js +7 -1
- package/dist/connectivity/connectivity-recovery.test.js.map +1 -1
- package/dist/connectivity/oc-resume-broadcast.d.ts +20 -0
- package/dist/connectivity/oc-resume-broadcast.d.ts.map +1 -0
- package/dist/connectivity/oc-resume-broadcast.js +74 -0
- package/dist/connectivity/oc-resume-broadcast.js.map +1 -0
- package/dist/connectivity/oc-resume-broadcast.test.d.ts +2 -0
- package/dist/connectivity/oc-resume-broadcast.test.d.ts.map +1 -0
- package/dist/connectivity/oc-resume-broadcast.test.js +9 -0
- package/dist/connectivity/oc-resume-broadcast.test.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/inject/compose-gate.d.ts +7 -0
- package/dist/inject/compose-gate.d.ts.map +1 -1
- package/dist/inject/compose-gate.js +46 -2
- package/dist/inject/compose-gate.js.map +1 -1
- package/dist/inject/compose-gate.test.js +20 -1
- package/dist/inject/compose-gate.test.js.map +1 -1
- package/dist/inject/inject-delivery.d.ts.map +1 -1
- package/dist/inject/inject-delivery.js +7 -3
- package/dist/inject/inject-delivery.js.map +1 -1
- package/dist/inject/inject-delivery.test.js +2 -0
- package/dist/inject/inject-delivery.test.js.map +1 -1
- package/dist/inject/pane-hold.d.ts +4 -0
- package/dist/inject/pane-hold.d.ts.map +1 -0
- package/dist/inject/pane-hold.js +30 -0
- package/dist/inject/pane-hold.js.map +1 -0
- package/dist/mesh-inbox-server.js +228 -20
- package/dist/mesh-inbox-server.js.map +1 -1
- package/dist/mesh-inbox-supervisor.js +2 -2
- package/dist/mesh-inbox-supervisor.js.map +1 -1
- package/dist/notify/notify-act-ui.d.ts +9 -2
- package/dist/notify/notify-act-ui.d.ts.map +1 -1
- package/dist/notify/notify-act-ui.js +110 -30
- package/dist/notify/notify-act-ui.js.map +1 -1
- package/dist/notify/notify-act.d.ts +14 -2
- package/dist/notify/notify-act.d.ts.map +1 -1
- package/dist/notify/notify-act.js +44 -23
- package/dist/notify/notify-act.js.map +1 -1
- package/dist/notify/notify-act.test.js +11 -0
- package/dist/notify/notify-act.test.js.map +1 -1
- package/dist/notify/simple-markdown.d.ts +6 -0
- package/dist/notify/simple-markdown.d.ts.map +1 -0
- package/dist/notify/simple-markdown.js +74 -0
- package/dist/notify/simple-markdown.js.map +1 -0
- package/dist/notify/simple-markdown.test.d.ts +2 -0
- package/dist/notify/simple-markdown.test.d.ts.map +1 -0
- package/dist/notify/simple-markdown.test.js +15 -0
- package/dist/notify/simple-markdown.test.js.map +1 -0
- package/dist/orchestrator/mesh-orchestrator.d.ts +1 -0
- package/dist/orchestrator/mesh-orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/mesh-orchestrator.js +99 -165
- package/dist/orchestrator/mesh-orchestrator.js.map +1 -1
- package/dist/peer/peer-backlog.d.ts +1 -1
- package/dist/peer/peer-backlog.d.ts.map +1 -1
- package/dist/peer/peer-backlog.js +52 -34
- package/dist/peer/peer-backlog.js.map +1 -1
- package/dist/peer/peer-bulk-drain.d.ts +18 -0
- package/dist/peer/peer-bulk-drain.d.ts.map +1 -0
- package/dist/peer/peer-bulk-drain.js +254 -0
- package/dist/peer/peer-bulk-drain.js.map +1 -0
- package/dist/peer/peer-skip.test.js +2 -2
- package/dist/peer/peer-skip.test.js.map +1 -1
- package/dist/peer/peer-target-resolve.d.ts +1 -0
- package/dist/peer/peer-target-resolve.d.ts.map +1 -1
- package/dist/peer/peer-target-resolve.js +17 -6
- package/dist/peer/peer-target-resolve.js.map +1 -1
- package/dist/store/create-queue-store.d.ts +1 -0
- package/dist/store/create-queue-store.d.ts.map +1 -1
- package/dist/store/create-queue-store.js.map +1 -1
- package/dist/store/jsonl-store.d.ts +34 -1
- package/dist/store/jsonl-store.d.ts.map +1 -1
- package/dist/store/jsonl-store.js +118 -2
- package/dist/store/jsonl-store.js.map +1 -1
- package/dist/store/sqlite-store.d.ts +22 -1
- package/dist/store/sqlite-store.d.ts.map +1 -1
- package/dist/store/sqlite-store.js +131 -4
- package/dist/store/sqlite-store.js.map +1 -1
- package/dist/store/target-jsonl.d.ts +31 -0
- package/dist/store/target-jsonl.d.ts.map +1 -0
- package/dist/store/target-jsonl.js +76 -0
- package/dist/store/target-jsonl.js.map +1 -0
- package/dist/store/target-jsonl.test.d.ts +2 -0
- package/dist/store/target-jsonl.test.d.ts.map +1 -0
- package/dist/store/target-jsonl.test.js +37 -0
- package/dist/store/target-jsonl.test.js.map +1 -0
- package/dist/target/target-fire.d.ts +22 -0
- package/dist/target/target-fire.d.ts.map +1 -0
- package/dist/target/target-fire.js +86 -0
- package/dist/target/target-fire.js.map +1 -0
- package/package.json +6 -5
- package/static/ui/decide.html +66 -0
- package/static/ui/index.html +68 -0
- package/static/ui/targets.css +119 -0
- package/static/ui/targets.js +186 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { PeerRow, QueueStore, ToMasterRow } from "../store/create-queue-store.js";
|
|
2
|
+
/** Open ack when peer is queued or delivered (dedupe by ask text per seat). */
|
|
3
|
+
export declare function openAckForPeerRow(store: QueueStore, row: PeerRow, log?: (line: string) => void): void;
|
|
4
|
+
export declare function openAckForInboxRow(store: QueueStore, row: ToMasterRow, lane: "secretary" | "manager", paneId: string, log?: (line: string) => void): void;
|
|
5
|
+
//# sourceMappingURL=ack-open.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ack-open.d.ts","sourceRoot":"","sources":["../../src/ack/ack-open.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AA2CvF,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,OAAO,EACZ,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,GACrC,IAAI,CAmBN;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,GACrC,IAAI,CAcN"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Open ACK rows without pulling in the orchestrator (safe from inbox HTTP).
|
|
3
|
+
*/
|
|
4
|
+
import { resolveAgentId, trimAsk, } from "@seat-mesh/core";
|
|
5
|
+
import { paneMetaForPane } from "@seat-mesh/tmux";
|
|
6
|
+
import { isAckClassPeer } from "../peer/peer-backlog.js";
|
|
7
|
+
import { noteDaemonInject } from "./ack-watch.js";
|
|
8
|
+
function seatForPane(paneId, labelFallback = "") {
|
|
9
|
+
const meta = paneMetaForPane(paneId);
|
|
10
|
+
if (meta?.role) {
|
|
11
|
+
return resolveAgentId({
|
|
12
|
+
role: meta.role,
|
|
13
|
+
slot: meta.slot != null ? Number(meta.slot) : null,
|
|
14
|
+
mini: meta.mini ?? null,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
const lab = labelFallback.trim();
|
|
18
|
+
if (lab)
|
|
19
|
+
return lab;
|
|
20
|
+
return "unknown";
|
|
21
|
+
}
|
|
22
|
+
function askSnippetFromMsg(msg) {
|
|
23
|
+
return trimAsk(msg
|
|
24
|
+
.replace(/\[sent:[a-z0-9]+\]/gi, "")
|
|
25
|
+
.replace(/\nSHELL \(required[^\n]*/g, "")
|
|
26
|
+
.replace(/\nReply: peer[^\n]*/g, "")
|
|
27
|
+
.replace(/\s+/g, " "));
|
|
28
|
+
}
|
|
29
|
+
function isSubstanceAsk(msg) {
|
|
30
|
+
const t = msg.trim();
|
|
31
|
+
if (!t)
|
|
32
|
+
return false;
|
|
33
|
+
if (isAckClassPeer(t))
|
|
34
|
+
return false;
|
|
35
|
+
if (/^(ACK|FYI|STAND-?BY|BUSY|MCP-?SYNCED)\b/i.test(t))
|
|
36
|
+
return false;
|
|
37
|
+
if (/\bintent=(supervise-tick|status|continue|checkback-verify|ack-remind|limit-retry)\b/i.test(t)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
if (/\[mesh-inbox\]\s+ACK\b/i.test(t))
|
|
41
|
+
return false;
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
function isAckClassInboxMsg(msg) {
|
|
45
|
+
return /^(ACK|FYI|STAND-?BY|BUSY|MCP-?SYNCED)\b/i.test(String(msg ?? "").trim());
|
|
46
|
+
}
|
|
47
|
+
/** Open ack when peer is queued or delivered (dedupe by ask text per seat). */
|
|
48
|
+
export function openAckForPeerRow(store, row, log = () => { }) {
|
|
49
|
+
if (!isSubstanceAsk(row.msg))
|
|
50
|
+
return;
|
|
51
|
+
const pane = row.deliverPane && row.deliverPane.startsWith("%") ? row.deliverPane : row.targetPane;
|
|
52
|
+
if (!pane || !pane.startsWith("%"))
|
|
53
|
+
return;
|
|
54
|
+
const seat = seatForPane(pane, row.targetLabel);
|
|
55
|
+
if (seat === "unknown" || seat === "plain")
|
|
56
|
+
return;
|
|
57
|
+
const from = row.fromAgent?.trim() ||
|
|
58
|
+
(row.kind === "room" ? row.fromSlot : row.fromSlot ? `slot-${row.fromSlot}` : undefined);
|
|
59
|
+
const opened = store.openAck({
|
|
60
|
+
seat,
|
|
61
|
+
paneId: pane,
|
|
62
|
+
source: row.kind === "room" ? "room" : row.kind === "prompt" || row.kind === "remind" ? "inbox" : "peer",
|
|
63
|
+
ask: askSnippetFromMsg(row.msg),
|
|
64
|
+
from,
|
|
65
|
+
at: row.at,
|
|
66
|
+
});
|
|
67
|
+
log(`ACK open id=${opened.id.slice(0, 10)} seat=${seat} source=${opened.source}`);
|
|
68
|
+
}
|
|
69
|
+
export function openAckForInboxRow(store, row, lane, paneId, log = () => { }) {
|
|
70
|
+
if (isAckClassInboxMsg(row.msg))
|
|
71
|
+
return;
|
|
72
|
+
if (!isSubstanceAsk(row.msg))
|
|
73
|
+
return;
|
|
74
|
+
const seat = lane === "secretary" ? "secretary" : "manager";
|
|
75
|
+
const opened = store.openAck({
|
|
76
|
+
seat,
|
|
77
|
+
paneId,
|
|
78
|
+
source: "inbox",
|
|
79
|
+
ask: askSnippetFromMsg(row.msg),
|
|
80
|
+
from: row.from || row.slot || undefined,
|
|
81
|
+
at: row.sentAt ?? row.at,
|
|
82
|
+
});
|
|
83
|
+
log(`ACK open id=${opened.id.slice(0, 10)} seat=${seat} source=inbox`);
|
|
84
|
+
noteDaemonInject(paneId);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=ack-open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ack-open.js","sourceRoot":"","sources":["../../src/ack/ack-open.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { MeshOrchestratorCtx } from "../orchestrator/mesh-orchestrator.js";
|
|
2
|
+
import { openAckForInboxRow, openAckForPeerRow } from "./ack-open.js";
|
|
3
|
+
export { openAckForInboxRow, openAckForPeerRow } from "./ack-open.js";
|
|
4
|
+
export declare function openAckForDeliveredPeer(ctx: MeshOrchestratorCtx, row: Parameters<typeof openAckForPeerRow>[1]): void;
|
|
5
|
+
export declare function openAckForDeliveredInbox(ctx: MeshOrchestratorCtx, row: Parameters<typeof openAckForInboxRow>[1], lane: "secretary" | "manager", paneId: string): void;
|
|
6
|
+
/** Operator prompts detected by border-paint composer watch. */
|
|
7
|
+
export declare function openAcksFromOperatorPrompts(ctx: MeshOrchestratorCtx): number;
|
|
8
|
+
/** Close open rows when the seat filed something after the ask. */
|
|
9
|
+
export declare function closeAcksOnFilings(ctx: MeshOrchestratorCtx): number;
|
|
10
|
+
/** Re-inject unanswered asks (batched per seat). */
|
|
11
|
+
export declare function fireAckReminders(ctx: MeshOrchestratorCtx): number;
|
|
12
|
+
/** One orchestrator tick worth of ACK bookkeeping. */
|
|
13
|
+
export declare function ackSweepTick(ctx: MeshOrchestratorCtx): void;
|
|
14
|
+
//# sourceMappingURL=ack-sweep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ack-sweep.d.ts","sourceRoot":"","sources":["../../src/ack/ack-sweep.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAYtE,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,mBAAmB,EACxB,GAAG,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAC3C,IAAI,CAKN;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,mBAAmB,EACxB,GAAG,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAC7C,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,GACb,IAAI,CAEN;AAED,gEAAgE;AAChE,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAe5E;AAsCD,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAenE;AASD,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CA8DjE;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAI3D"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACK ledger drain — open on ask, clear on filing, remind while open.
|
|
3
|
+
*
|
|
4
|
+
* Flood case this catches: seat is mid-task, inbox/peer dumps land, agent answers
|
|
5
|
+
* the newest turn in chat and never files (or never returns to) the earlier ask.
|
|
6
|
+
* Open rows stay visible in ACK.jsonl + banner until cleared; reminders re-inject.
|
|
7
|
+
*/
|
|
8
|
+
import { ACK_REMIND_MAX, ackRemindDelaySec, formatAckReminder, matchFiledAcks, openAcks, remindableAcks, } from "@seat-mesh/core";
|
|
9
|
+
import { tmux } from "@seat-mesh/tmux";
|
|
10
|
+
import { deliverToPane } from "../inject/inject-delivery.js";
|
|
11
|
+
import { notePaneDeliveryHold, paneInDeliveryHold } from "../inject/pane-hold.js";
|
|
12
|
+
import { openAckForInboxRow, openAckForPeerRow, } from "./ack-open.js";
|
|
13
|
+
import { drainOperatorPrompts, noteDaemonInject } from "./ack-watch.js";
|
|
14
|
+
export { openAckForInboxRow, openAckForPeerRow } from "./ack-open.js";
|
|
15
|
+
function paneStatusMark(paneId) {
|
|
16
|
+
return tmux(["display-message", "-t", paneId, "-p", "#{@mesh_status}"]).out?.trim() ?? "";
|
|
17
|
+
}
|
|
18
|
+
function paneLooksBusyForRemind(paneId) {
|
|
19
|
+
if (paneInDeliveryHold(paneId))
|
|
20
|
+
return true;
|
|
21
|
+
const mark = paneStatusMark(paneId);
|
|
22
|
+
return /\btyping\b|\bBUSY\b/i.test(mark);
|
|
23
|
+
}
|
|
24
|
+
export function openAckForDeliveredPeer(ctx, row) {
|
|
25
|
+
openAckForPeerRow(ctx.store, row, ctx.log);
|
|
26
|
+
const pane = row.deliverPane && row.deliverPane.startsWith("%") ? row.deliverPane : row.targetPane;
|
|
27
|
+
if (pane.startsWith("%"))
|
|
28
|
+
noteDaemonInject(pane);
|
|
29
|
+
}
|
|
30
|
+
export function openAckForDeliveredInbox(ctx, row, lane, paneId) {
|
|
31
|
+
openAckForInboxRow(ctx.store, row, lane, paneId, ctx.log);
|
|
32
|
+
}
|
|
33
|
+
/** Operator prompts detected by border-paint composer watch. */
|
|
34
|
+
export function openAcksFromOperatorPrompts(ctx) {
|
|
35
|
+
const prompts = drainOperatorPrompts();
|
|
36
|
+
let n = 0;
|
|
37
|
+
for (const p of prompts) {
|
|
38
|
+
const opened = ctx.store.openAck({
|
|
39
|
+
seat: p.label,
|
|
40
|
+
paneId: p.paneId,
|
|
41
|
+
source: "operator",
|
|
42
|
+
ask: p.prompt,
|
|
43
|
+
at: p.at,
|
|
44
|
+
});
|
|
45
|
+
ctx.log(`ACK open id=${opened.id.slice(0, 10)} seat=${opened.seat} source=operator`);
|
|
46
|
+
n++;
|
|
47
|
+
}
|
|
48
|
+
return n;
|
|
49
|
+
}
|
|
50
|
+
function filingsSince(ctx, sinceIso) {
|
|
51
|
+
const since = Date.parse(sinceIso) || 0;
|
|
52
|
+
const out = [];
|
|
53
|
+
for (const row of ctx.store.readPeer()) {
|
|
54
|
+
if (!row.sentAt || Date.parse(row.sentAt) < since)
|
|
55
|
+
continue;
|
|
56
|
+
if (row.deliverPane === "skipped" || row.deliverPane === "backlog")
|
|
57
|
+
continue;
|
|
58
|
+
const seat = row.fromAgent?.trim() ||
|
|
59
|
+
(row.kind === "room"
|
|
60
|
+
? row.fromSlot
|
|
61
|
+
: /^\d+$/.test(row.fromSlot)
|
|
62
|
+
? `worker-${row.fromSlot}`
|
|
63
|
+
: row.fromSlot);
|
|
64
|
+
if (!seat || seat === "mesh-cold-start")
|
|
65
|
+
continue;
|
|
66
|
+
out.push({
|
|
67
|
+
seat,
|
|
68
|
+
at: row.sentAt,
|
|
69
|
+
what: `peer -> ${row.targetLabel || row.targetPane}`,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
for (const row of ctx.store.readInbox()) {
|
|
73
|
+
if (!row.sentAt || Date.parse(row.sentAt) < since)
|
|
74
|
+
continue;
|
|
75
|
+
const seat = row.from?.trim() || (row.slot ? `worker-${row.slot}` : "");
|
|
76
|
+
if (!seat)
|
|
77
|
+
continue;
|
|
78
|
+
out.push({
|
|
79
|
+
seat,
|
|
80
|
+
at: row.sentAt,
|
|
81
|
+
what: `inbox -> ${row.deliveredTo ?? "coord"}`,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return out;
|
|
85
|
+
}
|
|
86
|
+
/** Close open rows when the seat filed something after the ask. */
|
|
87
|
+
export function closeAcksOnFilings(ctx) {
|
|
88
|
+
const rows = ctx.store.readAcks();
|
|
89
|
+
const open = openAcks(rows);
|
|
90
|
+
if (!open.length)
|
|
91
|
+
return 0;
|
|
92
|
+
const oldest = open.reduce((a, b) => (a.at < b.at ? a : b)).at;
|
|
93
|
+
const matched = matchFiledAcks(rows, filingsSince(ctx, oldest));
|
|
94
|
+
let n = 0;
|
|
95
|
+
for (const { row, note } of matched) {
|
|
96
|
+
const res = ctx.store.ackAck(row.id, "filed", note);
|
|
97
|
+
if (res.ok) {
|
|
98
|
+
ctx.log(`ACK filed id=${row.id.slice(0, 10)} seat=${row.seat} note=${note}`);
|
|
99
|
+
n++;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return n;
|
|
103
|
+
}
|
|
104
|
+
function dueForRemind(row, nowMs) {
|
|
105
|
+
if (row.reminders >= ACK_REMIND_MAX)
|
|
106
|
+
return false;
|
|
107
|
+
const delay = ackRemindDelaySec(row.reminders) * 1000;
|
|
108
|
+
const base = Date.parse(row.remindedAt ?? row.at) || 0;
|
|
109
|
+
return nowMs - base >= delay;
|
|
110
|
+
}
|
|
111
|
+
/** Re-inject unanswered asks (batched per seat). */
|
|
112
|
+
export function fireAckReminders(ctx) {
|
|
113
|
+
const now = Date.now();
|
|
114
|
+
const bySeat = new Map();
|
|
115
|
+
for (const row of remindableAcks(ctx.store.readAcks())) {
|
|
116
|
+
if (!dueForRemind(row, now))
|
|
117
|
+
continue;
|
|
118
|
+
const list = bySeat.get(row.seat) ?? [];
|
|
119
|
+
list.push(row);
|
|
120
|
+
bySeat.set(row.seat, list);
|
|
121
|
+
}
|
|
122
|
+
let fired = 0;
|
|
123
|
+
for (const [seat, seatRows] of bySeat) {
|
|
124
|
+
const pane = seatRows[0]?.paneId;
|
|
125
|
+
if (!pane)
|
|
126
|
+
continue;
|
|
127
|
+
if (paneLooksBusyForRemind(pane)) {
|
|
128
|
+
// Push due clock without burning a reminder slot — avoid deliver/capture spam.
|
|
129
|
+
const all = ctx.store.readAcks();
|
|
130
|
+
const nowIso = new Date().toISOString();
|
|
131
|
+
for (const row of seatRows) {
|
|
132
|
+
const hit = all.find((a) => a.id === row.id);
|
|
133
|
+
if (!hit || hit.ackedAt)
|
|
134
|
+
continue;
|
|
135
|
+
hit.remindedAt = nowIso;
|
|
136
|
+
}
|
|
137
|
+
ctx.store.writeAcks(all);
|
|
138
|
+
notePaneDeliveryHold(pane, "held:typing");
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
const msg = formatAckReminder(seat, seatRows);
|
|
142
|
+
if (!msg)
|
|
143
|
+
continue;
|
|
144
|
+
const r = deliverToPane(pane, msg, ctx.registry, {
|
|
145
|
+
skipVerify: true,
|
|
146
|
+
intent: "ack-remind",
|
|
147
|
+
loaded: ctx.loaded,
|
|
148
|
+
workspace: ctx.loaded.workspace,
|
|
149
|
+
});
|
|
150
|
+
if (!r.ok) {
|
|
151
|
+
notePaneDeliveryHold(pane, r.reason);
|
|
152
|
+
const all = ctx.store.readAcks();
|
|
153
|
+
const nowIso = new Date().toISOString();
|
|
154
|
+
for (const row of seatRows) {
|
|
155
|
+
const hit = all.find((a) => a.id === row.id);
|
|
156
|
+
if (!hit || hit.ackedAt)
|
|
157
|
+
continue;
|
|
158
|
+
hit.remindedAt = nowIso;
|
|
159
|
+
}
|
|
160
|
+
ctx.store.writeAcks(all);
|
|
161
|
+
ctx.log(`ACK remind held seat=${seat} reason=${r.reason}`);
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
noteDaemonInject(pane);
|
|
165
|
+
const all = ctx.store.readAcks();
|
|
166
|
+
const nowIso = new Date().toISOString();
|
|
167
|
+
for (const row of seatRows) {
|
|
168
|
+
const hit = all.find((a) => a.id === row.id);
|
|
169
|
+
if (!hit || hit.ackedAt)
|
|
170
|
+
continue;
|
|
171
|
+
hit.reminders += 1;
|
|
172
|
+
hit.remindedAt = nowIso;
|
|
173
|
+
}
|
|
174
|
+
ctx.store.writeAcks(all);
|
|
175
|
+
ctx.log(`ACK remind seat=${seat} n=${seatRows.length} pane=${pane}`);
|
|
176
|
+
fired++;
|
|
177
|
+
}
|
|
178
|
+
return fired;
|
|
179
|
+
}
|
|
180
|
+
/** One orchestrator tick worth of ACK bookkeeping. */
|
|
181
|
+
export function ackSweepTick(ctx) {
|
|
182
|
+
openAcksFromOperatorPrompts(ctx);
|
|
183
|
+
closeAcksOnFilings(ctx);
|
|
184
|
+
fireAckReminders(ctx);
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=ack-sweep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ack-sweep.js","sourceRoot":"","sources":["../../src/ack/ack-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAEL,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,cAAc,GAEf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEtE,SAAS,cAAc,CAAC,MAAc;IACpC,OAAO,IAAI,CAAC,CAAC,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5F,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC5C,IAAI,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,GAAwB,EACxB,GAA4C;IAE5C,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GACR,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;IACxF,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,GAAwB,EACxB,GAA6C,EAC7C,IAA6B,EAC7B,MAAc;IAEd,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,2BAA2B,CAAC,GAAwB;IAClE,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAC;IACvC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;YAC/B,IAAI,EAAE,CAAC,CAAC,KAAK;YACb,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,MAAM,EAAE,UAAU;YAClB,GAAG,EAAE,CAAC,CAAC,MAAM;YACb,EAAE,EAAE,CAAC,CAAC,EAAE;SACT,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,kBAAkB,CAAC,CAAC;QACrF,CAAC,EAAE,CAAC;IACN,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CAAC,GAAwB,EAAE,QAAgB;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,GAAG,GAAiB,EAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK;YAAE,SAAS;QAC5D,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;YAAE,SAAS;QAC7E,MAAM,IAAI,GACR,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE;YACrB,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM;gBAClB,CAAC,CAAC,GAAG,CAAC,QAAQ;gBACd,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAC1B,CAAC,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE;oBAC1B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,iBAAiB;YAAE,SAAS;QAClD,GAAG,CAAC,IAAI,CAAC;YACP,IAAI;YACJ,EAAE,EAAE,GAAG,CAAC,MAAM;YACd,IAAI,EAAE,WAAW,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU,EAAE;SACrD,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK;YAAE,SAAS;QAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,GAAG,CAAC,IAAI,CAAC;YACP,IAAI;YACJ,EAAE,EAAE,GAAG,CAAC,MAAM;YACd,IAAI,EAAE,YAAY,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,GAAwB;IACzD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,GAAG,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,GAAG,CAAC,IAAI,SAAS,IAAI,EAAE,CAAC,CAAC;YAC7E,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,KAAa;IAC9C,IAAI,GAAG,CAAC,SAAS,IAAI,cAAc;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,KAAK,GAAG,IAAI,IAAI,KAAK,CAAC;AAC/B,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,gBAAgB,CAAC,GAAwB;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE,SAAS;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,+EAA+E;YAC/E,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACxC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO;oBAAE,SAAS;gBAClC,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC;YAC1B,CAAC;YACD,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACzB,oBAAoB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC1C,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;YAC/C,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACV,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACxC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO;oBAAE,SAAS;gBAClC,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC;YAC1B,CAAC;YACD,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACzB,GAAG,CAAC,GAAG,CAAC,wBAAwB,IAAI,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3D,SAAS;QACX,CAAC;QACD,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO;gBAAE,SAAS;YAClC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC;YACnB,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC;QAC1B,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACzB,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,MAAM,QAAQ,CAAC,MAAM,SAAS,IAAI,EAAE,CAAC,CAAC;QACrE,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,GAAwB;IACnD,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjC,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface OperatorPrompt {
|
|
2
|
+
paneId: string;
|
|
3
|
+
label: string;
|
|
4
|
+
prompt: string;
|
|
5
|
+
at: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function noteDaemonInject(paneId: string, nowMs?: number): void;
|
|
8
|
+
/** Feed one tick of composer state for a labeled mesh pane. */
|
|
9
|
+
export declare function observePaneComposer(paneId: string, label: string, draft: string, captureTail: string, nowMs?: number): void;
|
|
10
|
+
/** Take everything detected since the last drain. */
|
|
11
|
+
export declare function drainOperatorPrompts(): OperatorPrompt[];
|
|
12
|
+
export declare function resetAckWatch(): void;
|
|
13
|
+
//# sourceMappingURL=ack-watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ack-watch.d.ts","sourceRoot":"","sources":["../../src/ack/ack-watch.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ;AAaD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,IAAI,CAGzE;AAED,+DAA+D;AAC/D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,KAAK,SAAa,GACjB,IAAI,CAgBN;AAED,qDAAqD;AACrD,wBAAgB,oBAAoB,IAAI,cAAc,EAAE,CAIvD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAIpC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operator-prompt watch.
|
|
3
|
+
*
|
|
4
|
+
* Border paint already captures every pane each tick, so it feeds composer state
|
|
5
|
+
* in here instead of us capturing a second time. This module holds only in-memory
|
|
6
|
+
* transition state; `ack-sweep` drains detected submits and writes the ledger.
|
|
7
|
+
*/
|
|
8
|
+
import { classifyPromptTick, EMPTY_PROMPT_WATCH, } from "@seat-mesh/core";
|
|
9
|
+
/**
|
|
10
|
+
* A daemon paste clears and refills the composer itself (copy → clear → paste →
|
|
11
|
+
* submit → restore). Ignore submit detection for this long afterwards so our own
|
|
12
|
+
* write is never filed as an operator ask.
|
|
13
|
+
*/
|
|
14
|
+
const DAEMON_INJECT_QUIET_MS = 5_000;
|
|
15
|
+
const watchByPane = new Map();
|
|
16
|
+
const injectedAtByPane = new Map();
|
|
17
|
+
let pending = [];
|
|
18
|
+
export function noteDaemonInject(paneId, nowMs = Date.now()) {
|
|
19
|
+
injectedAtByPane.set(paneId, nowMs);
|
|
20
|
+
watchByPane.delete(paneId);
|
|
21
|
+
}
|
|
22
|
+
/** Feed one tick of composer state for a labeled mesh pane. */
|
|
23
|
+
export function observePaneComposer(paneId, label, draft, captureTail, nowMs = Date.now()) {
|
|
24
|
+
const injectedAt = injectedAtByPane.get(paneId) ?? 0;
|
|
25
|
+
if (injectedAt && nowMs - injectedAt < DAEMON_INJECT_QUIET_MS) {
|
|
26
|
+
watchByPane.set(paneId, EMPTY_PROMPT_WATCH);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const { next, event } = classifyPromptTick(watchByPane.get(paneId), { draft, captureTail }, nowMs);
|
|
30
|
+
watchByPane.set(paneId, next);
|
|
31
|
+
if (event.kind === "submitted") {
|
|
32
|
+
pending.push({ paneId, label, prompt: event.prompt, at: new Date(nowMs).toISOString() });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Take everything detected since the last drain. */
|
|
36
|
+
export function drainOperatorPrompts() {
|
|
37
|
+
const out = pending;
|
|
38
|
+
pending = [];
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
export function resetAckWatch() {
|
|
42
|
+
watchByPane.clear();
|
|
43
|
+
injectedAtByPane.clear();
|
|
44
|
+
pending = [];
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ack-watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ack-watch.js","sourceRoot":"","sources":["../../src/ack/ack-watch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,iBAAiB,CAAC;AASzB;;;;GAIG;AACH,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAErC,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;AACxD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;AACnD,IAAI,OAAO,GAAqB,EAAE,CAAC;AAEnC,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;IACjE,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,KAAa,EACb,KAAa,EACb,WAAmB,EACnB,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;IAElB,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,UAAU,IAAI,KAAK,GAAG,UAAU,GAAG,sBAAsB,EAAE,CAAC;QAC9D,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,kBAAkB,CACxC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EACvB,EAAE,KAAK,EAAE,WAAW,EAAE,EACtB,KAAK,CACN,CAAC;IACF,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,oBAAoB;IAClC,MAAM,GAAG,GAAG,OAAO,CAAC;IACpB,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,gBAAgB,CAAC,KAAK,EAAE,CAAC;IACzB,OAAO,GAAG,EAAE,CAAC;AACf,CAAC"}
|
|
@@ -1,8 +1,31 @@
|
|
|
1
|
-
import type { LoadedProfile, ProviderRegistry, ResolvedUxConfig } from "@seat-mesh/core";
|
|
1
|
+
import type { ComposerState, LoadedProfile, ProviderRegistry, ResolvedUxConfig } from "@seat-mesh/core";
|
|
2
2
|
import type { QueueStore } from "../store/create-queue-store.js";
|
|
3
|
+
/** Small meshes: paint every worker/mini each drain tick (cheap). */
|
|
4
|
+
export declare const FULL_BANNER_PAINT_EVERY_TICK = 10;
|
|
5
|
+
export interface WorkerMiniPaintTarget {
|
|
6
|
+
paneId: string;
|
|
7
|
+
label: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Coordinator panes paint every tick; worker/mini batch only on large meshes with
|
|
11
|
+
* live peer queue. Priority panes (pending mail) always included.
|
|
12
|
+
*/
|
|
13
|
+
export declare function selectWorkerMiniPaintTargets(targets: WorkerMiniPaintTarget[], peerPendingByPane: Map<string, number>, offset: number, batchCap: number): {
|
|
14
|
+
selected: WorkerMiniPaintTarget[];
|
|
15
|
+
nextOffset: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Keep CC-LIMIT / OC-LIMIT / PROXY-DOWN until the composer proves healthy twice.
|
|
19
|
+
* Blank redraws and missed limit text must not snap the border back to idle.
|
|
20
|
+
*/
|
|
21
|
+
export declare function applyStickyNegativeStatus(paneId: string, candidate: string, st: ComposerState | null): string;
|
|
22
|
+
/** Tests / inbox restart. */
|
|
23
|
+
export declare function resetStickyNegativeStatus(paneId?: string): void;
|
|
3
24
|
export interface BorderPaintConnectivity {
|
|
4
25
|
proxyDownActive: boolean;
|
|
5
26
|
ocLimitedPaneIds: Set<string>;
|
|
27
|
+
/** Panes with debounce-confirmed oc-connect (not stale scrollback one-shots). */
|
|
28
|
+
connectPaneIds: Set<string>;
|
|
6
29
|
}
|
|
7
30
|
/** Immediate border refresh for one pane (e.g. after resume ack clears OC-LIMIT). */
|
|
8
31
|
export declare function repaintMeshPaneBorder(registry: ProviderRegistry, store: QueueStore, paneId: string, connectivity?: BorderPaintConnectivity, inheritGlobal?: boolean, label?: string, stateDir?: string, ux?: ResolvedUxConfig | null, loaded?: LoadedProfile): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"border-paint.d.ts","sourceRoot":"","sources":["../../src/border/border-paint.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"border-paint.d.ts","sourceRoot":"","sources":["../../src/border/border-paint.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAuBxG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAuBjE,qEAAqE;AACrE,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAK/C,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAuCD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,qBAAqB,EAAE,EAChC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CA0B3D;AAgCD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,aAAa,GAAG,IAAI,GACvB,MAAM,CAoCR;AAED,6BAA6B;AAC7B,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAG/D;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,iFAAiF;IACjF,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B;AAsJD,qFAAqF;AACrF,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,uBAAuB,EACtC,aAAa,UAAQ,EACrB,KAAK,SAAK,EACV,QAAQ,CAAC,EAAE,MAAM,EACjB,EAAE,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAC5B,MAAM,CAAC,EAAE,aAAa,GACrB,IAAI,CAoBN;AAmBD,mFAAmF;AACnF,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,GAAG,CAAC,MAAM,CAAa,EACpC,YAAY,CAAC,EAAE,uBAAuB,EACtC,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,CA0CN;AAED,+DAA+D;AAC/D,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,GAAG,CAAC,MAAM,CAAa,EACpC,YAAY,CAAC,EAAE,uBAAuB,EACtC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA6Cf"}
|