wezard 2.7.2 → 2.7.3

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.
@@ -39,13 +39,21 @@ const carryOf = (p) => p.mode === "self"
39
39
  ? `以下是你自己上一段会话压缩出来的交接简报, 据此无缝接着干:\n\n${p.brief}`
40
40
  : `以下是上一个会话交接过来的工作简报,请据此无缝接手并继续:\n\n${p.brief}`;
41
41
  export const createHandoffs = (deps) => {
42
- const save = (p) => void deps.store?.set(p.target, p);
43
- const drop = (p) => deps.store?.drop(p.target);
42
+ /** 每场交接扣下的终句: step 一路传的是不可变快照, 扣下发生在它之外 —— 记在这里, 落盘时并进去。 */
43
+ const cuts = new Map();
44
+ const withCut = (p) => { const c = cuts.get(p.target); return c?.length ? { ...p, cut: [...c] } : p; };
45
+ const save = (p) => void deps.store?.set(p.target, withCut(p));
46
+ const drop = (p) => { cuts.delete(p.target); deps.store?.drop(p.target); };
44
47
  const fail = (p, status, reason) => {
48
+ const cut = withCut(p).cut ?? [];
45
49
  drop(p);
46
- deps.log.warn({ mod: "handoff", target: p.target, stage: p.stage, reason }, "handoff: 放弃");
47
- if (p.mode === "self")
50
+ deps.log.warn({ mod: "handoff", target: p.target, stage: p.stage, reason, cut }, "handoff: 放弃");
51
+ if (p.mode === "self") {
48
52
  deps.notify(p.target, `上下文交接没做成: ${reason}`);
53
+ // 新会话没接上, 没人会「继续 <event>」: 切断那一轮扣下的终句就是那几笔仅有的交代。
54
+ if (cut.length)
55
+ deps.uncut(p.target, cut);
56
+ }
49
57
  return { ok: false, status, reason, ...(p.brief ? { brief: p.brief } : {}) };
50
58
  };
51
59
  const idle = (p, ms) => waitForIdle(p.target, deps.isBusy, ms, () => false);
@@ -147,7 +155,9 @@ export const createHandoffs = (deps) => {
147
155
  deps.log.warn({ mod: "handoff", target: p.target, err: e.message }, "handoff: 简报留档失败");
148
156
  }
149
157
  // 欠账续答排在最后一步: 先落盘再动手 —— reload 正好落在这一刻就重放它 (注入幂等)。
150
- const next = saved({ ...p, stage: "resuming" });
158
+ // 交接做成了: 扣下的终句由「继续 <event>」续答取代, 不再补投。
159
+ cuts.delete(p.target);
160
+ const next = saved({ ...p, cut: undefined, stage: "resuming" });
151
161
  void resumeOwed(next);
152
162
  return { ok: true, brief: p.brief ?? "" };
153
163
  }
@@ -162,6 +172,8 @@ export const createHandoffs = (deps) => {
162
172
  /** 闸立在整场交接上: 发起之后进来的话 (人、同伴、回执、日程) 都进新会话。 */
163
173
  const run = (p) => {
164
174
  const release = hold(p.target);
175
+ if (p.cut?.length)
176
+ cuts.set(p.target, p.cut);
165
177
  if (p.mode === "self" && p.stage === "waiting")
166
178
  cutting.add(p.target);
167
179
  return step(p)
@@ -192,6 +204,15 @@ export const createHandoffs = (deps) => {
192
204
  deps.log.info({ mod: "handoff", resumed: open.map((p) => `${p.target}@${p.stage}`) }, "handoff: reload 后续做");
193
205
  return open.length;
194
206
  },
207
+ cut: (target, event) => {
208
+ const c = cuts.get(target) ?? [];
209
+ if (c.includes(event))
210
+ return;
211
+ cuts.set(target, [...c, event]);
212
+ const p = deps.store?.get(target);
213
+ if (p)
214
+ save(p);
215
+ },
195
216
  };
196
217
  };
197
218
  //# sourceMappingURL=handoff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../daemon/handoff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../daemon/handoff.ts"],"names":[],"mappings":"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"}
@@ -213,6 +213,8 @@ const main = async () => {
213
213
  peerEvents?.accepted(e); },
214
214
  committed: (e) => { if (e.payload.peer)
215
215
  peerEvents?.committed(e); },
216
+ gone: (e) => { if (e.payload.peer)
217
+ peerEvents?.gone?.(e); },
216
218
  canceled: (e) => {
217
219
  if (e.payload.peer)
218
220
  peerEvents?.canceled(e);
@@ -977,8 +979,8 @@ const main = async () => {
977
979
  };
978
980
  /** 一笔活第几个来回 (§3.2): 同一行上已经注入过的续问数 + 1 —— 现算, 不落第二份数据。
979
981
  * 续问的注入事件 id 是 `route:<event>:r<legs>`, 所以从它自己就能数回来 (reload 也在盘上)。 */
980
- const legsOf = (event) => events.status().events.reduce((n, e) => {
981
- const m = e.id.startsWith(`route:${event}:r`) ? Number(e.id.slice(`route:${event}:r`.length)) : NaN;
982
+ const legsOf = (event) => events.ids().reduce((n, id) => {
983
+ const m = id.startsWith(`route:${event}:r`) ? Number(id.slice(`route:${event}:r`.length)) : NaN;
982
984
  return Number.isInteger(m) && m > n ? m : n;
983
985
  }, 1);
984
986
  /** 同一笔活上的一句续问 (idle-nudge 追问 / 工单打回): 不新开行, 注入事件 id
@@ -1051,6 +1053,16 @@ const main = async () => {
1051
1053
  // 交接是生命周期事件, 不进群; 失败只捎给它自己 (它调完 handoff_self 拿到的是
1052
1054
  // scheduled:true, 不说的话它不知道上下文其实没换)。
1053
1055
  notify: (t, text) => notices.post([t], text),
1056
+ // 交接没做成: 切断那一轮扣下的终句按原行补投 —— 走与轮终同一条 onFinal (行已被合成失败落定的, 照追述规则处理)。
1057
+ uncut: (t, ids) => ids.forEach((id) => {
1058
+ const e = events.get(id);
1059
+ if (!e?.result) {
1060
+ log.warn({ target: t, event: id }, "handoff: 扣下的终句已不在事件库, 补投不了");
1061
+ return;
1062
+ }
1063
+ log.info({ target: t, event: id, serves: e.serves }, "handoff: 交接没做成, 补投切断那一轮的终句");
1064
+ settleFinal(e, { text: e.result.body });
1065
+ }),
1054
1066
  log,
1055
1067
  store: loadJsonMap(cfg.wrc.mirror.handoffsFile),
1056
1068
  archive: (e) => {
@@ -1074,7 +1086,7 @@ const main = async () => {
1074
1086
  const waiting = r.kind === "wizard" ? r.to : baseOfKey(r.channel); // 等着它交代的那一方 (信封挂在它名下)
1075
1087
  const channel = r.kind === "chat" ? r.channel : ""; // 结论要落回群里时才带频道 (§9.4)
1076
1088
  const base = `route:${event}:resume`;
1077
- const id = events.status().events.some((e) => e.id === base) ? `${base}:${at}` : base;
1089
+ const id = events.known(base) ? `${base}:${at}` : base;
1078
1090
  try {
1079
1091
  events.accept({
1080
1092
  id, identity: JSON.stringify([t, event, "resume", at]),
@@ -1242,7 +1254,12 @@ const main = async () => {
1242
1254
  if (row.job && isTerminal(out.status) && !row.late)
1243
1255
  jobs.settle(row.job, row.owner, out.status, parseClosing(out.body).artifacts, { turn: event });
1244
1256
  }
1245
- const esc = router.escalate(event, (k) => !!wizards.get(k));
1257
+ postRoute(row, out, router.escalate(event, (k) => !!wizards.get(k)), `rcpt:${event}:${out.rev}`);
1258
+ };
1259
+ /** 一份定论的投递 (账本已记过): 投给升级后的收方 `esc` (没有 = 行上的 receiver)。群收方只落
1260
+ * `hand`; wizard 收方 (含 Dead Letter 退到的群默认 wizard) 进收件箱, id = `inbox`。 */
1261
+ const postRoute = (row, out, esc, inbox) => {
1262
+ const event = row.event;
1246
1263
  const receiver = esc?.receiver ?? row.receiver;
1247
1264
  const via = (esc?.via ?? []).map(displayName);
1248
1265
  // 升级落在 chat 根 = Dead Letter: 退到那个群, 由它的默认 wizard 收下这份结论。
@@ -1266,7 +1283,6 @@ const main = async () => {
1266
1283
  const retellTo = late && servedRow && servedRow.owner === to && servedRow.outcome?.status !== "canceled"
1267
1284
  ? servedRow.receiver.kind === "wizard" ? displayName(servedRow.receiver.to) : chatNameOf(cfg, servedRow.receiver.channel) || servedRow.receiver.channel
1268
1285
  : undefined;
1269
- const inbox = `rcpt:${event}:${out.rev}`;
1270
1286
  const job = row.job ? jobs.get(row.job) : undefined;
1271
1287
  const tally = row.job ? jobs.tally(row.job) : undefined;
1272
1288
  events.accept({
@@ -1291,6 +1307,34 @@ const main = async () => {
1291
1307
  });
1292
1308
  router.commit(ops.hand({ event, inbox }));
1293
1309
  };
1310
+ /** 收件箱里那份回执投不到了 (`gone`: 收方没有绑定, 按 store 也恢复不了) —— 投进去时它还在
1311
+ * 注册表上, 升级没跳过它。现在把它当不在, 沿 receiver 边重走一次升级: 能收的上层 wizard /
1312
+ * 群根 (Dead Letter) 收下。链上无处可升 (根行的收方自己没了): canceled 是收掉它的那一方自己
1313
+ * 发起的, 没人在等, 不再投; 别的定论退到收方的家群 (Dead Letter)。账本不再记第二遍。 */
1314
+ const rerouteGone = (e) => {
1315
+ const from = e.payload.peer?.from;
1316
+ const event = from?.receipt ? from.event : undefined;
1317
+ const row = event ? router.get(event) : undefined;
1318
+ if (!event || !row || !from?.status) {
1319
+ log.warn({ id: e.id, target: e.target }, "receipt reroute: 认不出回执的那一行, 投不出去");
1320
+ return;
1321
+ }
1322
+ const reachable = (k) => k !== e.target && !!wizards.get(k) && !!mirrorStore.get(k);
1323
+ const home = baseOfKey(e.target);
1324
+ const esc = router.escalate(event, reachable)
1325
+ ?? (row.receiver.kind === "wizard" && reachable(row.receiver.to) ? undefined
1326
+ : from.status === "canceled" || home === e.target ? null
1327
+ : { receiver: { kind: "chat", channel: home, message: "" }, serves: "", via: [e.target] });
1328
+ if (esc === null) {
1329
+ log.info({ id: e.id, target: e.target, event, status: from.status }, "receipt reroute: 收方已不在且无处可升, 不再投");
1330
+ return;
1331
+ }
1332
+ const rev = e.id.slice(`rcpt:${event}:`.length).split("~")[0];
1333
+ const prefix = `rcpt:${event}:${rev}~`;
1334
+ const inbox = `${prefix}${events.ids().filter((id) => id.startsWith(prefix)).length + 1}`;
1335
+ log.info({ id: e.id, target: e.target, event, to: esc?.receiver ?? row.receiver, inbox }, "receipt reroute: 收方已不在, 改投");
1336
+ postRoute(row, { status: from.status, body: e.payload.text, rev }, esc, inbox);
1337
+ };
1294
1338
  /** 一条路由 op: 先落盘, 再投该投的 (need / error 带正文入箱; answer 按 receiver 投递)。这里
1295
1339
  * 只管 `re` (`mark open`) 把那一行拉回在飞 —— 账本与工单跟着 deliverRoute 走。 */
1296
1340
  const commitRoute = (op) => {
@@ -1318,10 +1362,17 @@ const main = async () => {
1318
1362
  if (e.serves && bounced.get(e.serves) === e.id)
1319
1363
  return;
1320
1364
  // 自我交接切断的那一轮: 收尾那句不是欠着的那几笔的答案 —— 行留 open, 交给新会话的「继续 <event>」。
1365
+ // 扣下记在这场交接上: 交接没做成 (新会话没起来), 它就是那几笔仅有的交代, 由 uncut 补投。
1321
1366
  if (cuttingTurn(e.target)) {
1322
1367
  log.info({ event: e.id, target: e.target, serves: e.serves }, "handoff: 交接切断的那一轮终句不落定");
1368
+ if (!verdict.error)
1369
+ handoffs.cut(e.target, e.id);
1323
1370
  return;
1324
1371
  }
1372
+ settleFinal(e, verdict);
1373
+ };
1374
+ /** 一轮的终句落到它服务的那一行上 (定论 / 中途态), 验收不合规格就打回续问。 */
1375
+ const settleFinal = (e, verdict) => {
1325
1376
  const plans = router.onFinal(e.target, e.serves, verdict);
1326
1377
  const answer = plans.flatMap((op) => (op.op === "answer" && op.outcome.status === "done" ? [op] : []))[0];
1327
1378
  const row = answer ? router.get(answer.event) : undefined;
@@ -1922,6 +1973,15 @@ const main = async () => {
1922
1973
  if (p.attemptId)
1923
1974
  workflow.cancel(e.target, e.speaker, p.job, p.from.event);
1924
1975
  },
1976
+ // 收方没了: 回执沿链改投; 派活 / 续问不另做 —— 那一行的 owner 就是它, sweeper 见 pane 不在判 dead 上浮。
1977
+ gone: (e) => {
1978
+ const p = e.payload.peer;
1979
+ log.warn({ id: e.id, target: e.target, receipt: !!p.from.receipt }, "message event: 收方已不在 (无绑定, 恢复失败), 不再重投");
1980
+ if (p.attemptId)
1981
+ workflow.dispatched(p.attemptId, false);
1982
+ if (p.from.receipt)
1983
+ rerouteGone(e);
1984
+ },
1925
1985
  ready: async (e) => prereqsOf(e.speaker, e.payload.peer.after ?? []).every((r) => r.state === "done")
1926
1986
  && (e.priority === "now" || await m.idleNow(e.target) || !(await m.paneLive(e.target)) || (e.priority === "urgent" && !(await othersTurn(e.target, e.speaker)))),
1927
1987
  inject: async (e, boundary) => {
@@ -1960,6 +2020,7 @@ const main = async () => {
1960
2020
  return false;
1961
2021
  return router.finalReleased(e.target, e.serves, (events.get(e.id) ?? e).result?.body ?? "");
1962
2022
  });
2023
+ m.setEventHandedAway((e) => { const row = e.serves ? router.get(e.serves) : undefined; return !!row && row.owner !== e.target; });
1963
2024
  // boot 的路由表侧恢复 (T8): held 重查前置、answered 重投一次; 二者幂等, 与 events.resume
1964
2025
  // 重放的注入/回执撞上无害。
1965
2026
  void m.restored.then(() => { events.resume(); settleHeld(); replayAnswered(); });
@@ -2277,6 +2338,9 @@ const main = async () => {
2277
2338
  catch (error) {
2278
2339
  return { status: 409, body: { ok: false, eventId, reason: errText(error) } };
2279
2340
  }
2341
+ // 交出的是人问的那一笔: 那句话的气泡跟着行走, 接手方开轮时接过去续写 (不另开新气泡)。
2342
+ if (handedChat && serves)
2343
+ m.handBubble(self, serves, eventId, target);
2280
2344
  // `re` 把那一笔从 need / error 拉回 open (§3.2 的 need→open / error→open): 行状态是「这份中途态
2281
2345
  // 已经报过了」的去重记号 —— 不拉回去, owner 下一轮交同一个中途态就被静默吞掉 (往返断在这里)。
2282
2346
  if (reTarget && (reTarget.status === "need" || reTarget.status === "error"))
@@ -2428,7 +2492,7 @@ const main = async () => {
2428
2492
  // 同一对并发多笔是允许的 (§4.1): 先取**还在排队**的那份 (那份还没进过你的会话); 都取过了就
2429
2493
  // 报最新那件已交付 —— 绝不把已经 paste 过的那份当成新答案交回来。
2430
2494
  const mine = router.settledTo(self).filter((r) => r.owner === h.target).reverse() // byAt → 新在前
2431
- .map((row) => { const box = receiptOf(row); return { row, box, ev: events.get(box.id) }; });
2495
+ .map((row) => { const box = receiptOf(row); const execution = events.executionOf(box.id); return { row, box, ev: execution && { execution } }; });
2432
2496
  const pick = mine.find((x) => x.ev?.execution === "queued") ?? mine[0];
2433
2497
  if (!pick)
2434
2498
  return { name: h.address, idle: wr.idle, ...(wr.reason ? { reason: wr.reason } : {}),
@@ -3366,12 +3430,8 @@ const main = async () => {
3366
3430
  d = { kind: "spawn", why: `${d.why}; 但它被${t.body.gated === "direction" ? "方向闸" : "冷门控"}退回 (${String(t.body.reason)}) —— 改为白板 spawn` };
3367
3431
  }
3368
3432
  const name = (b.name ?? "").toString().trim();
3369
- const description = (b.description ?? "").toString().trim();
3370
- if (!name || !description) {
3371
- settleRoot(false);
3372
- json(res, 400, { ok: false, decision: "spawn", reason: `${d.why} —— 要新生一个, 带上 name (这件事的短名) 与 description (它的职责) 重发`, ...(shown.length ? { candidates: shown } : {}) });
3373
- return;
3374
- }
3433
+ const description = (b.description ?? "").toString().trim() || clipLine(task, 120);
3434
+ // 空 name 交给 bearAs / claimSlot 按职责自动取名避重, 不当作显式点名复用旧记录。
3375
3435
  const tier = taskTier;
3376
3436
  const born = await bearAs(self, { inherit: false, name, description, tier, ...(lead ? { lead: true } : {}) }, undefined, dispatchOrigin?.authority);
3377
3437
  if (born.status !== 200) {
@@ -3676,6 +3736,8 @@ const main = async () => {
3676
3736
  job: jobId, kind: "task", spawned: true, role: roleParam(body.role),
3677
3737
  ...(plan?.ok && plan.op === "transfer" ? { transferred: true } : {}),
3678
3738
  } } });
3739
+ if (handedChat && serves)
3740
+ m.handBubble(self, serves, eventId, target);
3679
3741
  }
3680
3742
  else if (jobId && birthGuard()) {
3681
3743
  jobs.attach(jobId, { target, task: "", spawned: true, ...(roleParam(body.role) ? { role: roleParam(body.role) } : {}) });
@@ -4871,9 +4933,14 @@ const main = async () => {
4871
4933
  }
4872
4934
  setTimeout(() => void sweep().catch((e) => log.warn({ err: e.message }, "pane cap sweep failed")), 15_000).unref();
4873
4935
  }
4936
+ let shuttingDown = false;
4874
4937
  const shutdown = async (signal) => {
4938
+ if (shuttingDown)
4939
+ return;
4940
+ shuttingDown = true;
4875
4941
  log.info({ signal }, "shutdown signal");
4876
- events.stop();
4942
+ // Pause delivery, but persist arrivals while transports/in-flight handlers drain.
4943
+ events.drain();
4877
4944
  stopSweep();
4878
4945
  scheduler.stop();
4879
4946
  steward?.stop();
@@ -4888,6 +4955,7 @@ const main = async () => {
4888
4955
  setTimeout(() => process.exit(0), 1500).unref();
4889
4956
  await new Promise((r) => setTimeout(r, 200));
4890
4957
  await Promise.allSettled([ws.shutdown(), http.close()]);
4958
+ events.stop();
4891
4959
  process.exit(0);
4892
4960
  };
4893
4961
  http.register("POST /shutdown", (_req, res) => {