@xgjktech/xg_cwork_im 1.15.1 → 1.15.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.
Files changed (42) hide show
  1. package/README.md +3 -2
  2. package/dist/src/block-streaming-config.test.js +7 -1
  3. package/dist/src/block-streaming-config.test.js.map +1 -1
  4. package/dist/src/channel-config.d.ts +18 -0
  5. package/dist/src/channel-config.d.ts.map +1 -1
  6. package/dist/src/channel-config.js +10 -0
  7. package/dist/src/channel-config.js.map +1 -1
  8. package/dist/src/deliver-text.d.ts +18 -1
  9. package/dist/src/deliver-text.d.ts.map +1 -1
  10. package/dist/src/deliver-text.js +43 -4
  11. package/dist/src/deliver-text.js.map +1 -1
  12. package/dist/src/deliver-text.test.js +77 -3
  13. package/dist/src/deliver-text.test.js.map +1 -1
  14. package/dist/src/dispatch-mentioned-reply.d.ts.map +1 -1
  15. package/dist/src/dispatch-mentioned-reply.js +157 -38
  16. package/dist/src/dispatch-mentioned-reply.js.map +1 -1
  17. package/dist/src/inbound-terminal-delivery.d.ts +2 -0
  18. package/dist/src/inbound-terminal-delivery.d.ts.map +1 -1
  19. package/dist/src/inbound-terminal-delivery.js +1 -0
  20. package/dist/src/inbound-terminal-delivery.js.map +1 -1
  21. package/dist/src/inbound-terminal-state.test.js +1 -16
  22. package/dist/src/inbound-terminal-state.test.js.map +1 -1
  23. package/dist/src/thinking-ws-progress.test.js +1 -4
  24. package/dist/src/thinking-ws-progress.test.js.map +1 -1
  25. package/dist/src/turn-deliver-buffer.d.ts +41 -0
  26. package/dist/src/turn-deliver-buffer.d.ts.map +1 -0
  27. package/dist/src/turn-deliver-buffer.js +66 -0
  28. package/dist/src/turn-deliver-buffer.js.map +1 -0
  29. package/dist/src/turn-deliver-buffer.test.d.ts +2 -0
  30. package/dist/src/turn-deliver-buffer.test.d.ts.map +1 -0
  31. package/dist/src/turn-deliver-buffer.test.js +116 -0
  32. package/dist/src/turn-deliver-buffer.test.js.map +1 -0
  33. package/dist/src/types.d.ts +7 -0
  34. package/dist/src/types.d.ts.map +1 -1
  35. package/dist/src/types.js.map +1 -1
  36. package/dist/src/user-facing-errors.d.ts +7 -0
  37. package/dist/src/user-facing-errors.d.ts.map +1 -1
  38. package/dist/src/user-facing-errors.js +10 -1
  39. package/dist/src/user-facing-errors.js.map +1 -1
  40. package/dist/src/user-facing-errors.test.js +6 -0
  41. package/dist/src/user-facing-errors.test.js.map +1 -1
  42. package/package.json +2 -2
package/README.md CHANGED
@@ -247,14 +247,15 @@ openclaw gateway restart
247
247
  | `initialReconnectDelay` | number | `1000` | 初始重连延迟(ms) |
248
248
  | `maxReconnectDelay` | number | `60000` | 最大重连延迟(ms) |
249
249
  | `reconnectJitter` | number | `0.3` | 重连抖动因子(0-1) |
250
- | `firstReplyTimeoutMs` | number | `1800000`(30 分钟) | **首条 AI 回复超时时间(毫秒)**。未配置时代码使用 `**30 * 60_000`**(`channel.ts` `dispatchMentionedReply`)。超时后通过 HTTP 将占位更新为超时提示。该键目前**未**写入 `XgImConfigSchema`,仅作为运行时字段生效(`types.ts` 中有类型说明)。 |
250
+ | `firstReplyTimeoutMs` | number | `1800000`(30 分钟) | **首条 HTTP 回复超时(毫秒)**:在尚未通过 `deliver` 发出任何业务回复时触发。超时文案按插件观测分为:`never_started`(模型未启动)、`in_progress`(dispatch 仍在进行,可能仍在处理)、`ended_without_http_reply`(dispatch 已结束但仍无 HTTP 回复)。**不是** OpenClaw 运行态 API,长任务仍可能随后继续产出回复。IM 工具进度走 WS,与 HTTP 首包超时相互独立。 |
251
251
  | `inboundMediaWorkspaceSubdir` | string | — | **可选**。非空时,将入站附件先下载到**当前 Agent workspace** 下该**相对子目录**(如 `xg_im_inbound`),路径约定:`{子目录}/{发送者 userId}/{YYYY-MM-DD}/{文件名}_{HHmmssmmm}.ext`(时间为本机写入时刻),再向 OpenClaw 传入 **MediaPath**;默认使用 **workspace 相对路径**(如 `./xg_im_inbound/...`),便于 **沙箱** 将 `/workspace` 映射到同一套目录树;未配置则仍使用 IM 返回的 URL。需 runtime 提供 `resolveAgentWorkspaceDir`。 |
252
252
  | `inboundMediaOpenClawPath` | string | `workspaceRelative`(默认) | `workspaceRelative`:入站落盘后 `MediaPath` 为 `./子目录/...`(若配置了 `inboundMediaSandboxRootPrefix` 则为该前缀 + 相对路径,如 `/workspace/xg_im_inbound/...`);`absoluteFileUrl`:宿主机 `file://...`(仅适合无沙箱、网关与 Agent 同盘场景)。 |
253
253
  | `inboundMediaSandboxRootPrefix` | string | — | **可选**。沙箱内 workspace 挂载根,填 `**/workspace`** 时,在 `workspaceRelative` 模式下 `MediaPath` 为 `**/workspace/xg_im_inbound/...**`,避免 `./` 被 `read` 等工具按**进程 cwd**解析导致「不可访问」。须以 `/` 开头。 |
254
254
  | `syncServiceBaseUrl` | string | — | **可选**。openclaw-xgkb-sync **管理 API** 根地址(如 `http://127.0.0.1:9090`)。配置后插件可处理 IM 下发的 `openclawApplySyncMapping` 信令并登记目录映射。详见 `docs/im服务接口说明.md`。 |
255
255
  | `projectPromptMaxChars` | number | `15000` | `agentContext.background` 与 `userInfo.background` 单段最大字符数;超出尾部截断。 |
256
- | `blockStreaming` | boolean | `true`(未配置时) | 开启后,assistant 每个 **text 块结束(tool 调用前)** HTTP 发送中间正文(OpenClaw `text_end`);tool 过程仍走 WS `TOOL_PHASE`。设为 `false` 恢复整轮结束才 deliver 一次。 |
256
+ | `blockStreaming` | boolean | `true`(未配置时) | 开启后 OpenClaw 在 assistant **text 块结束(tool 调用前)** 即调用 `deliver`;插件默认经 **段缓冲** `onToolStart` / 轮次结束再 HTTP(见 `deliverSegmentBuffer`)。tool 过程走 WS `TOOL_PHASE`。设为 `false` 恢复整轮结束才 deliver 一次。 |
257
257
  | `blockStreamingCoalesce` | object | 不配 | 可选:合并同一 text 块内 token 碎片(`minChars` / `maxChars` / `idleMs`)。IM 默认不配;**若未在通道配置,插件会自动注入 `minChars:1 idleMs:0`,覆盖 `agents.defaults` 里偏大的 coalesce**。 |
258
+ | `deliverSegmentBuffer` | boolean | `true`(未配置时) | `blockStreaming` 开启时,同一段 assistant 正文先写入 buffer,在 **tool 开始前**(interim)与 **dispatch 结束**(final)各冲刷一次 HTTP,避免修稿重复气泡。设为 `false` 恢复「每次 deliver 即 HTTP + C7 去重」。详见 `docs/段缓冲投递策略.md`。 |
258
259
  | `deliverModelFallbackNotice` | boolean | `false`(未配置时) | 为 `true` 时向 IM 用户发送 OpenClaw 模型降级运营通知(`↪️ Model Fallback: …`)。默认不发送,仅保留 gateway 日志。 |
259
260
 
260
261
 
@@ -1,6 +1,6 @@
1
1
  import assert from "node:assert/strict";
2
2
  import { describe, it } from "node:test";
3
- import { IM_BLOCK_STREAMING_COALESCE_DEFAULT, isInboundBlockStreamingEnabled, resolveBlockStreamingReplyOptions, resolveDispatchOpenClawCfg, } from "./channel-config.js";
3
+ import { IM_BLOCK_STREAMING_COALESCE_DEFAULT, isDeliverSegmentBufferEnabled, isInboundBlockStreamingEnabled, resolveBlockStreamingReplyOptions, resolveDispatchOpenClawCfg, } from "./channel-config.js";
4
4
  function cfg(overrides = {}) {
5
5
  return { baseUrl: "https://example.com", ...overrides };
6
6
  }
@@ -37,5 +37,11 @@ describe("block streaming config", () => {
37
37
  const patched = resolveDispatchOpenClawCfg(baseOpenClawCfg, cfg({ blockStreamingCoalesce: custom }));
38
38
  assert.equal(patched, baseOpenClawCfg);
39
39
  });
40
+ it("deliverSegmentBuffer enabled by default when unset", () => {
41
+ assert.equal(isDeliverSegmentBufferEnabled(cfg()), true);
42
+ });
43
+ it("deliverSegmentBuffer disabled when false", () => {
44
+ assert.equal(isDeliverSegmentBufferEnabled(cfg({ deliverSegmentBuffer: false })), false);
45
+ });
40
46
  });
41
47
  //# sourceMappingURL=block-streaming-config.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"block-streaming-config.test.js","sourceRoot":"","sources":["../../src/block-streaming-config.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACH,mCAAmC,EACnC,8BAA8B,EAC9B,iCAAiC,EACjC,0BAA0B,GAC7B,MAAM,qBAAqB,CAAC;AAG7B,SAAS,GAAG,CAAC,YAAiC,EAAE;IAC5C,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,SAAS,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,eAAe,GAAG;IACpB,MAAM,EAAE;QACJ,QAAQ,EAAE;YACN,sBAAsB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;SAC5E;KACJ;IACD,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE;CACL,CAAC;AAE7D,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,CAAC,iCAAiC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACpF,MAAM,CAAC,SAAS,CAAC,iCAAiC,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE;YAChF,qBAAqB,EAAE,IAAI;SAC9B,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC5E,MAAM,OAAO,GAAG,0BAA0B,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,MAAM,EAAE,GAAI,OAAiF;aACxF,QAAQ,EAAE,WAAW,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,GAAG,mCAAmC,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACvE,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,0BAA0B,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,sBAAsB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACrG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"block-streaming-config.test.js","sourceRoot":"","sources":["../../src/block-streaming-config.test.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,7 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
44
44
  idleMs?: number | undefined;
45
45
  }>>;
46
46
  deliverModelFallbackNotice: z.ZodOptional<z.ZodBoolean>;
47
+ deliverSegmentBuffer: z.ZodOptional<z.ZodBoolean>;
47
48
  accounts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
48
49
  robotKey: z.ZodOptional<z.ZodString>;
49
50
  appKey: z.ZodOptional<z.ZodString>;
@@ -83,6 +84,11 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
83
84
  * 未配置时默认不发送(仅 gateway 日志)。
84
85
  */
85
86
  deliverModelFallbackNotice: z.ZodOptional<z.ZodBoolean>;
87
+ /**
88
+ * 为 false 时关闭段缓冲:blockStreaming 下每次 deliver 仍立即 HTTP(配合 C7 去重)。
89
+ * 未配置且 blockStreaming 开启时默认开启。
90
+ */
91
+ deliverSegmentBuffer: z.ZodOptional<z.ZodBoolean>;
86
92
  }, "strip", z.ZodTypeAny, {
87
93
  agentId: string;
88
94
  groupPolicy: "open" | "mention";
@@ -105,6 +111,7 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
105
111
  idleMs?: number | undefined;
106
112
  } | undefined;
107
113
  deliverModelFallbackNotice?: boolean | undefined;
114
+ deliverSegmentBuffer?: boolean | undefined;
108
115
  }, {
109
116
  robotKey?: string | undefined;
110
117
  appKey?: string | undefined;
@@ -127,6 +134,7 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
127
134
  idleMs?: number | undefined;
128
135
  } | undefined;
129
136
  deliverModelFallbackNotice?: boolean | undefined;
137
+ deliverSegmentBuffer?: boolean | undefined;
130
138
  }>>>;
131
139
  }, "strip", z.ZodTypeAny, {
132
140
  agentId: string;
@@ -162,6 +170,7 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
162
170
  idleMs?: number | undefined;
163
171
  } | undefined;
164
172
  deliverModelFallbackNotice?: boolean | undefined;
173
+ deliverSegmentBuffer?: boolean | undefined;
165
174
  }> | undefined;
166
175
  robotKey?: string | undefined;
167
176
  appKey?: string | undefined;
@@ -182,6 +191,7 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
182
191
  idleMs?: number | undefined;
183
192
  } | undefined;
184
193
  deliverModelFallbackNotice?: boolean | undefined;
194
+ deliverSegmentBuffer?: boolean | undefined;
185
195
  }, {
186
196
  baseUrl: string;
187
197
  accounts?: Record<string, {
@@ -206,6 +216,7 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
206
216
  idleMs?: number | undefined;
207
217
  } | undefined;
208
218
  deliverModelFallbackNotice?: boolean | undefined;
219
+ deliverSegmentBuffer?: boolean | undefined;
209
220
  }> | undefined;
210
221
  robotKey?: string | undefined;
211
222
  appKey?: string | undefined;
@@ -236,6 +247,7 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
236
247
  idleMs?: number | undefined;
237
248
  } | undefined;
238
249
  deliverModelFallbackNotice?: boolean | undefined;
250
+ deliverSegmentBuffer?: boolean | undefined;
239
251
  }>, {
240
252
  agentId: string;
241
253
  baseUrl: string;
@@ -270,6 +282,7 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
270
282
  idleMs?: number | undefined;
271
283
  } | undefined;
272
284
  deliverModelFallbackNotice?: boolean | undefined;
285
+ deliverSegmentBuffer?: boolean | undefined;
273
286
  }> | undefined;
274
287
  robotKey?: string | undefined;
275
288
  appKey?: string | undefined;
@@ -290,6 +303,7 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
290
303
  idleMs?: number | undefined;
291
304
  } | undefined;
292
305
  deliverModelFallbackNotice?: boolean | undefined;
306
+ deliverSegmentBuffer?: boolean | undefined;
293
307
  }, {
294
308
  baseUrl: string;
295
309
  accounts?: Record<string, {
@@ -314,6 +328,7 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
314
328
  idleMs?: number | undefined;
315
329
  } | undefined;
316
330
  deliverModelFallbackNotice?: boolean | undefined;
331
+ deliverSegmentBuffer?: boolean | undefined;
317
332
  }> | undefined;
318
333
  robotKey?: string | undefined;
319
334
  appKey?: string | undefined;
@@ -344,6 +359,7 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
344
359
  idleMs?: number | undefined;
345
360
  } | undefined;
346
361
  deliverModelFallbackNotice?: boolean | undefined;
362
+ deliverSegmentBuffer?: boolean | undefined;
347
363
  }>;
348
364
  /** 将 `robotKey`(推荐)或旧字段 `appKey` 归一为鉴权可用的密钥(两字段同步为同一非空值)。 */
349
365
  export declare function normalizeRobotKey<T extends {
@@ -356,6 +372,8 @@ export declare function getXgImConfig(cfg: OpenClawConfig, accountId?: string |
356
372
  export declare function isInboundBlockStreamingEnabled(config: XgImConfig): boolean;
357
373
  /** 是否向 IM 投递 OpenClaw 模型降级运营通知(仅显式 true 时发送)。 */
358
374
  export declare function shouldDeliverModelFallbackNoticeToIm(config: XgImConfig): boolean;
375
+ /** blockStreaming 开启时是否启用段缓冲(未显式 false 时默认开启)。 */
376
+ export declare function isDeliverSegmentBufferEnabled(config: XgImConfig): boolean;
359
377
  /** IM 通道未配置 coalesce 时,用于覆盖 agents.defaults 中偏大值的即时 flush 策略 */
360
378
  export declare const IM_BLOCK_STREAMING_COALESCE_DEFAULT: {
361
379
  readonly minChars: 1;
@@ -1 +1 @@
1
- {"version":3,"file":"channel-config.d.ts","sourceRoot":"","sources":["../../src/channel-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAuC7C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAdzB;;;WAGG;;QAEH,8DAA8D;;;;;;;;;;;;;;QAE9D;;;WAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuFD,CAAC;AAEP,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAIhG;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAuBxF;AAED,gDAAgD;AAChD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAE1E;AAED,iDAAiD;AACjD,wBAAgB,oCAAoC,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAEhF;AAED,gEAAgE;AAChE,eAAO,MAAM,mCAAmC;;;;CAItC,CAAC;AAEX,6DAA6D;AAC7D,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,qBAAqB,EAAE,OAAO,CAAA;CAAE,CAExG;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,cAAc,CAsBlG;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBvG;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAOzD;AAUD,wBAAgB,+BAA+B,CAC3C,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,cAAc,EACnB,CAAC,EAAE;IACC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,iEAAiE;IACjE,QAAQ,EAAE,gBAAgB,CAAC;CAC9B,GACF,OAAO,CA6BT"}
1
+ {"version":3,"file":"channel-config.d.ts","sourceRoot":"","sources":["../../src/channel-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA4C7C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAnBzB;;;WAGG;;QAEH,8DAA8D;;;;;;;;;;;;;;QAE9D;;;WAGG;;QAEH;;;WAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwFD,CAAC;AAEP,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAIhG;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAuBxF;AAED,gDAAgD;AAChD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAE1E;AAED,iDAAiD;AACjD,wBAAgB,oCAAoC,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAEhF;AAED,kDAAkD;AAClD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAEzE;AAED,gEAAgE;AAChE,eAAO,MAAM,mCAAmC;;;;CAItC,CAAC;AAEX,6DAA6D;AAC7D,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,qBAAqB,EAAE,OAAO,CAAA;CAAE,CAExG;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,cAAc,CAsBlG;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBvG;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAOzD;AAUD,wBAAgB,+BAA+B,CAC3C,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,cAAc,EACnB,CAAC,EAAE;IACC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,iEAAiE;IACjE,QAAQ,EAAE,gBAAgB,CAAC;CAC9B,GACF,OAAO,CA6BT"}
@@ -37,6 +37,11 @@ const XgImAccountConfigSchema = z.object({
37
37
  * 未配置时默认不发送(仅 gateway 日志)。
38
38
  */
39
39
  deliverModelFallbackNotice: z.boolean().optional(),
40
+ /**
41
+ * 为 false 时关闭段缓冲:blockStreaming 下每次 deliver 仍立即 HTTP(配合 C7 去重)。
42
+ * 未配置且 blockStreaming 开启时默认开启。
43
+ */
44
+ deliverSegmentBuffer: z.boolean().optional(),
40
45
  });
41
46
  export const XgImConfigSchema = z
42
47
  .object({
@@ -66,6 +71,7 @@ export const XgImConfigSchema = z
66
71
  blockStreaming: z.boolean().optional(),
67
72
  blockStreamingCoalesce: blockStreamingCoalesceSchema,
68
73
  deliverModelFallbackNotice: z.boolean().optional(),
74
+ deliverSegmentBuffer: z.boolean().optional(),
69
75
  accounts: z.record(z.string(), XgImAccountConfigSchema).optional(),
70
76
  })
71
77
  .superRefine((val, ctx) => {
@@ -154,6 +160,10 @@ export function isInboundBlockStreamingEnabled(config) {
154
160
  export function shouldDeliverModelFallbackNoticeToIm(config) {
155
161
  return config.deliverModelFallbackNotice === true;
156
162
  }
163
+ /** blockStreaming 开启时是否启用段缓冲(未显式 false 时默认开启)。 */
164
+ export function isDeliverSegmentBufferEnabled(config) {
165
+ return config.deliverSegmentBuffer !== false;
166
+ }
157
167
  /** IM 通道未配置 coalesce 时,用于覆盖 agents.defaults 中偏大值的即时 flush 策略 */
158
168
  export const IM_BLOCK_STREAMING_COALESCE_DEFAULT = {
159
169
  minChars: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"channel-config.js","sourceRoot":"","sources":["../../src/channel-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel-config.js","sourceRoot":"","sources":["../../src/channel-config.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,15 @@
1
1
  /**
2
- * deliver 正文预处理:剥离 OpenClaw MEDIA 指令行、同轮重复纯文本抑制。
2
+ * deliver 正文预处理:剥离 OpenClaw MEDIA 指令行、用量 footer、同轮重复纯文本抑制。
3
3
  */
4
4
  /** 从用户可见正文中移除 `MEDIA:<path>` 独立行(OpenClaw 媒体指令不应出现在 IM 正文里)。 */
5
5
  export declare function stripMediaDirectiveLines(text: string): string;
6
+ /** 移除模型用量 footer 行(仅用于同轮去重比较,不用于改写发给 IM 的正文)。 */
7
+ export declare function stripModelUsageFooter(text: string): string;
8
+ /**
9
+ * 用于同轮去重的正文归一化:剥 MEDIA / footer,折叠空白与空行差异。
10
+ * footer 在发给用户时保留;去重时忽略 footer 差异。
11
+ */
12
+ export declare function normalizeDeliverComparableText(text: string): string;
6
13
  /** 同轮内:若本条与上一条已发正文相同且本条无媒体,则视为重复 deliver,应跳过。 */
7
14
  export declare function shouldSuppressDuplicateTextDeliver(args: {
8
15
  textPart: string;
@@ -10,4 +17,14 @@ export declare function shouldSuppressDuplicateTextDeliver(args: {
10
17
  lastDeliveredText: string;
11
18
  lastDeliveredHadMedia: boolean;
12
19
  }): boolean;
20
+ /**
21
+ * 带附件 deliver:若 caption 与同轮已发纯文归一化后相同,则只发文件、省略重复 caption。
22
+ * 典型:先 HTTP 纯文 (#3),再文+附件 (#4) → 用户只应看到「说明 + 文件」,而非说明两次。
23
+ */
24
+ export declare function shouldOmitDuplicateFileCaption(args: {
25
+ textPart: string;
26
+ hasMedia: boolean;
27
+ lastDeliveredText: string;
28
+ lastDeliveredHadMedia: boolean;
29
+ }): boolean;
13
30
  //# sourceMappingURL=deliver-text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deliver-text.d.ts","sourceRoot":"","sources":["../../src/deliver-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,gEAAgE;AAChE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO7D;AAED,iDAAiD;AACjD,wBAAgB,kCAAkC,CAAC,IAAI,EAAE;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;CAClC,GAAG,OAAO,CAQV"}
1
+ {"version":3,"file":"deliver-text.d.ts","sourceRoot":"","sources":["../../src/deliver-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,gEAAgE;AAChE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO7D;AAED,iDAAiD;AACjD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASnE;AAED,iDAAiD;AACjD,wBAAgB,kCAAkC,CAAC,IAAI,EAAE;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;CAClC,GAAG,OAAO,CAQV;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;CAClC,GAAG,OAAO,CAQV"}
@@ -1,7 +1,9 @@
1
1
  /**
2
- * deliver 正文预处理:剥离 OpenClaw MEDIA 指令行、同轮重复纯文本抑制。
2
+ * deliver 正文预处理:剥离 OpenClaw MEDIA 指令行、用量 footer、同轮重复纯文本抑制。
3
3
  */
4
4
  const MEDIA_LINE_RE = /^\s*MEDIA:\s*.+/i;
5
+ /** OpenClaw 模型用量 footer,例如 `_🟡 ↑111k ↓164 · 63%ctx · openai/gpt-5.5_` */
6
+ const MODEL_USAGE_FOOTER_LINE_RE = /^\s*_?\s*[🟢🟡🔴]\s*↑[\d.]+[kmKM]?\s*↓\d+.*(?:ctx|·).+$/u;
5
7
  /** 从用户可见正文中移除 `MEDIA:<path>` 独立行(OpenClaw 媒体指令不应出现在 IM 正文里)。 */
6
8
  export function stripMediaDirectiveLines(text) {
7
9
  const lines = text.split(/\r?\n/);
@@ -11,18 +13,55 @@ export function stripMediaDirectiveLines(text) {
11
13
  .replace(/\n{3,}/g, "\n\n")
12
14
  .trim();
13
15
  }
16
+ /** 移除模型用量 footer 行(仅用于同轮去重比较,不用于改写发给 IM 的正文)。 */
17
+ export function stripModelUsageFooter(text) {
18
+ const lines = text.split(/\r?\n/);
19
+ const kept = lines.filter((line) => !MODEL_USAGE_FOOTER_LINE_RE.test(line));
20
+ return kept.join("\n").trim();
21
+ }
22
+ /**
23
+ * 用于同轮去重的正文归一化:剥 MEDIA / footer,折叠空白与空行差异。
24
+ * footer 在发给用户时保留;去重时忽略 footer 差异。
25
+ */
26
+ export function normalizeDeliverComparableText(text) {
27
+ let t = stripModelUsageFooter(stripMediaDirectiveLines(text));
28
+ t = t.replace(/\r\n/g, "\n");
29
+ t = t
30
+ .split("\n")
31
+ .map((line) => line.replace(/[ \t]+/g, " ").trim())
32
+ .filter((line) => line.length > 0 && !/^-{3,}$/.test(line))
33
+ .join("\n");
34
+ return t.trim();
35
+ }
14
36
  /** 同轮内:若本条与上一条已发正文相同且本条无媒体,则视为重复 deliver,应跳过。 */
15
37
  export function shouldSuppressDuplicateTextDeliver(args) {
16
38
  if (args.hasMedia)
17
39
  return false;
18
- const text = stripMediaDirectiveLines(args.textPart);
40
+ const text = normalizeDeliverComparableText(args.textPart);
19
41
  if (!text)
20
42
  return false;
21
43
  if (!args.lastDeliveredText)
22
44
  return false;
23
- if (text !== args.lastDeliveredText)
45
+ const last = normalizeDeliverComparableText(args.lastDeliveredText);
46
+ if (text !== last)
24
47
  return false;
25
- // 上一条已发过同文(含「文+附件」caption 或纯文),本条纯文重复
26
48
  return args.lastDeliveredHadMedia || text.length > 0;
27
49
  }
50
+ /**
51
+ * 带附件 deliver:若 caption 与同轮已发纯文归一化后相同,则只发文件、省略重复 caption。
52
+ * 典型:先 HTTP 纯文 (#3),再文+附件 (#4) → 用户只应看到「说明 + 文件」,而非说明两次。
53
+ */
54
+ export function shouldOmitDuplicateFileCaption(args) {
55
+ if (!args.hasMedia)
56
+ return false;
57
+ const caption = normalizeDeliverComparableText(args.textPart);
58
+ if (caption.length < 16)
59
+ return false;
60
+ if (!args.lastDeliveredText)
61
+ return false;
62
+ const last = normalizeDeliverComparableText(args.lastDeliveredText);
63
+ if (!last)
64
+ return false;
65
+ return caption === last;
66
+ }
28
67
  //# sourceMappingURL=deliver-text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deliver-text.js","sourceRoot":"","sources":["../../src/deliver-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEzC,gEAAgE;AAChE,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,OAAO,IAAI;SACN,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,kCAAkC,CAAC,IAKlD;IACG,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,CAAC,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,IAAI,KAAK,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAClD,sCAAsC;IACtC,OAAO,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"deliver-text.js","sourceRoot":"","sources":["../../src/deliver-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEzC,0EAA0E;AAC1E,MAAM,0BAA0B,GAC5B,0DAA0D,CAAC;AAE/D,gEAAgE;AAChE,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,OAAO,IAAI;SACN,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAAY;IACvD,IAAI,CAAC,GAAG,qBAAqB,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC,GAAG,CAAC;SACA,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;SAClD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1D,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,kCAAkC,CAAC,IAKlD;IACG,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,IAAI,GAAG,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,CAAC,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,IAAI,GAAG,8BAA8B,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpE,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,OAAO,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAK9C;IACG,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,OAAO,GAAG,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,CAAC,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,IAAI,GAAG,8BAA8B,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpE,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,OAAO,KAAK,IAAI,CAAC;AAC5B,CAAC"}
@@ -1,13 +1,53 @@
1
1
  import assert from "node:assert/strict";
2
2
  import { describe, it } from "node:test";
3
- import { shouldSuppressDuplicateTextDeliver, stripMediaDirectiveLines } from "./deliver-text.js";
3
+ import { normalizeDeliverComparableText, shouldOmitDuplicateFileCaption, shouldSuppressDuplicateTextDeliver, stripMediaDirectiveLines, stripModelUsageFooter, } from "./deliver-text.js";
4
+ // 生产 incident 回归:侯桐 2026-07-10 终态三连发(空行/footer 微差)
5
+ const HOUTONG_BODY_LOOSE = `确实是这个问题:昨天那版虽然用了内嵌 SVG,但你现在的文档预览器没有把 SVG 正常渲染出来,所以流程看不到。
6
+
7
+ 我已经重新生成了一版**纯 Markdown 可读版**:
8
+
9
+ - 不用 SVG
10
+ - 不用 Mermaid
11
+ - 不用图片
12
+ - 全部用 Markdown 表格 + 文本流程图 + 状态表表达
13
+
14
+ 这样在 IM 文件预览里也能直接看懂完整流程。
15
+
16
+ 新文件:
17
+
18
+ -----`;
19
+ const HOUTONG_BODY_TIGHT = `确实是这个问题:昨天那版虽然用了内嵌 SVG,但你现在的文档预览器没有把 SVG 正常渲染出来,所以流程看不到。
20
+ 我已经重新生成了一版**纯 Markdown 可读版**:
21
+ - 不用 SVG
22
+ - 不用 Mermaid
23
+ - 不用图片
24
+ - 全部用 Markdown 表格 + 文本流程图 + 状态表表达
25
+ 这样在 IM 文件预览里也能直接看懂完整流程。
26
+ 新文件:`;
27
+ const HOUTONG_BODY_WITH_FOOTER = `${HOUTONG_BODY_TIGHT}
28
+
29
+ _🟡 ↑111k ↓164 · 63%ctx · openai/gpt-5.5_`;
4
30
  describe("stripMediaDirectiveLines", () => {
5
31
  it("removes MEDIA directive lines", () => {
6
32
  const input = "文件在这里\nMEDIA:./xg-cwork-im/report.md\n";
7
33
  assert.equal(stripMediaDirectiveLines(input), "文件在这里");
8
34
  });
9
- it("keeps text without MEDIA lines", () => {
10
- assert.equal(stripMediaDirectiveLines("你好"), "你好");
35
+ it("keeps usage footer in user-visible text (footer only stripped for dedup)", () => {
36
+ const withFooter = "正文\n\n_🟡 ↑111k ↓164 · 63%ctx · openai/gpt-5.5_";
37
+ assert.equal(stripMediaDirectiveLines(withFooter), withFooter);
38
+ });
39
+ });
40
+ describe("stripModelUsageFooter", () => {
41
+ it("removes usage footer line", () => {
42
+ assert.equal(stripModelUsageFooter("正文\n\n_🟡 ↑111k ↓164 · 63%ctx · openai/gpt-5.5_"), "正文");
43
+ });
44
+ });
45
+ describe("normalizeDeliverComparableText", () => {
46
+ it("treats loose vs tight newlines as same (Houtong case)", () => {
47
+ assert.equal(normalizeDeliverComparableText(HOUTONG_BODY_LOOSE), normalizeDeliverComparableText(HOUTONG_BODY_TIGHT));
48
+ });
49
+ it("ignores usage footer when comparing", () => {
50
+ assert.equal(normalizeDeliverComparableText(HOUTONG_BODY_TIGHT), normalizeDeliverComparableText(HOUTONG_BODY_WITH_FOOTER));
11
51
  });
12
52
  });
13
53
  describe("shouldSuppressDuplicateTextDeliver", () => {
@@ -27,5 +67,39 @@ describe("shouldSuppressDuplicateTextDeliver", () => {
27
67
  lastDeliveredHadMedia: true,
28
68
  }), false);
29
69
  });
70
+ it("suppresses third pure-text burst after text+file (Houtong #5)", () => {
71
+ assert.equal(shouldSuppressDuplicateTextDeliver({
72
+ textPart: HOUTONG_BODY_TIGHT,
73
+ hasMedia: false,
74
+ lastDeliveredText: HOUTONG_BODY_WITH_FOOTER,
75
+ lastDeliveredHadMedia: true,
76
+ }), true);
77
+ });
78
+ it("does not suppress distinct tool-before progress", () => {
79
+ assert.equal(shouldSuppressDuplicateTextDeliver({
80
+ textPart: "我先读一下原文档",
81
+ hasMedia: false,
82
+ lastDeliveredText: HOUTONG_BODY_TIGHT,
83
+ lastDeliveredHadMedia: false,
84
+ }), false);
85
+ });
86
+ });
87
+ describe("shouldOmitDuplicateFileCaption", () => {
88
+ it("omits caption when same text was just sent as RICH_TEXT (#4 after #3)", () => {
89
+ assert.equal(shouldOmitDuplicateFileCaption({
90
+ textPart: HOUTONG_BODY_WITH_FOOTER,
91
+ hasMedia: true,
92
+ lastDeliveredText: HOUTONG_BODY_LOOSE,
93
+ lastDeliveredHadMedia: false,
94
+ }), true);
95
+ });
96
+ it("keeps caption when preceding text differed", () => {
97
+ assert.equal(shouldOmitDuplicateFileCaption({
98
+ textPart: HOUTONG_BODY_TIGHT,
99
+ hasMedia: true,
100
+ lastDeliveredText: "现在生成一个纯 Markdown 版本",
101
+ lastDeliveredHadMedia: false,
102
+ }), false);
103
+ });
30
104
  });
31
105
  //# sourceMappingURL=deliver-text.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deliver-text.test.js","sourceRoot":"","sources":["../../src/deliver-text.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,kCAAkC,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAEjG,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,MAAM,KAAK,GAAG,wCAAwC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,KAAK,CACR,kCAAkC,CAAC;YAC/B,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE,KAAK;YACf,iBAAiB,EAAE,OAAO;YAC1B,qBAAqB,EAAE,IAAI;SAC9B,CAAC,EACF,IAAI,CACP,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,KAAK,CACR,kCAAkC,CAAC;YAC/B,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,OAAO;YAC1B,qBAAqB,EAAE,IAAI;SAC9B,CAAC,EACF,KAAK,CACR,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"deliver-text.test.js","sourceRoot":"","sources":["../../src/deliver-text.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-mentioned-reply.d.ts","sourceRoot":"","sources":["../../src/dispatch-mentioned-reply.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAA2C,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAyBtG,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAyF3E,mDAAmD;AACnD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IAC/C,EAAE,EAAE,GAAG,CAAC;IACR,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,eAAe,EAAE,WAAW,CAAC;IAC7B,YAAY,EAAE,cAAc,CAAC;IAC7B,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,cAAc,CAAC,EAAE,cAAc,CAAC;CACnC,GAAG,OAAO,CAAC,IAAI,CAAC,CA+fhB"}
1
+ {"version":3,"file":"dispatch-mentioned-reply.d.ts","sourceRoot":"","sources":["../../src/dispatch-mentioned-reply.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAA2C,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAiCtG,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAyF3E,mDAAmD;AACnD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IAC/C,EAAE,EAAE,GAAG,CAAC;IACR,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,eAAe,EAAE,WAAW,CAAC;IAC7B,YAAY,EAAE,cAAc,CAAC;IAC7B,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,cAAc,CAAC,EAAE,cAAc,CAAC;CACnC,GAAG,OAAO,CAAC,IAAI,CAAC,CA4oBhB"}