wezard 2.7.4 → 2.8.0
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/CLAUDE.md +1 -1
- package/dist/daemon/approval.js +7 -6
- package/dist/daemon/approval.js.map +1 -1
- package/dist/daemon/inbound.js +1 -1
- package/dist/daemon/inbound.js.map +1 -1
- package/dist/daemon/index.js +226 -67
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/jobs.js +7 -4
- package/dist/daemon/jobs.js.map +1 -1
- package/dist/daemon/message-events.js +220 -23
- package/dist/daemon/message-events.js.map +1 -1
- package/dist/daemon/mirror-bridge.js +439 -51
- package/dist/daemon/mirror-bridge.js.map +1 -1
- package/dist/daemon/peers.js +256 -0
- package/dist/daemon/peers.js.map +1 -1
- package/dist/daemon/route.js +274 -49
- package/dist/daemon/route.js.map +1 -1
- package/dist/daemon/router.js +93 -28
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/spawn-tmux.js +6 -7
- package/dist/daemon/spawn-tmux.js.map +1 -1
- package/dist/daemon/wizard.js +11 -11
- package/dist/daemon/wizard.js.map +1 -1
- package/dist/mcp/server.js +8 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/shared/codex-hooks.js +60 -0
- package/dist/shared/codex-hooks.js.map +1 -1
- package/dist/shared/message-footer.js +16 -1
- package/dist/shared/message-footer.js.map +1 -1
- package/dist/shared/modal-pane.js +18 -2
- package/dist/shared/modal-pane.js.map +1 -1
- package/dist/shared/tool-hints.js +2 -2
- package/dist/shared/tool-hints.js.map +1 -1
- package/package.json +1 -1
package/dist/daemon/jobs.js
CHANGED
|
@@ -142,7 +142,7 @@ const attached = (j, member, kind) => {
|
|
|
142
142
|
const { hold: _h, ...unheld } = j;
|
|
143
143
|
const { nudge: _n, ...unnudged } = unheld;
|
|
144
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() }] };
|
|
145
|
+
return { ...base, members: [...rest, { ...member, ...(member.turn && member.turn === prev?.turn && (prev.firstOutcome ?? prev.outcome) ? { firstOutcome: prev.firstOutcome ?? prev.outcome } : {}), task: member.task || prev?.task || "", spawned: member.spawned || !!prev?.spawned, ...(role ? { role } : {}), ...(forkOf ? { forkOf } : {}), at: Date.now() }] };
|
|
146
146
|
};
|
|
147
147
|
export const loadJobStore = (filePath) => {
|
|
148
148
|
const db = loadJsonMap(filePath, dropStale, { strict: true });
|
|
@@ -187,7 +187,9 @@ export const loadJobStore = (filePath) => {
|
|
|
187
187
|
settle: (id, target, outcome, artifacts, identity) => {
|
|
188
188
|
const j = db.get(id);
|
|
189
189
|
const member = j?.members.find((x) => x.target === target);
|
|
190
|
-
if (!j || j.status !== "open" ||
|
|
190
|
+
if (!j || !member || (!member.outcome && j.status !== "open") || j.end === "cancel" || member.outcome === "canceled")
|
|
191
|
+
return undefined;
|
|
192
|
+
if (member.outcome === outcome && JSON.stringify(member.artifacts ?? []) === JSON.stringify(artifacts ?? member.artifacts ?? []))
|
|
191
193
|
return undefined;
|
|
192
194
|
// 锚是 member.turn (account 时从 tell.event 写入 = 派活那一路由行的 event, 落定从
|
|
193
195
|
// deliverRoute 进来带的正是同一个 row.event)。dispatchKey 不当主判据: account 给成员
|
|
@@ -200,12 +202,12 @@ export const loadJobStore = (filePath) => {
|
|
|
200
202
|
return undefined;
|
|
201
203
|
return db.set(id, {
|
|
202
204
|
...j,
|
|
203
|
-
members: j.members.map((x) => (x.target === target ? { ...x, outcome, settledAt: Date.now(), ...(artifacts
|
|
205
|
+
members: j.members.map((x) => (x.target === target ? { ...x, outcome, firstOutcome: x.firstOutcome ?? x.outcome ?? outcome, settledAt: x.settledAt ?? Date.now(), ...(artifacts !== undefined ? { artifacts } : {}) } : x)),
|
|
204
206
|
});
|
|
205
207
|
},
|
|
206
208
|
tally: (id) => {
|
|
207
209
|
const j = db.get(id);
|
|
208
|
-
return j && { done: j.members.filter((x) => x.outcome).length, total: Math.max(j.members.length, j.expect ?? 0) };
|
|
210
|
+
return j && { done: j.members.filter((x) => x.firstOutcome ?? x.outcome).length, total: Math.max(j.members.length, j.expect ?? 0) };
|
|
209
211
|
},
|
|
210
212
|
close: (id, summary, mark) => {
|
|
211
213
|
const j = db.get(id);
|
|
@@ -246,6 +248,7 @@ export const jobEpisode = (job, o) => ({
|
|
|
246
248
|
spawned: mm.spawned,
|
|
247
249
|
task: mm.task,
|
|
248
250
|
...(mm.outcome ? { outcome: mm.outcome } : {}),
|
|
251
|
+
...(mm.firstOutcome ? { firstOutcome: mm.firstOutcome } : {}),
|
|
249
252
|
...(mm.artifacts?.length ? { artifacts: mm.artifacts } : {}),
|
|
250
253
|
})),
|
|
251
254
|
});
|
package/dist/daemon/jobs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../daemon/jobs.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,EAAE;AACF,wDAAwD;AACxD,8CAA8C;AAC9C,kDAAkD;AAClD,cAAc;AACd,EAAE;AACF,iDAAiD;AACjD,mCAAmC;AACnC,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,oDAAoD;AACpD,oDAAoD;AACpD,sCAAsC;AACtC,EAAE;AACF,8CAA8C;AAC9C,8CAA8C;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAW1D,MAAM,CAAC,MAAM,OAAO,GAAsB,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAEzE,kCAAkC;AAClC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,CAAU,EAAsB,EAAE,CAC7E,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS;IAC3B,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,kCAAkC;QAC1E,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB;YACrE,CAAC,CAAC,SAAS,CAAC;AAqGpB;kDACkD;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAChC,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3C,MAAM,KAAK,GAAG,GAAW,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAE3D;uBACuB;AACvB,MAAM,SAAS,GAAG,CAAC,GAA8B,EAA6B,EAAE;IAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC;IAC3C,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,CAAC,CAAY,EAAW,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC7G,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CACxG,CAAC;AACJ,CAAC,CAAC;AAOF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,CAAY,EAAe,EAAE;IACpE,MAAM,EAAE,GAAG,CAAC,GAAc,EAAE,IAAyB,EAAe,EAAE;QACpE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,CAAC,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC;AACF,iBAAiB;AACjB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,CAAY,EAAU,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAyB,EAAE,EAAU,EAAe,EAAE,CAC/E,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE7E,gDAAgD;AAChD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAyB,EAA8B,EAAE;IACjF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,CAAC,CAAY,EAAE,CAAS,EAA8B,EAAE,CACnE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,GAAG;SACP,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;SACvC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,EAAa,EAAc,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,MAAM,CAAC;AAIhE,oCAAoC;AACpC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAY,EAAE,GAAyB,EAAE,IAAgB,EAAY,EAAE;IAC9F,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IACjD,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,aAAa,CAAC,CAAC;IAChE,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;QAC3D,IAAI,IAAI,EAAE,OAAO,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QAC/C,IAAI,IAAI,EAAE,OAAO;YAAE,OAAO,SAAS,CAAC;QACpC,IAAI,MAAM;YAAE,OAAO,SAAS,CAAC;QAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvF,+CAA+C;QAC/C,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACnF,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,MAAM;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC7F,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;QAC9C,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ;YAC9C,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,OAAO,GAAyC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACjH;iEACiE;AACjE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAyB,EAAE,MAAc,EAAE,SAAgC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAU,EAAE,CACtH,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;KACnC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;CACjK,CAAC;KACD,IAAI,CAAC,KAAK,CAAC,CAAC;AAEjB,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAyB,EAAE,KAAa,EAAE,IAAgB,EAAyC,EAAE,CAClI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,SAAS,CAAC;KAC7F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,SAAS,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAEnH,qEAAqE;AACrE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAyB,EAAE,KAAa,EAAE,IAAgB,EAA6C,EAAE,CACpI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,SAAS,CAAC;KAC7F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAE7G,+DAA+D;AAE/D,MAAM,IAAI,GAAG,QAAQ,CAAC;AACtB,kCAAkC;AAClC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAE7B,6DAA6D;AAC7D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,WAAmB,EAAE,KAAqC,EAAU,EAAE,CAChG,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAC1E,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI;QACtC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjC,kDAAkD;AAClD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAU,EAAE;IAC5C,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IACvB,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,GAAG,UAAU;QAAE,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,UAAU;QAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC,CAAC;AAEF,wBAAwB;AACxB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,WAAmB,EAAE,KAAgD,EAAE,GAAW,EAAW,EAAE,CACtH,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AAEnD,4CAA4C;AAC5C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAyB,EAAE,KAAa,EAAe,EAAE,CACpF,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5F,MAAM,QAAQ,GAAG,CAAC,CAAY,EAAE,MAA6B,EAAE,IAAoB,EAAa,EAAE;IAChG,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;IACjE,gDAAgD;IAChD,wBAAwB;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,MAAM,CAAC;IAC7C,iFAAiF;IACjF,gDAAgD;IAChD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC;IACtE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC1C,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7D,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AACrN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAY,EAAE;IACzD,MAAM,EAAE,GAAG,WAAW,CAAY,QAAQ,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,OAAO;QACL,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;YAC1G,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,IAAI,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC3X,CAAC;QACD,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE;YACZ,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC;gBAAE,OAAO,SAAS,CAAC;YACzB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5B,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACpE,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE;YAC7E,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,mDAAmD;YACnD,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC/E,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC1G,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,cAAc;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACrF,MAAM,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YACvF,MAAM,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9H,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACnI,CAAC;QACD,GAAG,EAAE,EAAE,CAAC,GAAG;QACX,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,EAAE;YACpC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;YAChE,yDAAyD;YACzD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC;gBAAE,OAAO,SAAS,CAAC;YACjG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;YACnD,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAC;YAC7E,iEAAiE;YACjE,mEAAmE;YACnE,0DAA0D;YAC1D,iDAAiD;YACjD,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM,CAAC,IAAI;gBAAE,OAAO,SAAS,CAAC;YACpE,IAAI,QAAQ,EAAE,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;mBACtE,QAAQ,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW;gBAAE,OAAO,SAAS,CAAC;YACnE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;gBAChB,GAAG,CAAC;gBACJ,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACjJ,CAAC,CAAC;QACL,CAAC;QACD,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE;YACZ,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC;QACpH,CAAC;QACD,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtM,CAAC;QACD,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;YAClB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC;gBAAE,OAAO,SAAS,CAAC;YACzB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;YAChC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aAC9F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,GAAG,CAAC;YACJ,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAChH,CAAC,CAAC,EAAE,CAAC;QACV,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QACvH,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;KACnC,CAAC;AACJ,CAAC,CAAC;AAEF;iEACiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,GAAc,EACd,CAA0F,EAC9E,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE;IAC9B,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,IAAI;IACZ,GAAG,EAAE,GAAG,CAAC,EAAE;IACX,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;IACtB,IAAI,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;IACvB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;QACzB,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC;QACvB,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC,CAAC;CACJ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../daemon/jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,11 @@ const terminal = (x) => x === "complete" || x === "canceled";
|
|
|
7
7
|
/** complete 要等 finalized (路由判定补完) 才算了结; canceled 本身就是了结。 */
|
|
8
8
|
const settled = (e) => e.execution === "canceled" || (e.execution === "complete" && !!e.finalized);
|
|
9
9
|
const endedAt = (e) => e.endedAt ?? Math.max(e.at, e.result?.at ?? 0, e.turnClosedAt ?? 0, e.releasedAt ?? 0);
|
|
10
|
-
const
|
|
10
|
+
const authorityOf = (e) => ({ id: e.id, target: e.target, serves: e.serves,
|
|
11
|
+
at: e.at, execution: e.execution, canceled: e.canceled || e.execution === "canceled", interjected: e.interjected,
|
|
12
|
+
handoffCut: e.handoffCut, handoffRestored: e.handoffRestored, receiptClaim: e.receiptClaim,
|
|
13
|
+
...(e.payload.human && e.exposure === "none" ? { unexposedHuman: true } : {}) });
|
|
14
|
+
const entomb = (e) => ({ id: e.id, fingerprint: e.fingerprint, execution: e.execution, endedAt: endedAt(e), tomb: true, authority: authorityOf(e) });
|
|
11
15
|
/** 每次落盘前跑: 了结满一天的行裁成墓碑, 墓碑满七天删掉。 */
|
|
12
16
|
export const gcEvents = (now) => (rows) => Object.fromEntries(Object.entries(rows).flatMap(([id, x]) => isTomb(x) ? (now - x.endedAt >= TOMB_TTL_MS ? [] : [[id, x]])
|
|
13
17
|
: settled(x) && terminal(x.execution) && now - endedAt(x) >= TOMB_AFTER_MS ? [[id, entomb({ ...x, execution: x.execution })]]
|
|
@@ -26,6 +30,38 @@ const why = (e) => e instanceof Error ? e.message : typeof e === "object" ? JSON
|
|
|
26
30
|
export const rejectedAck = (e) => !!e && typeof e === "object"
|
|
27
31
|
&& typeof e.errcode === "number" && e.errcode !== 0
|
|
28
32
|
&& typeof e.errmsg === "string" && !!e.headers;
|
|
33
|
+
/** Legacy inbox rows retain their original receipt identity while acquiring structured facts. */
|
|
34
|
+
export const receiptFacts = (e) => e.payload.receipts ??
|
|
35
|
+
(e.payload.peer?.from.receipt ? [{ event: e.payload.peer.from.event ?? e.id,
|
|
36
|
+
version: e.payload.peer.from.event && e.id.startsWith(`rcpt:${e.payload.peer.from.event}:`)
|
|
37
|
+
? e.id.slice(`rcpt:${e.payload.peer.from.event}:`.length).split("~")[0] : e.id, status: e.payload.peer.from.status ?? "done", body: e.payload.text,
|
|
38
|
+
receiver: { kind: "wizard", to: e.target, ...(e.serves ? { event: e.serves } : {}) },
|
|
39
|
+
speaker: e.speaker, envelope: e.payload.peer.envelope }] : []);
|
|
40
|
+
/** Receipt QUIET is a whole-message control word, never a suffix of a real answer. */
|
|
41
|
+
export const receiptQuiet = (e, body) => !!e.payload.peer?.from.receipt && !e.payload.human && !e.interjected && body.trim() === "QUIET";
|
|
42
|
+
export const reportSource = (e) => ({ input: e.id,
|
|
43
|
+
...(e.turn ? { turn: e.turn } : {}),
|
|
44
|
+
...(receiptFacts(e).length ? { facts: receiptFacts(e).map((f) => JSON.stringify([f.event, f.version, f.receiver])) } : {}) });
|
|
45
|
+
export const receiptCoverage = (e, channel = e.channel, question = false, questionText) => {
|
|
46
|
+
const refs = (facts) => [...new Set(facts.map((f) => JSON.stringify([f.event, f.version, f.receiver])))].sort();
|
|
47
|
+
const receipts = receiptFacts(e);
|
|
48
|
+
// Publishing one question does not certify that all incoming NEEDs were handled.
|
|
49
|
+
// Claim the generated question version, leaving every input risk fact unclaimed.
|
|
50
|
+
const risks = receipts.some((f) => f.status !== "done");
|
|
51
|
+
const facts = question && receipts.length ? [JSON.stringify(["question", e.serves ?? "", refs(receipts), digest((questionText ?? e.result?.body ?? "").trim())])]
|
|
52
|
+
: [...refs(receipts.filter((f) => f.status === "done")),
|
|
53
|
+
...(risks ? [JSON.stringify(["summary", e.serves ?? "", refs(receipts)])] : [])];
|
|
54
|
+
return facts.length ? { context: JSON.stringify([e.target, e.serves ?? "", channel]), facts } : undefined;
|
|
55
|
+
};
|
|
56
|
+
const receiptFactOk = (f) => !!f && typeof f.event === "string" && !!f.event
|
|
57
|
+
&& typeof f.version === "string" && !!f.version && typeof f.body === "string" && typeof f.envelope === "string"
|
|
58
|
+
&& typeof f.speaker === "string" && ["done", "need", "error", "timeout", "silent", "dead", "canceled"].includes(f.status)
|
|
59
|
+
&& !!f.receiver && (f.receiver.kind === "wizard" ? typeof f.receiver.to === "string"
|
|
60
|
+
&& (f.receiver.event === undefined || typeof f.receiver.event === "string")
|
|
61
|
+
: f.receiver.kind === "chat" && typeof f.receiver.channel === "string" && typeof f.receiver.message === "string")
|
|
62
|
+
&& (f.source === undefined || !!f.source && typeof f.source.input === "string");
|
|
63
|
+
const coverageOk = (c) => !!c && typeof c.context === "string"
|
|
64
|
+
&& Array.isArray(c.facts) && c.facts.every((f) => typeof f === "string");
|
|
29
65
|
export const createMessageEvents = (file, io) => {
|
|
30
66
|
const db = loadJsonMap(file, (rows) => gcEvents(Date.now())(rows), { strict: true });
|
|
31
67
|
const outbox = loadJsonMap(`${file}.finals`, undefined, { strict: true });
|
|
@@ -33,10 +69,19 @@ export const createMessageEvents = (file, io) => {
|
|
|
33
69
|
if (e && isTomb(e)) {
|
|
34
70
|
if (e.id !== id || typeof e.fingerprint !== "string" || !terminal(e.execution) || !Number.isFinite(e.endedAt))
|
|
35
71
|
throw new Error(`invalid message event tombstone ${id}`);
|
|
72
|
+
const a = e.authority;
|
|
73
|
+
if (a !== undefined && (!a || a.id !== id || !a.target || typeof a.target !== "string" || !Number.isFinite(a.at)
|
|
74
|
+
|| a.execution !== e.execution || (e.execution === "canceled" && a.canceled !== true) || (a.serves !== undefined && typeof a.serves !== "string")
|
|
75
|
+
|| [a.canceled, a.interjected, a.handoffCut, a.handoffRestored].some((v) => v !== undefined && typeof v !== "boolean")
|
|
76
|
+
|| (a.unexposedHuman !== undefined && a.unexposedHuman !== true)))
|
|
77
|
+
throw new Error(`invalid event authority ${id}`);
|
|
36
78
|
return;
|
|
37
79
|
}
|
|
38
80
|
if (!e || e.id !== id || typeof e.fingerprint !== "string" || !e.target || typeof e.speaker !== "string" || typeof e.channel !== "string" || (e.serves !== undefined && typeof e.serves !== "string") || !e.payload || typeof e.payload.text !== "string" || ([e.payload.human, e.payload.peer, e.payload.handoff].filter(Boolean).length !== 1) || !Number.isFinite(e.at) || !Number.isFinite(e.attempts) || !Number.isFinite(e.deadline) || !["queued", "dispatching", "awaiting-result", "complete", "canceled", "uncertain"].includes(e.execution))
|
|
39
81
|
throw new Error(`invalid message event ${id}`);
|
|
82
|
+
if (e.payload.receipts !== undefined && (!e.payload.peer?.from.receipt || !Array.isArray(e.payload.receipts)
|
|
83
|
+
|| !e.payload.receipts.every(receiptFactOk)))
|
|
84
|
+
throw new Error(`invalid receipt facts ${id}`);
|
|
40
85
|
if (e.payload.handoff && (typeof e.payload.handoff.pane !== "string" || !e.payload.handoff.pane || typeof e.payload.handoff.sessionId !== "string" || !e.payload.handoff.sessionId || !e.id.startsWith("handoff:")))
|
|
41
86
|
throw new Error(`invalid handoff event ${id}`);
|
|
42
87
|
const clear = e.payload.handoff?.clear;
|
|
@@ -44,11 +89,30 @@ export const createMessageEvents = (file, io) => {
|
|
|
44
89
|
throw new Error(`invalid handoff clear evidence ${id}`);
|
|
45
90
|
});
|
|
46
91
|
Object.entries(outbox.all()).forEach(([id, d]) => {
|
|
92
|
+
if (d?.coverage !== undefined && !coverageOk(d.coverage))
|
|
93
|
+
throw new Error(`invalid final coverage ${id}`);
|
|
47
94
|
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)
|
|
48
95
|
throw new Error(`invalid final delivery ${id}`);
|
|
49
96
|
});
|
|
97
|
+
// Unknown legacy text cannot certify that its input facts were reported.
|
|
98
|
+
const migrated = Object.fromEntries(Object.values(outbox.all()).flatMap((d) => {
|
|
99
|
+
// Quiet schedules have their own durable intent, without a message inbox row.
|
|
100
|
+
if (!d.purpose && d.eventId === `quiet:${d.target}:${d.turn}`)
|
|
101
|
+
return [[d.id, { ...d, purpose: "task" }]];
|
|
102
|
+
if (d.coverage || d.purpose === "progress" || !d.eventId || (d.reportKind !== "done" && d.reportKind !== "need"))
|
|
103
|
+
return [];
|
|
104
|
+
const e = db.get(d.eventId);
|
|
105
|
+
const coverage = e && !isTomb(e) ? receiptCoverage(e, d.channel, d.reportKind === "need", d.body) : undefined;
|
|
106
|
+
return coverage ? [[d.id, { ...d, coverage }]] : [];
|
|
107
|
+
}));
|
|
108
|
+
if (Object.keys(migrated).length)
|
|
109
|
+
outbox.merge(migrated);
|
|
50
110
|
/** 调度只看活行; 墓碑只给 accept 判重 (与 `known`)。 */
|
|
51
111
|
const live = (id) => { const x = db.get(id); return x && !isTomb(x) ? x : undefined; };
|
|
112
|
+
const sourceOf = (id) => {
|
|
113
|
+
const row = db.get(id);
|
|
114
|
+
return row ? isTomb(row) ? row.authority : authorityOf(row) : undefined;
|
|
115
|
+
};
|
|
52
116
|
const liveRows = () => Object.values(db.all()).filter((x) => !isTomb(x));
|
|
53
117
|
let stopped = true;
|
|
54
118
|
let accepting = true;
|
|
@@ -140,14 +204,50 @@ export const createMessageEvents = (file, io) => {
|
|
|
140
204
|
const d = outbox.get(id);
|
|
141
205
|
outbox.set(id, { ...d, parts: d.parts.map((x, i) => i === n ? { ...x, ...p } : x) });
|
|
142
206
|
};
|
|
207
|
+
const claimsOf = (coverage) => {
|
|
208
|
+
if (!coverage)
|
|
209
|
+
return [];
|
|
210
|
+
const rows = Object.values(outbox.all()).filter((d) => d.coverage?.context === coverage.context
|
|
211
|
+
&& d.coverage.facts.some((f) => coverage.facts.includes(f)));
|
|
212
|
+
const whole = rows.filter((d) => coverage.facts.every((f) => d.coverage.facts.includes(f)));
|
|
213
|
+
const best = whole.find((d) => d.parts.every((p) => p.state !== "failed")) ?? whole[0];
|
|
214
|
+
return best ? [best] : rows;
|
|
215
|
+
};
|
|
216
|
+
const holdReceipt = (e, cause, reason) => {
|
|
217
|
+
patch(e.id, { execution: e.exposure === "none" ? "queued" : "uncertain", deliveryHold: cause,
|
|
218
|
+
reason: `${reason}; receipt retained; POST /message-events/release with id and reason after reconciliation`, retryAt: undefined });
|
|
219
|
+
};
|
|
143
220
|
const cancel = (select, reason = "canceled by owner") => {
|
|
144
221
|
const rows = liveRows().filter((e) => !["complete", "canceled"].includes(e.execution) && select(e));
|
|
145
222
|
rows.forEach((e) => {
|
|
223
|
+
if (receiptFacts(e).length) {
|
|
224
|
+
holdReceipt(e, "owner-stop", reason);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
146
227
|
const next = patch(e.id, { canceled: true, reason, execution: e.exposure === "none" ? "canceled" : "uncertain" });
|
|
147
228
|
io.canceled(next); // Cancellation after exposure never asserts the pane stopped.
|
|
148
229
|
});
|
|
149
230
|
return rows.length;
|
|
150
231
|
};
|
|
232
|
+
const claimReceipt = (id) => {
|
|
233
|
+
const e = live(id);
|
|
234
|
+
if (!e || e.execution !== "queued" || e.exposure !== "none" || e.canceled || e.receiptClaim)
|
|
235
|
+
return { ok: false, reason: "receipt is not an unexposed unclaimed queued input" };
|
|
236
|
+
const facts = receiptFacts(e);
|
|
237
|
+
// wait_peer returns one route outcome, never all the siblings in a merged carrier.
|
|
238
|
+
// Keep mixed carriers intact for explicit release and transcript delivery.
|
|
239
|
+
if (!facts.length || facts.some((f) => f.event !== facts[0].event))
|
|
240
|
+
return { ok: false, reason: "merged receipt contains sibling outcomes; reconcile/release the carrier for transcript delivery" };
|
|
241
|
+
const event = facts[0].event;
|
|
242
|
+
const rows = liveRows().filter((x) => x.target === e.target && x.execution === "queued" && x.exposure === "none"
|
|
243
|
+
&& receiptFacts(x).length && receiptFacts(x).every((f) => f.event === event));
|
|
244
|
+
const at = Date.now();
|
|
245
|
+
db.merge(Object.fromEntries(rows.map((x) => [x.id, { ...x, execution: "complete", finalized: true,
|
|
246
|
+
receiptClaim: { at, via: "wait_peer", event,
|
|
247
|
+
facts: receiptFacts(x).map((f) => JSON.stringify([f.event, f.version, f.receiver])) }, deliveryHold: undefined,
|
|
248
|
+
reason: "receipt taken by wait_peer; CLI consumption not asserted", endedAt: at }])));
|
|
249
|
+
return { ok: true };
|
|
250
|
+
};
|
|
151
251
|
const accept = (input, retire) => {
|
|
152
252
|
if (!accepting)
|
|
153
253
|
throw new Error("message scheduler is stopped");
|
|
@@ -186,19 +286,42 @@ export const createMessageEvents = (file, io) => {
|
|
|
186
286
|
};
|
|
187
287
|
const result = (id, body, revision, turn) => {
|
|
188
288
|
const e = live(id);
|
|
189
|
-
if (!e || e.result?.revision === revision)
|
|
289
|
+
if (!e || e.canceled || e.execution === "canceled" || e.result?.revision === revision)
|
|
190
290
|
return;
|
|
191
|
-
|
|
192
|
-
|
|
291
|
+
const quiet = receiptQuiet(e, body);
|
|
292
|
+
patch(id, { finalized: quiet, quiet: quiet ? true : undefined, result: { body, revision, at: Date.now() }, execution: "complete", exposure: "consumed", ...(turn ? { turn } : {}) });
|
|
293
|
+
if (!quiet)
|
|
294
|
+
io.final?.(live(id), { text: body });
|
|
193
295
|
};
|
|
194
296
|
const delivery = (input) => {
|
|
297
|
+
const source = input.eventId ? live(input.eventId) : undefined;
|
|
298
|
+
const coverage = input.coverage ?? (input.purpose !== "progress" && source
|
|
299
|
+
? receiptCoverage(source, input.channel) ?? (!source.payload.peer?.from.receipt
|
|
300
|
+
? { context: JSON.stringify([source.target, source.serves ?? "", input.channel]), facts: [JSON.stringify([source.serves ?? "", source.id, input.reportKind ?? "done",
|
|
301
|
+
input.reportKind === "need" || input.reportKind === "error" ? digest(input.body.trim()) : undefined])] } : undefined)
|
|
302
|
+
: undefined);
|
|
303
|
+
const covering = claimsOf(coverage);
|
|
304
|
+
if (coverage && covering?.length) {
|
|
305
|
+
const claimed = new Set(covering.flatMap((d) => d.coverage.facts));
|
|
306
|
+
if (coverage.facts.every((f) => claimed.has(f))) {
|
|
307
|
+
// An explicit retry reuses the frozen delivery and only retries proven failures.
|
|
308
|
+
// Delivered and uncertain parts retain their original claims and transport identity.
|
|
309
|
+
const retries = covering.filter((d) => d.coverage.facts.some((f) => coverage.facts.includes(f)) && d.parts.some((p) => p.state === "failed"));
|
|
310
|
+
if (retries.length)
|
|
311
|
+
outbox.merge(Object.fromEntries(retries.map((d) => [d.id, { ...d,
|
|
312
|
+
parts: d.parts.map((p) => p.state === "failed" ? { ...p, state: "pending", retryAt: undefined } : p) }])));
|
|
313
|
+
void pump();
|
|
314
|
+
return covering[0].id;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
195
317
|
const old = outbox.get(input.id);
|
|
196
318
|
if (old) {
|
|
197
319
|
if (old.body !== input.body || old.channel !== input.channel || old.revision !== input.revision)
|
|
198
320
|
throw new Error(`final identity conflict: ${input.id}`);
|
|
199
321
|
return old.id;
|
|
200
322
|
}
|
|
201
|
-
const
|
|
323
|
+
const covered = { ...input, ...(coverage ? { coverage } : {}) };
|
|
324
|
+
const frozen = clone(io.format?.(covered) ?? covered);
|
|
202
325
|
outbox.set(input.id, { ...frozen, at: Date.now(), parts: frozen.chunks.map(() => ({ state: "pending", attempts: 0 })) });
|
|
203
326
|
void pump();
|
|
204
327
|
return input.id;
|
|
@@ -209,6 +332,14 @@ export const createMessageEvents = (file, io) => {
|
|
|
209
332
|
for (let n = 0; n < outbox.get(id).parts.length && !stopped; n++) {
|
|
210
333
|
const d = outbox.get(id);
|
|
211
334
|
const p = d.parts[n];
|
|
335
|
+
const source = d.eventId ? sourceOf(d.eventId) : undefined;
|
|
336
|
+
const cancellation = d.purpose === "cancellation" && source?.canceled && source.unexposedHuman;
|
|
337
|
+
if ((d.eventId && !source && d.purpose !== "task") || (source && source.target !== d.target)
|
|
338
|
+
|| ((source?.canceled || source?.interjected || source?.handoffCut && !source.handoffRestored) && !cancellation)) {
|
|
339
|
+
if (p.state === "pending")
|
|
340
|
+
part(id, n, { state: "failed", reason: "source event canceled or cut before delivery" });
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
212
343
|
if (p.state === "delivered")
|
|
213
344
|
continue;
|
|
214
345
|
if (p.state !== "pending" || (p.retryAt ?? 0) > Date.now())
|
|
@@ -260,24 +391,30 @@ export const createMessageEvents = (file, io) => {
|
|
|
260
391
|
}
|
|
261
392
|
};
|
|
262
393
|
/** 收件箱里的回执事件 (`rcpt:<event>:<rev>`): 只有它带路由归属 (serves), 也只有它该合并。 */
|
|
263
|
-
const isRcpt = (e) => e.id.startsWith("rcpt:") && !!e.serves;
|
|
394
|
+
const isRcpt = (e) => e.id.startsWith("rcpt:") && !!e.payload.peer?.from.receipt && !!e.serves;
|
|
264
395
|
/** §9.3 Aggregator: 同一个 target、服务同一笔 (`serves` = `receiver.event`) 还排着队的其它回执,
|
|
265
396
|
* 并进这一次注入 —— 扇出的兄弟陆续回来时是一轮, 不是一人一轮。被吸收的那些各自收口
|
|
266
397
|
* (`execution: complete`, 它们的 id 已终态, 重放不再注入); 结论由这一轮的终句统一交代。
|
|
267
|
-
*
|
|
398
|
+
* 每项保留独立事实、状态与信封, 合并正文与被吸收行的终态在同一次落盘中提交。 */
|
|
268
399
|
const absorb = (id) => {
|
|
269
400
|
const e = live(id);
|
|
270
|
-
if (!e || !isRcpt(e))
|
|
401
|
+
if (!e || !isRcpt(e) || !io.valid(e))
|
|
271
402
|
return;
|
|
272
403
|
const absorbed = liveRows()
|
|
273
404
|
.filter((x) => x.id !== e.id && isRcpt(x) && x.target === e.target && x.serves === e.serves
|
|
274
|
-
&& x.execution === "queued" && !x.canceled
|
|
275
|
-
|
|
405
|
+
&& x.channel === e.channel && x.execution === "queued" && x.exposure === "none" && !x.canceled && !x.deliveryHold
|
|
406
|
+
&& x.deadline > Date.now() && io.valid(x))
|
|
407
|
+
.sort((a, b) => a.at - b.at || a.id.localeCompare(b.id));
|
|
276
408
|
if (!absorbed.length)
|
|
277
409
|
return;
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
410
|
+
const rows = [e, ...absorbed];
|
|
411
|
+
// Each item keeps its own status and envelope: a NEED must never inherit a sibling's done.
|
|
412
|
+
const receipts = rows.flatMap(receiptFacts);
|
|
413
|
+
const payload = { ...e.payload, receipts, text: receipts.map((f) => `${f.envelope}\n(回执 event=${f.event} version=${f.version} status=${f.status} receiver=${JSON.stringify(f.receiver)})\n${f.body}`).join("\n\n"),
|
|
414
|
+
peer: { ...e.payload.peer, envelope: "以下是同一件活的多份回执。逐项读取各自的状态、来源与正文。" } };
|
|
415
|
+
// One atomic store write: a crash cannot expose a merged input and an unretired sibling.
|
|
416
|
+
db.merge({ [e.id]: { ...e, payload }, ...Object.fromEntries(absorbed.map((x) => [x.id,
|
|
417
|
+
{ ...x, execution: "complete", exposure: "consumed", finalized: true, endedAt: Date.now(), reason: `merged into ${e.id}` }])) });
|
|
281
418
|
};
|
|
282
419
|
const inject = async (id, resource) => {
|
|
283
420
|
const target = live(id).target;
|
|
@@ -286,18 +423,21 @@ export const createMessageEvents = (file, io) => {
|
|
|
286
423
|
try {
|
|
287
424
|
absorb(id);
|
|
288
425
|
const e = live(id);
|
|
289
|
-
if (stopped || e.execution !== "queued" || !io.valid(e))
|
|
426
|
+
if (stopped || e.execution !== "queued" || e.deliveryHold || !io.valid(e))
|
|
290
427
|
return;
|
|
291
428
|
io.accepted(e);
|
|
292
429
|
patch(id, { execution: "dispatching", attempts: e.attempts + 1, transcript: io.transcript(e.target) ?? e.transcript });
|
|
293
430
|
const boundary = (phase, identity) => {
|
|
294
431
|
const current = live(id);
|
|
295
|
-
if (stopped || current.canceled || !io.valid(current))
|
|
432
|
+
if (stopped || current.canceled || current.deliveryHold || !io.valid(current))
|
|
433
|
+
return false;
|
|
434
|
+
// 已收下的输入不再允许迟到的边界回调触碰 pane 或降级消费见证。
|
|
435
|
+
if (current.execution === "complete" || ["submitted", "consumed"].includes(current.exposure))
|
|
296
436
|
return false;
|
|
297
437
|
if (current.exposure !== "none" && current.transcript && current.transcript !== io.transcript(e.target))
|
|
298
438
|
return false;
|
|
299
439
|
if (phase)
|
|
300
|
-
patch(id, { exposure: "possible", sessionId: identity?.sessionId,
|
|
440
|
+
patch(id, { exposure: "possible", sessionId: identity?.sessionId ?? current.sessionId,
|
|
301
441
|
transcript: identity?.transcript ?? io.transcript(e.target) ?? current.transcript });
|
|
302
442
|
return true;
|
|
303
443
|
};
|
|
@@ -314,6 +454,18 @@ export const createMessageEvents = (file, io) => {
|
|
|
314
454
|
io.committed(latest);
|
|
315
455
|
return;
|
|
316
456
|
}
|
|
457
|
+
// 原生消费/收口证据比迟到的注入 ACK 强;既不降回 submitted,也不覆盖真实的收口原因。
|
|
458
|
+
if (latest.exposure === "consumed") {
|
|
459
|
+
if (!latest.canceled)
|
|
460
|
+
io.committed(latest);
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
if (latest.deliveryHold) {
|
|
464
|
+
if (r.ok || r.uncertain || latest.exposure !== "none")
|
|
465
|
+
patch(id, { execution: "uncertain",
|
|
466
|
+
exposure: r.ok ? "submitted" : latest.exposure, reason: `${latest.reason}; late transport outcome requires reconciliation` });
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
317
469
|
if (r.ok && !r.uncertain) {
|
|
318
470
|
const committed = patch(id, { execution: latest.canceled ? "uncertain" : "awaiting-result", exposure: "submitted", transcript: latest.transcript ?? io.transcript(e.target) });
|
|
319
471
|
if (!latest.canceled)
|
|
@@ -326,6 +478,13 @@ export const createMessageEvents = (file, io) => {
|
|
|
326
478
|
io.gone?.(gone);
|
|
327
479
|
patch(id, { execution: "canceled" });
|
|
328
480
|
}
|
|
481
|
+
else if (!r.uncertain && latest.exposure === "none" && !latest.canceled && (!r.retryable || latest.attempts >= 5)) {
|
|
482
|
+
const reason = `${r.reason || "submission failed"}${r.retryable ? "; retry limit reached" : ""}`;
|
|
483
|
+
if (receiptFacts(latest).length)
|
|
484
|
+
holdReceipt(latest, "transport-exhausted", reason);
|
|
485
|
+
else
|
|
486
|
+
cancel((e) => e.id === id, reason);
|
|
487
|
+
}
|
|
329
488
|
else if (r.retryable && !r.uncertain && !latest.canceled) {
|
|
330
489
|
patch(id, { execution: "queued", exposure: "none", retryAt: backoff(latest.attempts), reason: r.reason });
|
|
331
490
|
}
|
|
@@ -367,13 +526,16 @@ export const createMessageEvents = (file, io) => {
|
|
|
367
526
|
const older = new Set(rows.slice(0, rows.findIndex((x) => x.id === e.id)).map((x) => x.id));
|
|
368
527
|
return rows.find((x) => x.id !== e.id
|
|
369
528
|
&& (x.execution === "dispatching"
|
|
370
|
-
|
|
529
|
+
// A consumed, closed input cannot own the next turn. Keep its unknown
|
|
530
|
+
// result for reconciliation without replaying it or pinning later inputs.
|
|
531
|
+
|| (!direct(e) && ((x.execution === "uncertain" && !x.releasedAt
|
|
532
|
+
&& !(x.exposure === "consumed" && x.turnClosedAt))
|
|
371
533
|
|| (e.priority === "normal" && (x.execution === "awaiting-result"
|
|
372
|
-
|| (x.execution === "queued" && (x.retryAt ?? 0) <= Date.now() && older.has(x.id)))))))
|
|
534
|
+
|| (x.execution === "queued" && !x.deliveryHold && (x.retryAt ?? 0) <= Date.now() && older.has(x.id)))))))
|
|
373
535
|
&& resourceOf(x) === resource);
|
|
374
536
|
});
|
|
375
537
|
/** 全局 4 路并发只限回执 / 派活: 人话之间、人话与别的 pane 都互不相干, 只认同 pane 物理互斥。 */
|
|
376
|
-
const injectable = (e) => !stopped && e.execution === "queued" && !e.canceled && e.deadline > Date.now() && io.valid(e)
|
|
538
|
+
const injectable = (e) => !stopped && e.execution === "queued" && !e.canceled && !e.deliveryHold && e.deadline > Date.now() && io.valid(e)
|
|
377
539
|
&& !targets.has(e.target) && !active.has(resourceAt(e.target)) && (direct(e) || active.size < 4)
|
|
378
540
|
&& pinOf(e) === undefined;
|
|
379
541
|
const blockerOf = (hit) => hit && { id: hit.id, execution: hit.execution,
|
|
@@ -394,6 +556,7 @@ export const createMessageEvents = (file, io) => {
|
|
|
394
556
|
const pin = pinOf(e);
|
|
395
557
|
const holds = [
|
|
396
558
|
stopped ? "调度器未运行 (daemon 正在启停)" : "",
|
|
559
|
+
e.deliveryHold ? `回执持久待投 (${e.deliveryHold}); POST /message-events/release with id and reason` : "",
|
|
397
560
|
(e.retryAt ?? 0) > Date.now() ? `上次投递失败, ${new Date(e.retryAt).toTimeString().slice(0, 8)} 重试${e.reason ? `(${e.reason})` : ""}` : "",
|
|
398
561
|
targets.has(e.target) || active.has(resource) ? "同一 pane 正在贴另一条" : "",
|
|
399
562
|
!direct(e) && active.size >= 4 ? `全局同时投递已满 ${active.size} 路` : "",
|
|
@@ -431,6 +594,14 @@ export const createMessageEvents = (file, io) => {
|
|
|
431
594
|
return { ok: false, reason: "unknown event" };
|
|
432
595
|
if (!note)
|
|
433
596
|
return { ok: false, reason: "a reconciliation reason is required" };
|
|
597
|
+
if (e.deliveryHold && e.execution === "queued" && e.exposure === "none" && !e.canceled) {
|
|
598
|
+
const next = patch(id, { deliveryHold: undefined, attempts: 0, retryAt: undefined,
|
|
599
|
+
deadline: Math.max(e.deadline, Date.now() + 3600_000), reason: `receipt delivery explicitly resumed: ${note}` });
|
|
600
|
+
void pump();
|
|
601
|
+
return { ok: true, event: clone(next) };
|
|
602
|
+
}
|
|
603
|
+
if (e.deliveryHold)
|
|
604
|
+
return { ok: false, reason: "held receipt has possible exposure; reconcile transcript before any retry" };
|
|
434
605
|
if (!["awaiting-result", "uncertain"].includes(e.execution) || e.exposure === "none")
|
|
435
606
|
return { ok: false, reason: `event is not an exposed unresolved delivery (${e.execution}/${e.exposure})` };
|
|
436
607
|
if (e.releaseSource === "manual")
|
|
@@ -471,8 +642,14 @@ export const createMessageEvents = (file, io) => {
|
|
|
471
642
|
return;
|
|
472
643
|
// Expiration and permission withdrawal are ledger work; a busy or hung
|
|
473
644
|
// probe on this pane must not prevent queued messages from expiring.
|
|
645
|
+
if (e.execution === "queued" && e.deliveryHold)
|
|
646
|
+
return;
|
|
474
647
|
if (e.execution === "queued" && (e.deadline <= Date.now() || !io.valid(e))) {
|
|
475
|
-
|
|
648
|
+
const reason = e.deadline <= Date.now() ? "deadline expired before submission" : "permission withdrawn";
|
|
649
|
+
if (receiptFacts(e).length)
|
|
650
|
+
holdReceipt(e, "transport-exhausted", reason);
|
|
651
|
+
else
|
|
652
|
+
cancel((x) => x.id === e.id, reason);
|
|
476
653
|
return;
|
|
477
654
|
}
|
|
478
655
|
if (["awaiting-result", "uncertain"].includes(e.execution) && e.deadline <= Date.now() && !e.releasedAt) {
|
|
@@ -587,12 +764,19 @@ export const createMessageEvents = (file, io) => {
|
|
|
587
764
|
void pump();
|
|
588
765
|
};
|
|
589
766
|
return {
|
|
590
|
-
accept, pump, resume, result, delivery, cancel, blocker, queue, release,
|
|
767
|
+
accept, pump, resume, result, delivery, cancel, blocker, queue, release, claimReceipt,
|
|
591
768
|
running: () => !stopped,
|
|
592
769
|
bind: (id, turn) => { if (live(id))
|
|
593
770
|
patch(id, { turn }); },
|
|
594
|
-
finished: (id) => {
|
|
595
|
-
|
|
771
|
+
finished: (id) => {
|
|
772
|
+
const e = live(id);
|
|
773
|
+
// Physical completion is not a task answer. Keep the missing outcome
|
|
774
|
+
// visible while allowing the next input to use this pane.
|
|
775
|
+
if (e && !e.canceled && !e.result)
|
|
776
|
+
patch(id, { execution: "uncertain", exposure: "consumed",
|
|
777
|
+
turnClosedAt: e.turnClosedAt ?? Date.now(),
|
|
778
|
+
reason: "input turn ended without a final assistant answer; automatic retry withheld" });
|
|
779
|
+
},
|
|
596
780
|
released: (id) => { const e = live(id); if (e?.canceled)
|
|
597
781
|
patch(id, { execution: "canceled", reason: `${e.reason ?? "canceled"}; pane idle confirmed` }); },
|
|
598
782
|
stopped: (target, reason) => liveRows().filter((e) => e.target === target && e.canceled).forEach((e) => patch(e.id, { execution: "canceled", reason })),
|
|
@@ -603,6 +787,8 @@ export const createMessageEvents = (file, io) => {
|
|
|
603
787
|
return { ok: false, retryable: true, reason: "event missing" };
|
|
604
788
|
if (["submitted", "consumed"].includes(e.exposure))
|
|
605
789
|
return { ok: true };
|
|
790
|
+
if (e.deliveryHold)
|
|
791
|
+
return { ok: false, retryable: false, uncertain: e.exposure !== "none", reason: e.reason };
|
|
606
792
|
if (e.execution === "uncertain" || stopped)
|
|
607
793
|
return { ok: false, uncertain: true, reason: e.reason || "scheduler stopped" };
|
|
608
794
|
if (e.execution === "canceled")
|
|
@@ -623,6 +809,16 @@ export const createMessageEvents = (file, io) => {
|
|
|
623
809
|
ids: () => Object.keys(db.all()),
|
|
624
810
|
/** 只问执行态 (含墓碑): 判「这份投过没有」的调用方不必在乎它是不是已被裁掉。 */
|
|
625
811
|
executionOf: (id) => db.get(id)?.execution,
|
|
812
|
+
exposureOf: (id) => {
|
|
813
|
+
const e = live(id);
|
|
814
|
+
// Absorbed siblings are complete/consumed before their carrier is injected.
|
|
815
|
+
// Without their own result, that bookkeeping is not consumption evidence.
|
|
816
|
+
return e?.execution === "complete" && !e.result ? undefined : e?.exposure;
|
|
817
|
+
},
|
|
818
|
+
authorityOf: (id) => {
|
|
819
|
+
const authority = sourceOf(id);
|
|
820
|
+
return authority && clone(authority);
|
|
821
|
+
},
|
|
626
822
|
// A transfer moves the route, not the human's original reply stream. Derive the
|
|
627
823
|
// binding from durable inputs so chained transfers and reload use the same bubble.
|
|
628
824
|
latestTransfer: (serves) => {
|
|
@@ -644,6 +840,7 @@ export const createMessageEvents = (file, io) => {
|
|
|
644
840
|
/** 一条 event 的 status 视图 —— 轮询单条的调用方 (回归脚本) 不必为它把全表算一遍。 */
|
|
645
841
|
event: (id) => { const e = live(id); return e && scan(() => view(e, partsByEvent().get(id) ?? [])); },
|
|
646
842
|
deliveryStatus: (id) => outbox.get(id)?.parts.map((p) => p.state),
|
|
843
|
+
deliveryClaims: (coverage) => claimsOf(coverage).map((d) => ({ id: d.id, states: d.parts.map((p) => p.state) })),
|
|
647
844
|
// 泵可能正在同一 pane 上取证; 外部交接轮询复用在飞探针, 不能把 busy 当投递失败。
|
|
648
845
|
reconcile: async (id) => {
|
|
649
846
|
const e = live(id);
|