wezard 2.6.2 → 2.6.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.
Files changed (81) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/config.example.jsonc +3 -1
  3. package/dist/daemon/answer-transfer.js +56 -0
  4. package/dist/daemon/answer-transfer.js.map +1 -0
  5. package/dist/daemon/approval.js +1 -1
  6. package/dist/daemon/approval.js.map +1 -1
  7. package/dist/daemon/bot-mux.js +4 -0
  8. package/dist/daemon/bot-mux.js.map +1 -1
  9. package/dist/daemon/cfg-sync.js +1 -1
  10. package/dist/daemon/cfg-sync.js.map +1 -1
  11. package/dist/daemon/chat-name.js +4 -4
  12. package/dist/daemon/chat-name.js.map +1 -1
  13. package/dist/daemon/config-api.js +2 -2
  14. package/dist/daemon/config-api.js.map +1 -1
  15. package/dist/daemon/image-input.js +54 -0
  16. package/dist/daemon/image-input.js.map +1 -0
  17. package/dist/daemon/inbound.js +7 -13
  18. package/dist/daemon/inbound.js.map +1 -1
  19. package/dist/daemon/index.js +1134 -331
  20. package/dist/daemon/index.js.map +1 -1
  21. package/dist/daemon/jobs.js +39 -15
  22. package/dist/daemon/jobs.js.map +1 -1
  23. package/dist/daemon/last-response.js +37 -7
  24. package/dist/daemon/last-response.js.map +1 -1
  25. package/dist/daemon/message-events.js +361 -0
  26. package/dist/daemon/message-events.js.map +1 -0
  27. package/dist/daemon/message-format.js +40 -0
  28. package/dist/daemon/message-format.js.map +1 -0
  29. package/dist/daemon/mirror-bridge.js +847 -343
  30. package/dist/daemon/mirror-bridge.js.map +1 -1
  31. package/dist/daemon/pane-input.js +48 -0
  32. package/dist/daemon/pane-input.js.map +1 -0
  33. package/dist/daemon/peers.js +17 -16
  34. package/dist/daemon/peers.js.map +1 -1
  35. package/dist/daemon/pending-items.js +8 -0
  36. package/dist/daemon/pending-items.js.map +1 -1
  37. package/dist/daemon/receipts.js +427 -139
  38. package/dist/daemon/receipts.js.map +1 -1
  39. package/dist/daemon/scheduled-delivery.js +52 -0
  40. package/dist/daemon/scheduled-delivery.js.map +1 -0
  41. package/dist/daemon/steward-model.js +10 -10
  42. package/dist/daemon/steward-model.js.map +1 -1
  43. package/dist/daemon/tasks.js +83 -27
  44. package/dist/daemon/tasks.js.map +1 -1
  45. package/dist/daemon/tmux-buffer.js +16 -6
  46. package/dist/daemon/tmux-buffer.js.map +1 -1
  47. package/dist/daemon/weixin-cmd.js +2 -4
  48. package/dist/daemon/weixin-cmd.js.map +1 -1
  49. package/dist/daemon/weixin.js +111 -7
  50. package/dist/daemon/weixin.js.map +1 -1
  51. package/dist/daemon/wizard.js +2 -1
  52. package/dist/daemon/wizard.js.map +1 -1
  53. package/dist/daemon/workflow-nodes.js +217 -0
  54. package/dist/daemon/workflow-nodes.js.map +1 -0
  55. package/dist/daemon/workflow-plan-http.js +83 -0
  56. package/dist/daemon/workflow-plan-http.js.map +1 -0
  57. package/dist/daemon/workflow-plans.js +274 -0
  58. package/dist/daemon/workflow-plans.js.map +1 -0
  59. package/dist/mcp/server.js +27 -1
  60. package/dist/mcp/server.js.map +1 -1
  61. package/dist/shared/cli-backends.js.map +1 -1
  62. package/dist/shared/codex.js +1 -1
  63. package/dist/shared/codex.js.map +1 -1
  64. package/dist/shared/config.js +12 -10
  65. package/dist/shared/config.js.map +1 -1
  66. package/dist/shared/detail-store.js.map +1 -1
  67. package/dist/shared/json-map-store.js +46 -9
  68. package/dist/shared/json-map-store.js.map +1 -1
  69. package/dist/shared/keyed-scheduler.js +51 -0
  70. package/dist/shared/keyed-scheduler.js.map +1 -0
  71. package/dist/shared/message-footer.js +34 -0
  72. package/dist/shared/message-footer.js.map +1 -0
  73. package/dist/shared/model-tiers.js +1 -2
  74. package/dist/shared/model-tiers.js.map +1 -1
  75. package/dist/shared/reminder.js +9 -1
  76. package/dist/shared/reminder.js.map +1 -1
  77. package/dist/shared/session-label.js +19 -1
  78. package/dist/shared/session-label.js.map +1 -1
  79. package/dist/shared/workflow-plan.js +36 -0
  80. package/dist/shared/workflow-plan.js.map +1 -0
  81. package/package.json +1 -1
@@ -129,8 +129,23 @@ export const dayClamp = (t) => {
129
129
  export const nudgeDue = (deliveredAt, nudge, now) => now >= dayClamp(nextNudgeAt(deliveredAt, nudge));
130
130
  /** 搁置的需求根单: 不冒泡、不算等验收, 但挂起表里要看得见, 免得被遗忘。 */
131
131
  export const shelvedRoots = (all, owner) => all.filter((j) => j.kind === "req" && j.owner === owner && j.status === "open" && j.hold);
132
+ const attached = (j, member, kind) => {
133
+ const prev = j.members.find((x) => x.target === member.target);
134
+ const rest = j.members.filter((x) => x.target !== member.target);
135
+ // 再派一段 (含 re 续问) = 它又在干了: 旧的定论作废, 不然「全部到齐」会提前报、
136
+ // close_job 会把还在干活的它收掉。
137
+ const role = member.role ?? prev?.role;
138
+ const forkOf = member.forkOf ?? prev?.forkOf;
139
+ // 根单上 owner 给 lead 派了新活 (task; ask 只是问一句, 不算返工): 不再搁置; 若这一句让 lead 的定论作废, 冒泡也从头计。
140
+ // 定论照旧一律作废 (它又在干了, 见上), 只是 ask 不动 hold / nudge。
141
+ const toLead = j.kind === "req" && role === "lead" && kind === "task";
142
+ const { hold: _h, ...unheld } = j;
143
+ const { nudge: _n, ...unnudged } = unheld;
144
+ const base = !toLead ? j : prev?.outcome ? unnudged : unheld;
145
+ return { ...base, members: [...rest, { ...member, task: member.task || prev?.task || "", spawned: member.spawned || !!prev?.spawned, ...(role ? { role } : {}), ...(forkOf ? { forkOf } : {}), at: Date.now() }] };
146
+ };
132
147
  export const loadJobStore = (filePath) => {
133
- const db = loadJsonMap(filePath, dropStale);
148
+ const db = loadJsonMap(filePath, dropStale, { strict: true });
134
149
  return {
135
150
  open: (base, owner, title, { plan, expect, maxTurns, accept, parent, kind, criteria, origin, gate } = {}) => {
136
151
  const id = newId();
@@ -144,6 +159,21 @@ export const loadJobStore = (filePath) => {
144
159
  db.set(id, { ...j, turns });
145
160
  return { turns, ...(j.maxTurns ? { maxTurns: j.maxTurns } : {}) };
146
161
  },
162
+ account: (id, key, member, kind, free = false, recovery = false, g2 = false) => {
163
+ const j = db.get(id);
164
+ if (!j || j.status !== "open")
165
+ throw new Error("accounting requires open job");
166
+ if (j.dispatches?.includes(key))
167
+ return j;
168
+ if (!free && j.maxTurns && (j.turns ?? 0) >= j.maxTurns)
169
+ throw new Error("job dispatch budget exhausted");
170
+ const prev = j.members.find((m) => m.target === member.target);
171
+ if (!prev && j.members.length >= JOB_MEMBER_MAX)
172
+ throw new Error("job members full");
173
+ const next = recovery && prev ? j : attached(j, { ...member, dispatchKey: key }, kind);
174
+ const gate = g2 && j.kind === "req" && prev?.role === "lead" && !next.gate?.g2 ? { ...next.gate, g2: Date.now() } : next.gate;
175
+ return db.set(id, { ...next, ...(gate ? { gate } : {}), turns: (j.turns ?? 0) + 1, dispatches: [...(j.dispatches ?? []), key] });
176
+ },
147
177
  get: db.get,
148
178
  attach: (id, member, kind = "task") => {
149
179
  const j = db.get(id);
@@ -151,22 +181,16 @@ export const loadJobStore = (filePath) => {
151
181
  // 满员只拦新面孔: 已在册的再派一段 (re 续问) 必须照记, 否则它旧的定论不作废, 「全部到齐」提前报。
152
182
  if (!j || j.status !== "open" || (!prev && j.members.length >= JOB_MEMBER_MAX))
153
183
  return undefined;
154
- const rest = j.members.filter((x) => x.target !== member.target);
155
- // 再派一段 (含 re 续问) = 它又在干了: 旧的定论作废, 不然「全部到齐」会提前报、
156
- // close_job 会把还在干活的它收掉。
157
- const role = member.role ?? prev?.role;
158
- const forkOf = member.forkOf ?? prev?.forkOf;
159
- // 根单上 owner 给 lead 派了新活 (task; ask 只是问一句, 不算返工): 不再搁置; 若这一句让 lead 的定论作废, 冒泡也从头计。
160
- // 定论照旧一律作废 (它又在干了, 见上), 只是 ask 不动 hold / nudge。
161
- const toLead = j.kind === "req" && role === "lead" && kind === "task";
162
- const { hold: _h, ...unheld } = j;
163
- const { nudge: _n, ...unnudged } = unheld;
164
- const base = !toLead ? j : prev?.outcome ? unnudged : unheld;
165
- return db.set(id, { ...base, members: [...rest, { ...member, task: member.task || prev?.task || "", spawned: member.spawned || !!prev?.spawned, ...(role ? { role } : {}), ...(forkOf ? { forkOf } : {}), at: Date.now() }] });
184
+ return db.set(id, attached(j, member, kind));
166
185
  },
167
- settle: (id, target, outcome, artifacts) => {
186
+ settle: (id, target, outcome, artifacts, identity) => {
168
187
  const j = db.get(id);
169
- if (!j || j.status !== "open" || !j.members.some((x) => x.target === target && !x.outcome))
188
+ const member = j?.members.find((x) => x.target === target);
189
+ if (!j || j.status !== "open" || !member || member.outcome)
190
+ return undefined;
191
+ if (member.dispatchKey && identity?.dispatchKey !== member.dispatchKey)
192
+ return undefined;
193
+ if (member.turn && identity?.turn !== member.turn)
170
194
  return undefined;
171
195
  return db.set(id, {
172
196
  ...j,
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../daemon/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../daemon/jobs.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { parseTagHeader, withBot } from "../shared/session-label.js";
2
- import { botTagOf } from "./bot-mux.js";
1
+ import { rawTagHeader, withBot, botOfKey } from "../shared/session-label.js";
2
+ import { botTagOf, pinFrameBot } from "./bot-mux.js";
3
3
  import { connFor } from "./reach.js";
4
+ import { withMessageFooter, withoutMessageFooter } from "../shared/message-footer.js";
4
5
  // Strip `chat:` / `user:` prefix to get the bare chatid/userid that
5
6
  // `sendMessage` takes. Chat ids and user ids don't collide in practice (group
6
7
  // chatids start with `wr…`, userids are short alphanumeric) so we can safely
@@ -47,13 +48,16 @@ const record = (bareId, content) => {
47
48
  // 暂时只有头, 下一帧会覆盖;
48
49
  // • 附带 templateCard 的 finish —— 卡片才是载荷, 文本只是搭车, 丢卡片会
49
50
  // 卡死审批流。
50
- const hasVisibleBody = (content) => parseTagHeader(content).body.length > 0;
51
+ const hasVisibleBody = (content) => {
52
+ const clean = withoutMessageFooter(content);
53
+ return (clean !== content ? clean : rawTagHeader(content)?.body ?? content).trim().length > 0;
54
+ };
51
55
  // Wrap replyStream + replyStreamWithCard (live stream finalize) AND
52
56
  // sendMessage (markdown standalone push) so EVERY user-visible bubble lands
53
57
  // in the tracker. Mutates the client in place; call once at daemon startup.
54
58
  // `ownTransport(chatid)`: 这个 chat 的出站不走企微长连接 (微信) —— 不必等 WS 连上。
55
59
  // 通道分流层装在这里面 (内层), 所以 gate / record 照样覆盖它。
56
- export const installResponseTracker = (client, log, ownTransport = () => false) => {
60
+ export const installResponseTracker = (client, log, ownTransport = () => false, policy) => {
57
61
  const origReplyStream = client.replyStream.bind(client);
58
62
  const origReplyStreamWithCard = client.replyStreamWithCard.bind(client);
59
63
  const origSendMessage = client.sendMessage.bind(client);
@@ -64,6 +68,8 @@ export const installResponseTracker = (client, log, ownTransport = () => false)
64
68
  return false;
65
69
  };
66
70
  client.replyStream = async (frame, streamId, content, finish, msgItem, feedback) => {
71
+ const format = policy?.({ chatid: bareFromFrame(frame), frame, body: frame.body });
72
+ content = withMessageFooter(content, format);
67
73
  if (finish === true && !gate("replyStream", content)) {
68
74
  return undefined;
69
75
  }
@@ -73,6 +79,8 @@ export const installResponseTracker = (client, log, ownTransport = () => false)
73
79
  return r;
74
80
  };
75
81
  client.replyStreamWithCard = async (frame, streamId, content, finish, options) => {
82
+ const format = policy?.({ chatid: bareFromFrame(frame), frame, body: frame.body });
83
+ content = withMessageFooter(content, format);
76
84
  if (finish === true && !options?.templateCard && !gate("replyStreamWithCard", content)) {
77
85
  return undefined;
78
86
  }
@@ -99,13 +107,35 @@ export const installResponseTracker = (client, log, ownTransport = () => false)
99
107
  // risk class); template_card / media bubbles pass through untouched.
100
108
  if (body.msgtype === "markdown") {
101
109
  const md = body.markdown?.content ?? "";
102
- if (!gate("sendMessage", md))
110
+ const format = policy?.({ chatid, body });
111
+ const content = withMessageFooter(md, format);
112
+ if (!gate("sendMessage", content))
103
113
  return undefined;
104
- const r = await origSendMessage(chatid, body);
105
- record(chatid, md);
114
+ const r = await origSendMessage(chatid, { ...body, markdown: { ...body.markdown, content } });
115
+ record(chatid, content);
106
116
  return r;
107
117
  }
108
118
  return origSendMessage(chatid, body);
109
119
  };
120
+ return {
121
+ freeze: (chatid, content) => withMessageFooter(content, policy?.({ chatid })),
122
+ sendFrozen: async (chatid, content, stream, guard) => {
123
+ if (!gate("durable-final", content))
124
+ throw { headers: {}, errcode: -1, errmsg: "empty final rejected before send" };
125
+ if (!ownTransport(chatid)) {
126
+ await untilConnected(chatid);
127
+ if (!connFor(client, chatid).isConnected)
128
+ throw { headers: {}, errcode: -1, errmsg: "disconnected before final send" };
129
+ }
130
+ if (guard && !guard())
131
+ throw { headers: {}, errcode: -1, errmsg: "final send stopped before transport" };
132
+ if (stream)
133
+ pinFrameBot(stream.frame, botOfKey(chatid));
134
+ const ack = stream ? await origReplyStream(stream.frame, stream.id, content, true)
135
+ : await origSendMessage(chatid, { msgtype: "markdown", markdown: { content } });
136
+ record(chatid, content);
137
+ return ack;
138
+ },
139
+ };
110
140
  };
111
141
  //# sourceMappingURL=last-response.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"last-response.js","sourceRoot":"","sources":["../../daemon/last-response.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"last-response.js","sourceRoot":"","sources":["../../daemon/last-response.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,361 @@
1
+ import { createHash } from "node:crypto";
2
+ import { loadJsonMap } from "../shared/json-map-store.js";
3
+ const canonical = (x) => Array.isArray(x) ? x.map(canonical)
4
+ : x && typeof x === "object" ? Object.fromEntries(Object.entries(x).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => [k, canonical(v)])) : x;
5
+ const digest = (x) => createHash("sha256").update(JSON.stringify(canonical(x))).digest("hex");
6
+ export const messageId = (bot, chat, id) => `h${digest([bot, chat, id])}`;
7
+ export const finalId = (event, channel, revision) => `f${digest([event, channel, revision])}`;
8
+ const clone = (x) => JSON.parse(JSON.stringify(x));
9
+ const backoff = (n) => Date.now() + Math.min(60_000, 1000 * 2 ** Math.min(n, 6));
10
+ const why = (e) => e instanceof Error ? e.message : typeof e === "object" ? JSON.stringify(e) : String(e);
11
+ // A negative transport ACK proves non-delivery; a timeout or disconnected socket does not.
12
+ export const rejectedAck = (e) => !!e && typeof e === "object"
13
+ && typeof e.errcode === "number" && e.errcode !== 0
14
+ && typeof e.errmsg === "string" && !!e.headers;
15
+ export const createMessageEvents = (file, io) => {
16
+ const db = loadJsonMap(file, undefined, { strict: true });
17
+ const outbox = loadJsonMap(`${file}.finals`, undefined, { strict: true });
18
+ Object.entries(db.all()).forEach(([id, e]) => {
19
+ if (!e || e.id !== id || typeof e.fingerprint !== "string" || !e.target || typeof e.speaker !== "string" || typeof e.channel !== "string" || !e.payload || typeof e.payload.text !== "string" || (!e.payload.human === !e.payload.peer) || !Number.isFinite(e.at) || !Number.isFinite(e.attempts) || !Number.isFinite(e.deadline) || !["queued", "dispatching", "awaiting-result", "complete", "canceled", "uncertain"].includes(e.execution))
20
+ throw new Error(`invalid message event ${id}`);
21
+ });
22
+ Object.entries(outbox.all()).forEach(([id, d]) => {
23
+ if (!d || d.id !== id || !Array.isArray(d.parts) || d.parts.length !== d.chunks?.length || !d.chunks.every((c) => typeof c === "string") || !d.parts.every((p) => ["pending", "sending", "waiting-ack", "delivered", "uncertain", "failed"].includes(p.state)) || !d.channel)
24
+ throw new Error(`invalid final delivery ${id}`);
25
+ });
26
+ let stopped = true;
27
+ let accepting = true;
28
+ let pumping = false;
29
+ let timer;
30
+ const active = new Set();
31
+ const targets = new Set();
32
+ const delivering = new Set();
33
+ const probing = new Set();
34
+ let deliveryCursor = 0;
35
+ let probeCursor = 0;
36
+ let probeCount = 0;
37
+ const probeTargets = new Set();
38
+ const bounded = (id, read) => {
39
+ const target = db.get(id)?.target ?? id;
40
+ if (probing.has(id) || probeTargets.has(target) || probeCount >= 16)
41
+ return Promise.reject(new Error("probe already running or probe capacity occupied"));
42
+ probing.add(id);
43
+ probeTargets.add(target);
44
+ probeCount++;
45
+ let timer;
46
+ const work = Promise.resolve().then(read);
47
+ void work.finally(() => { probing.delete(id); probeTargets.delete(target); }).catch(() => undefined);
48
+ return Promise.race([work, new Promise((_, reject) => {
49
+ timer = setTimeout(() => reject(new Error("pane probe exceeded 5s; no transport attempted")), 5000);
50
+ })]).finally(() => { clearTimeout(timer); probeCount--; });
51
+ };
52
+ const patch = (id, p) => db.set(id, { ...db.get(id), ...p });
53
+ const part = (id, n, p) => {
54
+ const d = outbox.get(id);
55
+ outbox.set(id, { ...d, parts: d.parts.map((x, i) => i === n ? { ...x, ...p } : x) });
56
+ };
57
+ const cancel = (select, reason = "canceled by owner") => {
58
+ const rows = Object.values(db.all()).filter((e) => !["complete", "canceled"].includes(e.execution) && select(e));
59
+ rows.forEach((e) => {
60
+ const next = patch(e.id, { canceled: true, reason, execution: e.exposure === "none" ? "canceled" : "uncertain" });
61
+ io.canceled(next); // Cancellation after exposure never asserts the pane stopped.
62
+ });
63
+ return rows.length;
64
+ };
65
+ const accept = (input) => {
66
+ if (!accepting)
67
+ throw new Error("message scheduler is stopped");
68
+ const clean = clone(input);
69
+ const fingerprint = digest(clean.identity ? [JSON.parse(clean.identity), clean.speaker, clean.channel] : clean);
70
+ const old = db.get(input.id);
71
+ if (old && old.fingerprint !== fingerprint)
72
+ throw new Error(`event identity conflict: ${input.id}`);
73
+ let e = old;
74
+ if (!e) {
75
+ const parentId = (clean.replyTo?.kind === "chat" ? clean.replyTo.turn : undefined);
76
+ const parent = parentId ? db.get(parentId) : undefined;
77
+ const generation = (parent?.continuationGeneration ?? 0) + 1;
78
+ e = { ...clean, fingerprint, at: Date.now(), execution: "queued", exposure: "none", attempts: 0,
79
+ ...(parent ? { parentGeneration: generation } : {}) };
80
+ db.merge({ [e.id]: e, ...(parent ? { [parent.id]: { ...parent, continuationGeneration: generation, currentContinuation: e.id, awaitingContinuation: true } } : {}) });
81
+ }
82
+ if (e.execution === "queued") {
83
+ try {
84
+ io.accepted(e);
85
+ }
86
+ catch (error) {
87
+ patch(e.id, { execution: "uncertain", reason: `acceptance projection failed: ${why(error)}` });
88
+ throw error;
89
+ }
90
+ } // Idempotent adapters restore accounting/receipt intent after a torn cross-store write.
91
+ void pump();
92
+ return { ok: true, queued: e.execution === "queued", eventId: e.id };
93
+ };
94
+ const result = (id, body, revision, turn, continuation) => {
95
+ const e = db.get(id);
96
+ if (!e || (e.currentContinuation && e.currentContinuation !== continuation) || e.result?.revision === revision)
97
+ return;
98
+ patch(id, { finalized: false, result: { body, revision, at: Date.now() }, execution: "complete", exposure: "consumed", ...(turn ? { turn } : {}) });
99
+ };
100
+ const delivery = (input) => {
101
+ const old = outbox.get(input.id);
102
+ if (old) {
103
+ if (old.body !== input.body || old.channel !== input.channel || old.revision !== input.revision)
104
+ throw new Error(`final identity conflict: ${input.id}`);
105
+ return old.id;
106
+ }
107
+ const frozen = clone(io.format?.(input) ?? input);
108
+ outbox.set(input.id, { ...frozen, at: Date.now(), parts: frozen.chunks.map(() => ({ state: "pending", attempts: 0 })) });
109
+ void pump();
110
+ return input.id;
111
+ };
112
+ const send = async (id) => {
113
+ delivering.add(id);
114
+ try {
115
+ for (let n = 0; n < outbox.get(id).parts.length && !stopped; n++) {
116
+ const d = outbox.get(id);
117
+ const p = d.parts[n];
118
+ if (p.state === "delivered")
119
+ continue;
120
+ if (p.state !== "pending" || (p.retryAt ?? 0) > Date.now())
121
+ break;
122
+ part(id, n, { state: "sending", attempts: p.attempts + 1 });
123
+ try {
124
+ const ack = await io.send(d, n);
125
+ part(id, n, { state: ack.failed ? "failed" : ack.uncertain ? "uncertain" : ack.queued ? "waiting-ack" : "delivered", ack: ack.ack, reason: ack.failed ?? ack.uncertain });
126
+ if (ack.uncertain || ack.queued || ack.failed)
127
+ break;
128
+ }
129
+ catch (e) {
130
+ part(id, n, { state: rejectedAck(e) ? "pending" : "uncertain", reason: why(e), retryAt: backoff(p.attempts + 1) });
131
+ break;
132
+ }
133
+ }
134
+ }
135
+ finally {
136
+ delivering.delete(id);
137
+ }
138
+ };
139
+ const observe = async (e) => {
140
+ const evidence = await bounded(e.id, () => io.evidence(e));
141
+ if (stopped)
142
+ return;
143
+ if (!evidence.consumed)
144
+ return;
145
+ const current = db.get(e.id);
146
+ if (["complete", "canceled"].includes(current.execution))
147
+ return;
148
+ if (current.exposure !== "consumed")
149
+ patch(e.id, { exposure: "consumed", interjected: evidence.interjected, execution: current.canceled ? "uncertain" : "awaiting-result", reason: current.canceled ? current.reason : undefined, turn: evidence.turn ?? current.turn });
150
+ if (!current.canceled)
151
+ io.committed(db.get(e.id));
152
+ if (evidence.body !== undefined && evidence.revision) {
153
+ result(e.id, evidence.body, evidence.revision, evidence.turn);
154
+ io.recovered(db.get(e.id));
155
+ }
156
+ };
157
+ const inject = async (id, resource) => {
158
+ active.add(resource);
159
+ targets.add(db.get(id).target);
160
+ try {
161
+ const e = db.get(id);
162
+ if (stopped || e.execution !== "queued" || !io.valid(e))
163
+ return;
164
+ io.accepted(e);
165
+ patch(id, { execution: "dispatching", attempts: e.attempts + 1, transcript: io.transcript(e.target) ?? e.transcript });
166
+ const boundary = (phase) => {
167
+ const current = db.get(id);
168
+ if (stopped || current.canceled || !io.valid(current))
169
+ return false;
170
+ if (phase)
171
+ patch(id, { exposure: "possible", transcript: io.transcript(e.target) ?? current.transcript });
172
+ return true;
173
+ };
174
+ let r;
175
+ try {
176
+ r = await io.inject(db.get(id), boundary);
177
+ }
178
+ catch (error) {
179
+ r = { ok: false, uncertain: db.get(id).exposure !== "none", retryable: db.get(id).exposure === "none", reason: why(error) };
180
+ }
181
+ const latest = db.get(id);
182
+ if (latest.result || latest.execution === "complete") {
183
+ if (!latest.canceled)
184
+ io.committed(latest);
185
+ return;
186
+ }
187
+ if (r.ok && !r.uncertain) {
188
+ const committed = patch(id, { execution: latest.canceled ? "uncertain" : "awaiting-result", exposure: "submitted", transcript: io.transcript(e.target) ?? latest.transcript });
189
+ if (!latest.canceled)
190
+ io.committed(committed);
191
+ }
192
+ else if (r.retryable && !r.uncertain && !latest.canceled) {
193
+ patch(id, { execution: "queued", exposure: "none", retryAt: backoff(latest.attempts), reason: r.reason });
194
+ }
195
+ else
196
+ patch(id, { execution: "uncertain", reason: r.reason || "submission acknowledgement unknown" });
197
+ }
198
+ catch (e) {
199
+ try {
200
+ patch(id, { reason: why(e), retryAt: backoff(db.get(id).attempts) });
201
+ }
202
+ catch {
203
+ accepting = false;
204
+ stopped = true;
205
+ clearInterval(timer);
206
+ timer = undefined;
207
+ }
208
+ io.error(e);
209
+ }
210
+ finally {
211
+ active.delete(resource);
212
+ targets.delete(db.get(id).target);
213
+ void pump();
214
+ }
215
+ };
216
+ const injectable = (e) => {
217
+ const rows = Object.values(db.all()).sort((a, b) => a.at - b.at);
218
+ const older = new Set(rows.slice(0, rows.findIndex((x) => x.id === e.id)).map((x) => x.id));
219
+ const resource = io.resource(e.target);
220
+ return !stopped && e.execution === "queued" && !e.canceled && e.deadline > Date.now() && io.valid(e)
221
+ && !targets.has(e.target) && !active.has(resource) && active.size < 4
222
+ && !rows.some((x) => x.id !== e.id && io.resource(x.target) === resource
223
+ && (["dispatching", "uncertain"].includes(x.execution) || (e.priority === "normal"
224
+ && (x.execution === "awaiting-result" || (x.execution === "queued" && older.has(x.id))))));
225
+ };
226
+ async function pump() {
227
+ if (stopped || pumping)
228
+ return;
229
+ pumping = true;
230
+ try {
231
+ // Scan the first unfinished part; later pending parts cannot jump an uncertain predecessor.
232
+ Object.values(outbox.all()).forEach((d) => d.parts.forEach((p, n) => {
233
+ if (!["waiting-ack", "uncertain"].includes(p.state))
234
+ return;
235
+ const evidence = io.deliveryEvidence?.(d, n);
236
+ if (evidence)
237
+ part(d.id, n, { state: evidence.state === "queued" ? "waiting-ack" : evidence.state, ack: evidence.ack, reason: evidence.reason });
238
+ }));
239
+ const finals = Object.values(outbox.all());
240
+ const rotated = [...finals.slice(deliveryCursor), ...finals.slice(0, deliveryCursor)];
241
+ rotated.filter((d) => {
242
+ const p = d.parts.find((x) => x.state !== "delivered");
243
+ return !delivering.has(d.id) && p?.state === "pending" && (p.retryAt ?? 0) <= Date.now();
244
+ }).slice(0, Math.max(0, 4 - delivering.size)).forEach((d) => {
245
+ deliveryCursor = (finals.findIndex((x) => x.id === d.id) + 1) % Math.max(1, finals.length);
246
+ void send(d.id).catch(io.error);
247
+ });
248
+ const rows = Object.values(db.all()).sort((a, b) => a.at - b.at);
249
+ const fair = [...rows.slice(probeCursor), ...rows.slice(0, probeCursor)];
250
+ fair.forEach((e) => {
251
+ if (stopped || probing.has(e.id) || probeTargets.has(e.target) || probeCount >= 16)
252
+ return;
253
+ probeCursor = (rows.findIndex((x) => x.id === e.id) + 1) % Math.max(1, rows.length);
254
+ const failed = (error) => { if (!stopped)
255
+ patch(e.id, { reason: `${db.get(e.id)?.reason ?? ""}; ${why(error)}` }); io.error(error); };
256
+ if (["awaiting-result", "uncertain"].includes(e.execution)) {
257
+ void observe(e).then(() => {
258
+ if (!stopped && e.deadline <= Date.now() && db.get(e.id).execution === "awaiting-result")
259
+ patch(e.id, { execution: "uncertain", reason: "deadline exceeded; result/physical completion not confirmed" });
260
+ }).catch(failed);
261
+ return;
262
+ }
263
+ if (e.execution === "complete") {
264
+ if (!e.finalized) {
265
+ if (!e.canceled)
266
+ io.committed(e);
267
+ if (e.result)
268
+ io.recovered(e);
269
+ patch(e.id, { finalized: true });
270
+ }
271
+ return;
272
+ }
273
+ if (e.execution !== "queued")
274
+ return;
275
+ if (e.deadline <= Date.now() || !io.valid(e)) {
276
+ cancel((x) => x.id === e.id, e.deadline <= Date.now() ? "deadline expired before submission" : "permission withdrawn");
277
+ return;
278
+ }
279
+ if ((e.retryAt ?? 0) > Date.now())
280
+ return;
281
+ if (injectable(e))
282
+ void bounded(e.id, () => io.ready(e)).then((ready) => {
283
+ const current = db.get(e.id);
284
+ if (ready && injectable(current))
285
+ void inject(e.id, io.resource(current.target));
286
+ }).catch(failed);
287
+ });
288
+ }
289
+ catch (e) {
290
+ io.error(e);
291
+ }
292
+ finally {
293
+ pumping = false;
294
+ }
295
+ }
296
+ const resume = () => {
297
+ Object.values(db.all()).filter((e) => e.execution === "dispatching").forEach((e) => patch(e.id, {
298
+ execution: e.exposure === "none" ? "queued" : "uncertain", reason: "daemon restarted at input boundary; transcript evidence required",
299
+ }));
300
+ Object.values(outbox.all()).forEach((d) => d.parts.forEach((p, n) => {
301
+ if (p.state === "sending")
302
+ part(d.id, n, { state: "uncertain", reason: "daemon restarted before final ACK was persisted" });
303
+ }));
304
+ stopped = false;
305
+ accepting = true;
306
+ timer ??= setInterval(() => { void pump(); }, 1000);
307
+ timer.unref();
308
+ void pump();
309
+ };
310
+ return {
311
+ accept, pump, resume, result, delivery, cancel,
312
+ continueResult: (childId) => {
313
+ const child = db.get(childId);
314
+ if (!child?.result || child.canceled)
315
+ return undefined;
316
+ const parentId = (child.replyTo?.kind === "chat" ? child.replyTo.turn : undefined);
317
+ const parent = parentId ? db.get(parentId) : undefined;
318
+ if (!parent || parent.canceled || parent.currentContinuation !== childId || parent.continuationGeneration !== child.parentGeneration)
319
+ return undefined;
320
+ result(parent.id, child.result.body, finalId(parent.id, parent.channel, child.result.body), parent.turn, childId);
321
+ return db.get(parent.id);
322
+ },
323
+ defer: (id, pending) => { if (db.get(id))
324
+ patch(id, { awaitingContinuation: pending }); },
325
+ running: () => !stopped,
326
+ bind: (id, turn) => { if (db.get(id))
327
+ patch(id, { turn }); },
328
+ finished: (id) => { const e = db.get(id); if (e && !e.canceled && !e.result)
329
+ patch(id, { execution: "complete", exposure: "consumed" }); },
330
+ released: (id) => { const e = db.get(id); if (e?.canceled)
331
+ patch(id, { execution: "canceled", reason: `${e.reason ?? "canceled"}; pane idle confirmed` }); },
332
+ stopped: (target, reason) => Object.values(db.all()).filter((e) => e.target === target && e.canceled).forEach((e) => patch(e.id, { execution: "canceled", reason })),
333
+ submission: async (id) => {
334
+ for (;;) {
335
+ const e = db.get(id);
336
+ if (!e)
337
+ return { ok: false, retryable: true, reason: "event missing" };
338
+ if (["submitted", "consumed"].includes(e.exposure))
339
+ return { ok: true };
340
+ if (e.execution === "uncertain" || stopped)
341
+ return { ok: false, uncertain: true, reason: e.reason || "scheduler stopped" };
342
+ if (e.execution === "canceled")
343
+ return { ok: false, reason: e.reason };
344
+ await new Promise((resolve) => setTimeout(resolve, 250));
345
+ }
346
+ },
347
+ stop: () => { accepting = false; stopped = true; clearInterval(timer); timer = undefined; },
348
+ get: (id) => { const e = db.get(id); return e && clone(e); },
349
+ status: () => ({ events: Object.values(db.all()).map((e) => ({ ...clone(e),
350
+ status: e.awaitingContinuation ? "awaiting-result" : e.execution === "dispatching" ? "executing" : e.execution,
351
+ delivery: (() => {
352
+ const parts = Object.values(outbox.all()).filter((d) => d.eventId === e.id).flatMap((d) => d.parts);
353
+ return parts.some((p) => p.state === "failed") ? "failed" : parts.some((p) => p.state === "uncertain") ? "uncertain" : parts.some((p) => p.state !== "delivered") ? "delivery-pending" : parts.length ? "delivered" : "none";
354
+ })(),
355
+ })), deliveries: Object.values(outbox.all()).map(clone) }),
356
+ deliveryStatus: (id) => outbox.get(id)?.parts.map((p) => p.state),
357
+ reconcile: async (id) => { const e = db.get(id); if (e)
358
+ await observe(e); return db.get(id); },
359
+ };
360
+ };
361
+ //# sourceMappingURL=message-events.js.map