@xgjktech/xg_cwork_im 1.13.1 → 1.15.1

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 (100) hide show
  1. package/README.md +3 -0
  2. package/dist/src/agent-context-types.d.ts +39 -1
  3. package/dist/src/agent-context-types.d.ts.map +1 -1
  4. package/dist/src/agent-context-types.js +52 -7
  5. package/dist/src/agent-context-types.js.map +1 -1
  6. package/dist/src/agent-context-types.test.d.ts +2 -0
  7. package/dist/src/agent-context-types.test.d.ts.map +1 -0
  8. package/dist/src/agent-context-types.test.js +61 -0
  9. package/dist/src/agent-context-types.test.js.map +1 -0
  10. package/dist/src/block-streaming-config.test.d.ts +2 -0
  11. package/dist/src/block-streaming-config.test.d.ts.map +1 -0
  12. package/dist/src/block-streaming-config.test.js +41 -0
  13. package/dist/src/block-streaming-config.test.js.map +1 -0
  14. package/dist/src/build-project-prompt.d.ts.map +1 -1
  15. package/dist/src/build-project-prompt.js +5 -1
  16. package/dist/src/build-project-prompt.js.map +1 -1
  17. package/dist/src/channel-config.d.ts +128 -0
  18. package/dist/src/channel-config.d.ts.map +1 -1
  19. package/dist/src/channel-config.js +67 -0
  20. package/dist/src/channel-config.js.map +1 -1
  21. package/dist/src/channel.d.ts.map +1 -1
  22. package/dist/src/channel.js +22 -7
  23. package/dist/src/channel.js.map +1 -1
  24. package/dist/src/connection.d.ts +7 -0
  25. package/dist/src/connection.d.ts.map +1 -1
  26. package/dist/src/connection.js +16 -1
  27. package/dist/src/connection.js.map +1 -1
  28. package/dist/src/deliver-text.d.ts +13 -0
  29. package/dist/src/deliver-text.d.ts.map +1 -0
  30. package/dist/src/deliver-text.js +28 -0
  31. package/dist/src/deliver-text.js.map +1 -0
  32. package/dist/src/deliver-text.test.d.ts +2 -0
  33. package/dist/src/deliver-text.test.d.ts.map +1 -0
  34. package/dist/src/deliver-text.test.js +31 -0
  35. package/dist/src/deliver-text.test.js.map +1 -0
  36. package/dist/src/dispatch-mentioned-reply.d.ts.map +1 -1
  37. package/dist/src/dispatch-mentioned-reply.js +96 -20
  38. package/dist/src/dispatch-mentioned-reply.js.map +1 -1
  39. package/dist/src/inbound-display.d.ts +2 -0
  40. package/dist/src/inbound-display.d.ts.map +1 -1
  41. package/dist/src/inbound-display.js +16 -5
  42. package/dist/src/inbound-display.js.map +1 -1
  43. package/dist/src/inbound-input-media.js +1 -1
  44. package/dist/src/inbound-input-media.js.map +1 -1
  45. package/dist/src/inbound-media-local.js +1 -1
  46. package/dist/src/inbound-media-local.js.map +1 -1
  47. package/dist/src/inbound-terminal-delivery.d.ts +9 -3
  48. package/dist/src/inbound-terminal-delivery.d.ts.map +1 -1
  49. package/dist/src/inbound-terminal-delivery.js +74 -16
  50. package/dist/src/inbound-terminal-delivery.js.map +1 -1
  51. package/dist/src/inbound-terminal-state.d.ts +18 -2
  52. package/dist/src/inbound-terminal-state.d.ts.map +1 -1
  53. package/dist/src/inbound-terminal-state.js +71 -23
  54. package/dist/src/inbound-terminal-state.js.map +1 -1
  55. package/dist/src/inbound-terminal-state.test.js +69 -7
  56. package/dist/src/inbound-terminal-state.test.js.map +1 -1
  57. package/dist/src/per-message-fallback-notice.d.ts +11 -1
  58. package/dist/src/per-message-fallback-notice.d.ts.map +1 -1
  59. package/dist/src/per-message-fallback-notice.js +16 -1
  60. package/dist/src/per-message-fallback-notice.js.map +1 -1
  61. package/dist/src/per-message-fallback-notice.test.d.ts +2 -0
  62. package/dist/src/per-message-fallback-notice.test.d.ts.map +1 -0
  63. package/dist/src/per-message-fallback-notice.test.js +47 -0
  64. package/dist/src/per-message-fallback-notice.test.js.map +1 -0
  65. package/dist/src/recommended-system-prompt.d.ts +1 -1
  66. package/dist/src/recommended-system-prompt.d.ts.map +1 -1
  67. package/dist/src/recommended-system-prompt.js +1 -1
  68. package/dist/src/recommended-system-prompt.js.map +1 -1
  69. package/dist/src/resource-file.d.ts +20 -1
  70. package/dist/src/resource-file.d.ts.map +1 -1
  71. package/dist/src/resource-file.js +160 -36
  72. package/dist/src/resource-file.js.map +1 -1
  73. package/dist/src/resource-file.test.d.ts +2 -0
  74. package/dist/src/resource-file.test.d.ts.map +1 -0
  75. package/dist/src/resource-file.test.js +64 -0
  76. package/dist/src/resource-file.test.js.map +1 -0
  77. package/dist/src/send-service.d.ts +2 -0
  78. package/dist/src/send-service.d.ts.map +1 -1
  79. package/dist/src/send-service.js +38 -8
  80. package/dist/src/send-service.js.map +1 -1
  81. package/dist/src/thinking-ws-progress.d.ts +24 -0
  82. package/dist/src/thinking-ws-progress.d.ts.map +1 -0
  83. package/dist/src/thinking-ws-progress.js +45 -0
  84. package/dist/src/thinking-ws-progress.js.map +1 -0
  85. package/dist/src/thinking-ws-progress.test.d.ts +2 -0
  86. package/dist/src/thinking-ws-progress.test.d.ts.map +1 -0
  87. package/dist/src/thinking-ws-progress.test.js +41 -0
  88. package/dist/src/thinking-ws-progress.test.js.map +1 -0
  89. package/dist/src/types.d.ts +27 -0
  90. package/dist/src/types.d.ts.map +1 -1
  91. package/dist/src/types.js.map +1 -1
  92. package/dist/src/user-facing-errors.d.ts +20 -0
  93. package/dist/src/user-facing-errors.d.ts.map +1 -0
  94. package/dist/src/user-facing-errors.js +105 -0
  95. package/dist/src/user-facing-errors.js.map +1 -0
  96. package/dist/src/user-facing-errors.test.d.ts +2 -0
  97. package/dist/src/user-facing-errors.test.d.ts.map +1 -0
  98. package/dist/src/user-facing-errors.test.js +62 -0
  99. package/dist/src/user-facing-errors.test.js.map +1 -0
  100. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"send-service.d.ts","sourceRoot":"","sources":["../../src/send-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAQrC,OAAO,KAAK,EAA8C,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAsL3G,uEAAuE;AACvE,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACvC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,EAC5B,SAAS,GAAE,MAAM,EAAO,EACxB,GAAG,CAAC,EAAE,GAAG,EACT,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,gBAAgB,EACxB,iBAAiB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,IAAI,CAAC,CAsGf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACjC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAM,EAAO,EACxB,GAAG,CAAC,EAAE,GAAG,EACT,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAqBf"}
1
+ {"version":3,"file":"send-service.d.ts","sourceRoot":"","sources":["../../src/send-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAWrC,OAAO,KAAK,EAA8C,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA8M3G,uEAAuE;AACvE,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACvC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,EAC5B,SAAS,GAAE,MAAM,EAAO,EACxB,GAAG,CAAC,EAAE,GAAG,EACT,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,gBAAgB,EACxB,iBAAiB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgHf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACjC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAM,EAAO,EACxB,GAAG,CAAC,EAAE,GAAG,EACT,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -5,7 +5,9 @@
5
5
  * 支持 RICH_TEXT 与带资源 fileId 的 FILE 类型(attachments)。
6
6
  */
7
7
  import axios from "axios";
8
- import { downloadMediaBuffer, formatFromFilename, resolveMaxAttachmentBytes, resolveResourceUploadUrl, uploadWholeResourceFile, } from "./resource-file.js";
8
+ import { downloadMediaBuffer, formatFromFilename, parseWorkspaceRelativeMediaRef, resolveMaxAttachmentBytes, resolveResourceUploadUrl, uploadWholeResourceFile, } from "./resource-file.js";
9
+ import { stripMediaDirectiveLines } from "./deliver-text.js";
10
+ import { formatUserFacingMediaDeliverError } from "./user-facing-errors.js";
9
11
  function formatDeliverError(err) {
10
12
  if (axios.isAxiosError(err)) {
11
13
  const parts = [err.message];
@@ -19,6 +21,20 @@ function formatDeliverError(err) {
19
21
  return err.message;
20
22
  return String(err);
21
23
  }
24
+ /** 文件下载/上传失败时:正文 + 原始媒体链接 + 失败说明(链接可供用户或后续轮次使用)。 */
25
+ function buildFileDeliverFallbackText(textToSend, mediaUrls, err) {
26
+ const errNote = `(${formatUserFacingMediaDeliverError(err, mediaUrls)})`;
27
+ const urlBlock = mediaUrls.length > 0
28
+ ? `\n\n**附件链接(未能上传 IM)**\n${mediaUrls.map((u) => `- \`${u.trim()}\``).join("\n")}`
29
+ : "";
30
+ if (textToSend.length > 0) {
31
+ return `${textToSend}${urlBlock}\n\n${errNote}`;
32
+ }
33
+ if (urlBlock.trim()) {
34
+ return `${urlBlock.trim()}\n\n${errNote}`;
35
+ }
36
+ return errNote;
37
+ }
22
38
  /** 用于合并流式占位消息:trim 后非空才写入请求体 `msgId` */
23
39
  function normalizePlaceholderMsgId(msgId) {
24
40
  if (msgId == null)
@@ -40,11 +56,17 @@ function summarizePlaceholderMsgId(raw) {
40
56
  /**
41
57
  * 发消息接口的重试参数。
42
58
  *
43
- * 总尝试次数 = 1(首次) + IM_SEND_MAX_RETRIES(重试) = 6,间隔约 1 秒。
59
+ * 总尝试次数 = 1(首次) + IM_SEND_MAX_RETRIES(重试) = 6
60
+ * 重试间隔指数退避:1s → 2s → 4s → 8s → 16s(上限 IM_SEND_RETRY_DELAY_CAP_MS)。
44
61
  * 仅对网络层瞬时错误(无响应 / 5xx / 408 / 429)重试;4xx 与业务 resultCode 错误视为永久失败,立即抛出。
45
62
  */
46
63
  const IM_SEND_MAX_RETRIES = 5;
47
- const IM_SEND_RETRY_DELAY_MS = 1_000;
64
+ const IM_SEND_RETRY_DELAY_BASE_MS = 1_000;
65
+ const IM_SEND_RETRY_DELAY_CAP_MS = 30_000;
66
+ function calcSendRetryDelayMs(attempt) {
67
+ const exp = IM_SEND_RETRY_DELAY_BASE_MS * 2 ** Math.max(0, attempt - 1);
68
+ return Math.min(exp, IM_SEND_RETRY_DELAY_CAP_MS);
69
+ }
48
70
  function delay(ms) {
49
71
  return new Promise((resolve) => setTimeout(resolve, ms));
50
72
  }
@@ -153,9 +175,10 @@ async function postImMessage(config, token, groupId, body, atUserIds = [], log)
153
175
  `(attempt=${attempt}/${totalAttempts}, retryable=${retryable}): ${msg}`);
154
176
  throw err;
155
177
  }
178
+ const retryDelayMs = calcSendRetryDelayMs(attempt);
156
179
  sendLogWarn(log, `[cwork_im:send] Send failed (attempt=${attempt}/${totalAttempts}), ` +
157
- `retrying in ${IM_SEND_RETRY_DELAY_MS}ms: ${msg}`);
158
- await delay(IM_SEND_RETRY_DELAY_MS);
180
+ `retrying in ${retryDelayMs}ms: ${msg}`);
181
+ await delay(retryDelayMs);
159
182
  }
160
183
  }
161
184
  // 理论上不可达:上面循环里要么 return 要么 throw。这里只是给 TS 一个安全兜底。
@@ -173,7 +196,7 @@ export async function sendReplyDeliverBlock(config, token, groupId, payload, atU
173
196
  if (msgId !== undefined && placeholderMsgId === undefined) {
174
197
  sendLogWarn(log, `[cwork_im:send] sendReplyDeliverBlock: placeholder msgId omitted (empty/whitespace only after trim) raw=${JSON.stringify(msgId)}`);
175
198
  }
176
- const textToSend = (payload.markdown || payload.text || "").trim();
199
+ const textToSend = stripMediaDirectiveLines((payload.markdown || payload.text || "").trim());
177
200
  const mediaList = [
178
201
  ...(payload.mediaUrl ? [payload.mediaUrl] : []),
179
202
  ...((payload.mediaUrls ?? []).filter((u) => typeof u === "string" && u.trim())),
@@ -187,6 +210,13 @@ export async function sendReplyDeliverBlock(config, token, groupId, payload, atU
187
210
  `isThinking=${payload.isThinking ?? false}`);
188
211
  if (wantFile) {
189
212
  const fileUploadUrl = resolveResourceUploadUrl(config.baseUrl);
213
+ if (!agentWorkspaceDir?.trim() && uniqueUrls.some((u) => {
214
+ const t = u.trim();
215
+ return t.startsWith("/workspace") || parseWorkspaceRelativeMediaRef(t) != null;
216
+ })) {
217
+ sendLogWarn(log, `[cwork_im:send] agentWorkspaceDir missing for workspace media; ` +
218
+ `falling back to cwd and /workspace candidates (text-only unaffected) refs=${uniqueUrls.length}`);
219
+ }
190
220
  try {
191
221
  const attachments = [];
192
222
  for (const u of uniqueUrls) {
@@ -220,8 +250,8 @@ export async function sendReplyDeliverBlock(config, token, groupId, payload, atU
220
250
  }
221
251
  catch (err) {
222
252
  sendLogError(log, `[cwork_im:send] FILE deliver failed, fallback to text if any: ${formatDeliverError(err)}`);
223
- const errNote = `(文件发送失败:${formatDeliverError(err)})`;
224
- const fallbackText = textToSend.length > 0 ? `${textToSend}\n\n${errNote}` : errNote;
253
+ const fallbackText = buildFileDeliverFallbackText(textToSend, uniqueUrls, err);
254
+ // 下载/上传失败不阻塞:仍发 RICH_TEXT,并附带原始媒体链接
225
255
  await postImMessage(config, token, groupId, {
226
256
  type: "RICH_TEXT",
227
257
  text: fallbackText,
@@ -1 +1 @@
1
- {"version":3,"file":"send-service.js","sourceRoot":"","sources":["../../src/send-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send-service.js","sourceRoot":"","sources":["../../src/send-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /** WS `displayText` 对 thinking 的上限(trim + 长度封顶,不做语义改写) */
2
+ export declare const WS_THINKING_DISPLAY_MAX = 2000;
3
+ /** `RUN_EVENT.data.summary`:IM 用其识别「同一条用户指令的输出位」内的 thinking 片段(非新聊天气泡) */
4
+ export declare const THINKING_WS_SUMMARY_HINT = "thinking";
5
+ /**
6
+ * 将 OpenClaw thinking 文本转为 WS displayText(trim + 长度封顶,不做语义改写)。
7
+ */
8
+ export declare function clipThinkingForWsDisplay(text: string, max?: number): string;
9
+ /** 仅在裁剪后的 displayText 变化时发送,避免重复 WS。 */
10
+ export declare function resolveThinkingWsDisplayUpdate(lastDisplayed: string, thinkingText: string, max?: number): {
11
+ displayText: string;
12
+ changed: boolean;
13
+ };
14
+ /**
15
+ * 单段 thinking:`onReasoningStream` 只累积,块结束再发 **一条** WS。
16
+ * (不做 token 级流式拆分,避免 IM 侧出现多条「输出」。)
17
+ */
18
+ export declare class ThinkingWsBuffer {
19
+ private buffer;
20
+ noteStream(text: string): void;
21
+ /** 取出当前缓冲并清空;无内容时返回 undefined。 */
22
+ take(): string | undefined;
23
+ }
24
+ //# sourceMappingURL=thinking-ws-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking-ws-progress.d.ts","sourceRoot":"","sources":["../../src/thinking-ws-progress.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,aAAa,CAAC;AAEnD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAA0B,GAAG,MAAM,CAK5F;AAED,wCAAwC;AACxC,wBAAgB,8BAA8B,CAC1C,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,GAAG,SAA0B,GAC9B;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAK3C;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IACzB,OAAO,CAAC,MAAM,CAAM;IAEpB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK9B,kCAAkC;IAClC,IAAI,IAAI,MAAM,GAAG,SAAS;CAM7B"}
@@ -0,0 +1,45 @@
1
+ /** WS `displayText` 对 thinking 的上限(trim + 长度封顶,不做语义改写) */
2
+ export const WS_THINKING_DISPLAY_MAX = 2000;
3
+ /** `RUN_EVENT.data.summary`:IM 用其识别「同一条用户指令的输出位」内的 thinking 片段(非新聊天气泡) */
4
+ export const THINKING_WS_SUMMARY_HINT = "thinking";
5
+ /**
6
+ * 将 OpenClaw thinking 文本转为 WS displayText(trim + 长度封顶,不做语义改写)。
7
+ */
8
+ export function clipThinkingForWsDisplay(text, max = WS_THINKING_DISPLAY_MAX) {
9
+ const t = text.trim();
10
+ if (!t)
11
+ return "";
12
+ if (t.length <= max)
13
+ return t;
14
+ return `${t.slice(0, Math.max(0, max - 1))}…`;
15
+ }
16
+ /** 仅在裁剪后的 displayText 变化时发送,避免重复 WS。 */
17
+ export function resolveThinkingWsDisplayUpdate(lastDisplayed, thinkingText, max = WS_THINKING_DISPLAY_MAX) {
18
+ const displayText = clipThinkingForWsDisplay(thinkingText, max);
19
+ if (!displayText)
20
+ return { displayText: "", changed: false };
21
+ if (displayText === lastDisplayed)
22
+ return { displayText, changed: false };
23
+ return { displayText, changed: true };
24
+ }
25
+ /**
26
+ * 单段 thinking:`onReasoningStream` 只累积,块结束再发 **一条** WS。
27
+ * (不做 token 级流式拆分,避免 IM 侧出现多条「输出」。)
28
+ */
29
+ export class ThinkingWsBuffer {
30
+ buffer = "";
31
+ noteStream(text) {
32
+ const t = text.trim();
33
+ if (t)
34
+ this.buffer = t;
35
+ }
36
+ /** 取出当前缓冲并清空;无内容时返回 undefined。 */
37
+ take() {
38
+ const t = this.buffer.trim();
39
+ this.buffer = "";
40
+ if (!t)
41
+ return undefined;
42
+ return t;
43
+ }
44
+ }
45
+ //# sourceMappingURL=thinking-ws-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking-ws-progress.js","sourceRoot":"","sources":["../../src/thinking-ws-progress.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,GAAG,GAAG,uBAAuB;IAChF,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAClD,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,8BAA8B,CAC1C,aAAqB,EACrB,YAAoB,EACpB,GAAG,GAAG,uBAAuB;IAE7B,MAAM,WAAW,GAAG,wBAAwB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAChE,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC7D,IAAI,WAAW,KAAK,aAAa;QAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC1E,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACjB,MAAM,GAAG,EAAE,CAAC;IAEpB,UAAU,CAAC,IAAY;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC;YAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,kCAAkC;IAClC,IAAI;QACA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,OAAO,CAAC,CAAC;IACb,CAAC;CACJ"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=thinking-ws-progress.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking-ws-progress.test.d.ts","sourceRoot":"","sources":["../../src/thinking-ws-progress.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import assert from "node:assert/strict";
2
+ import { describe, it } from "node:test";
3
+ import { clipThinkingForWsDisplay, resolveThinkingWsDisplayUpdate, THINKING_WS_SUMMARY_HINT, ThinkingWsBuffer, } from "./thinking-ws-progress.js";
4
+ describe("thinking ws progress", () => {
5
+ it("clipThinkingForWsDisplay trims without rewriting", () => {
6
+ assert.equal(clipThinkingForWsDisplay(" hello "), "hello");
7
+ });
8
+ it("clipThinkingForWsDisplay caps length", () => {
9
+ const long = "a".repeat(100);
10
+ assert.equal(clipThinkingForWsDisplay(long, 10), `${"a".repeat(9)}…`);
11
+ });
12
+ it("resolveThinkingWsDisplayUpdate dedupes unchanged clipped text", () => {
13
+ const first = resolveThinkingWsDisplayUpdate("", "same text");
14
+ assert.equal(first.changed, true);
15
+ const second = resolveThinkingWsDisplayUpdate(first.displayText, "same text");
16
+ assert.equal(second.changed, false);
17
+ });
18
+ it("resolveThinkingWsDisplayUpdate emits when thinking grows", () => {
19
+ const first = resolveThinkingWsDisplayUpdate("", "step one");
20
+ const second = resolveThinkingWsDisplayUpdate(first.displayText, "step one and two");
21
+ assert.equal(second.changed, true);
22
+ assert.equal(second.displayText, "step one and two");
23
+ });
24
+ it("THINKING_WS_SUMMARY_HINT is stable machine tag", () => {
25
+ assert.equal(THINKING_WS_SUMMARY_HINT, "thinking");
26
+ });
27
+ it("ThinkingWsBuffer keeps latest stream chunk until take", () => {
28
+ const buf = new ThinkingWsBuffer();
29
+ buf.noteStream("short");
30
+ buf.noteStream("short longer");
31
+ buf.noteStream("short longer final");
32
+ assert.equal(buf.take(), "short longer final");
33
+ assert.equal(buf.take(), undefined);
34
+ });
35
+ it("ThinkingWsBuffer ignores empty stream chunks", () => {
36
+ const buf = new ThinkingWsBuffer();
37
+ buf.noteStream(" ");
38
+ assert.equal(buf.take(), undefined);
39
+ });
40
+ });
41
+ //# sourceMappingURL=thinking-ws-progress.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking-ws-progress.test.js","sourceRoot":"","sources":["../../src/thinking-ws-progress.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACH,wBAAwB,EACxB,8BAA8B,EAC9B,wBAAwB,EACxB,gBAAgB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACrE,MAAM,KAAK,GAAG,8BAA8B,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC9E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAChE,MAAM,KAAK,GAAG,8BAA8B,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxB,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC/B,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -56,6 +56,18 @@ export interface XgImAccountConfig {
56
56
  syncServiceBaseUrl?: string;
57
57
  /** 见 {@link XgImConfig.projectPromptMaxChars} */
58
58
  projectPromptMaxChars?: number;
59
+ /** 见 {@link XgImConfig.blockStreaming} */
60
+ blockStreaming?: boolean;
61
+ /** 见 {@link XgImConfig.blockStreamingCoalesce} */
62
+ blockStreamingCoalesce?: BlockStreamingCoalesceConfig;
63
+ /** 见 {@link XgImConfig.deliverModelFallbackNotice} */
64
+ deliverModelFallbackNotice?: boolean;
65
+ }
66
+ /** OpenClaw block reply 合并阈值(可选;IM 默认不配) */
67
+ export interface BlockStreamingCoalesceConfig {
68
+ minChars?: number;
69
+ maxChars?: number;
70
+ idleMs?: number;
59
71
  }
60
72
  export interface XgImConfig extends OpenClawConfig {
61
73
  /** 多账户列表 */
@@ -133,6 +145,21 @@ export interface XgImConfig extends OpenClawConfig {
133
145
  syncServiceBaseUrl?: string;
134
146
  /** `agentContext.background` 与 `userInfo.background` 单段最大字符数(默认 15000) */
135
147
  projectPromptMaxChars?: number;
148
+ /**
149
+ * 是否在 assistant 每个 text 块结束(tool 调用前)通过 HTTP 发送中间正文。
150
+ * 默认开启;设为 `false` 恢复「整轮结束才 deliver 一次」。
151
+ */
152
+ blockStreaming?: boolean;
153
+ /**
154
+ * 可选:合并同一 text 块内的流式 token 碎片后再 HTTP。
155
+ * IM 场景默认不配;仅当模型碎片过多、HTTP 刷屏时再调 `minChars` / `idleMs`。
156
+ */
157
+ blockStreamingCoalesce?: BlockStreamingCoalesceConfig;
158
+ /**
159
+ * 是否向 IM 用户发送 OpenClaw 模型降级运营通知(`↪️ Model Fallback: …`)。
160
+ * 默认 `false`(不发送);设为 `true` 时与旧版行为一致。
161
+ */
162
+ deliverModelFallbackNotice?: boolean;
136
163
  }
137
164
  /** GET /user/login/appkey 的响应 */
138
165
  export interface GetTokenResponse {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,cAAc,EACd,iBAAiB,EACjB,sBAAsB,IAAI,yBAAyB,EACnD,qBAAqB,IAAI,wBAAwB,EACjD,aAAa,IAAI,gBAAgB,EACjC,aAAa,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAA6B,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAIpG,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,kDAAkD;AAClD,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAIrD,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAC9B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;IACnE;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,8CAA8C;IAC9C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iDAAiD;IACjD,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc;IAC9C,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAE7C,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oBAAoB;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,yBAAyB;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0BAA0B;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gCAAgC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;IACnE,gEAAgE;IAChE,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAClC;AAID,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,uBAAuB;AACvB,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB;AAID,yCAAyC;AACzC,MAAM,WAAW,SAAS;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,eAAe,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CACxC;AAED,uCAAuC;AACvC,MAAM,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAE1C,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAyBjF;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC7B,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,sDAAsD;AACtD,YAAY,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpG,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,YAAY;IACZ,QAAQ,EAAE;QACN,aAAa;QACb,EAAE,EAAE,MAAM,CAAC;QACX,aAAa;QACb,IAAI,EAAE,MAAM,CAAC;QACb;;;WAGG;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,UAAU,EAAE,gBAAgB,CAAC;IAC7B,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,2CAA2C;AAC3C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAItE,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC7B,cAAc;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc;IACd,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,uCAAuC;AACvC,MAAM,WAAW,yBAAyB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,MAAM,EAAE,UAAU,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GACrB;IACI,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC5B,GACD;IACI,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,yBAAyB,EAAE,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC5B,CAAC;AAER,+CAA+C;AAC/C,MAAM,WAAW,wBAAwB;IACrC,IAAI,CAAC,EAAE,eAAe,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,eAAe,CAAC,CAAC;AAC5E,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,eAAe,GAAG;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAE5F,4CAA4C;AAC5C,YAAY,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkOH,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IACzD,MAAM,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,MAAM,GAAG,GAA2B;QAChC,GAAG,EAAE,iBAAiB;QACtB,GAAG,EAAE,WAAW;QAChB,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,YAAY;QAClB,GAAG,EAAE,WAAW;QAChB,IAAI,EAAE,YAAY;QAClB,GAAG,EAAE,oBAAoB;QACzB,IAAI,EAAE,yEAAyE;QAC/E,GAAG,EAAE,+BAA+B;QACpC,IAAI,EAAE,2EAA2E;QACjF,GAAG,EAAE,0BAA0B;QAC/B,IAAI,EAAE,mEAAmE;QACzE,GAAG,EAAE,YAAY;QACjB,EAAE,EAAE,eAAe;QACnB,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,iBAAiB;QACtB,GAAG,EAAE,YAAY;QACjB,GAAG,EAAE,WAAW;QAChB,GAAG,EAAE,WAAW;KACnB,CAAC;IACF,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8PH,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IACzD,MAAM,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,MAAM,GAAG,GAA2B;QAChC,GAAG,EAAE,iBAAiB;QACtB,GAAG,EAAE,WAAW;QAChB,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,YAAY;QAClB,GAAG,EAAE,WAAW;QAChB,IAAI,EAAE,YAAY;QAClB,GAAG,EAAE,oBAAoB;QACzB,IAAI,EAAE,yEAAyE;QAC/E,GAAG,EAAE,+BAA+B;QACpC,IAAI,EAAE,2EAA2E;QACjF,GAAG,EAAE,0BAA0B;QAC/B,IAAI,EAAE,mEAAmE;QACzE,GAAG,EAAE,YAAY;QACjB,EAAE,EAAE,eAAe;QACnB,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,iBAAiB;QACtB,GAAG,EAAE,YAAY;QACjB,GAAG,EAAE,WAAW;QAChB,GAAG,EAAE,WAAW;KACnB,CAAC;IACF,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 面向 IM 用户的错误文案:只描述发生了什么,不包含操作建议。
3
+ */
4
+ import type { NoReplyCause, TerminalState } from "./inbound-terminal-state.js";
5
+ export type TerminalMessageContext = {
6
+ /** 原始错误信息(分类前),用于细化终态文案 */
7
+ errorMessage?: string;
8
+ noReplyCause?: NoReplyCause;
9
+ };
10
+ export declare function isAttachmentBlockedErrorMessage(message: string): boolean;
11
+ export declare function isContextOverflowErrorMessage(message: string): boolean;
12
+ /**
13
+ * 根据终态与观测到的原始错误,生成发给用户的中文说明(仅陈述事实)。
14
+ */
15
+ export declare function buildTerminalUserMessage(state: TerminalState, context?: TerminalMessageContext): string;
16
+ /**
17
+ * 出站发文件失败时,将技术错误转为用户可读说明(不含实现细节与操作建议)。
18
+ */
19
+ export declare function formatUserFacingMediaDeliverError(err: unknown, mediaRefs?: string[]): string;
20
+ //# sourceMappingURL=user-facing-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-facing-errors.d.ts","sourceRoot":"","sources":["../../src/user-facing-errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG/E,MAAM,MAAM,sBAAsB,GAAG;IACjC,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B,CAAC;AAMF,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQxE;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAatE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACpC,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,sBAAsB,GACjC,MAAM,CAkCR;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,GAAE,MAAM,EAAO,GAAG,MAAM,CAgChG"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * 面向 IM 用户的错误文案:只描述发生了什么,不包含操作建议。
3
+ */
4
+ import { summarizeMediaRef } from "./resource-file.js";
5
+ function errorMessageLower(context) {
6
+ return (context?.errorMessage ?? "").trim().toLowerCase();
7
+ }
8
+ export function isAttachmentBlockedErrorMessage(message) {
9
+ const lower = message.trim().toLowerCase();
10
+ return (lower.includes("blocked attachment") ||
11
+ lower.includes("outside allowed roots") ||
12
+ lower.includes("not under an allowed directory") ||
13
+ (lower.includes("skipping attachment") && lower.includes("blocked")));
14
+ }
15
+ export function isContextOverflowErrorMessage(message) {
16
+ const lower = message.trim().toLowerCase();
17
+ return (lower.includes("context overflow") ||
18
+ lower.includes("context-overflow") ||
19
+ lower.includes("overflowtokens") ||
20
+ lower.includes("overflow tokens") ||
21
+ lower.includes("prompt too large") ||
22
+ lower.includes("too large for the model") ||
23
+ lower.includes("too large for this model") ||
24
+ lower.includes("promptbudget") ||
25
+ (lower.includes("precheck") && lower.includes("overflow")));
26
+ }
27
+ /**
28
+ * 根据终态与观测到的原始错误,生成发给用户的中文说明(仅陈述事实)。
29
+ */
30
+ export function buildTerminalUserMessage(state, context) {
31
+ const errLower = errorMessageLower(context);
32
+ switch (state) {
33
+ case "precheck_error":
34
+ return "当前对话上下文过大,本轮未能调用模型。";
35
+ case "compaction_failed":
36
+ return "系统已尝试压缩对话历史,但仍未生成回复。";
37
+ case "timeout":
38
+ return "当前请求处理超时。";
39
+ case "no_reply":
40
+ if (context?.noReplyCause === "zero_deliver") {
41
+ return "消息已收到,本轮未向 IM 发送任何回复内容。";
42
+ }
43
+ return "消息已收到,但这一轮没有生成回复。";
44
+ case "runtime_error":
45
+ if (isAttachmentBlockedErrorMessage(errLower)) {
46
+ return ("您发送的图片或附件未能加载(系统路径访问受限),模型可能看不到附件内容;文本消息已收到。");
47
+ }
48
+ if (isContextOverflowErrorMessage(errLower)) {
49
+ return "当前对话上下文过大,处理失败。";
50
+ }
51
+ return "当前请求处理时出现异常。";
52
+ case "delivery_failed":
53
+ return "回复已生成,但发送到 IM 时失败。";
54
+ case "cancelled":
55
+ return "当前请求已取消。";
56
+ case "superseded":
57
+ return "当前请求已被更新的处理覆盖。";
58
+ case "success":
59
+ return "";
60
+ }
61
+ }
62
+ /**
63
+ * 出站发文件失败时,将技术错误转为用户可读说明(不含实现细节与操作建议)。
64
+ */
65
+ export function formatUserFacingMediaDeliverError(err, mediaRefs = []) {
66
+ const raw = err instanceof Error ? err.message : String(err);
67
+ const lower = raw.toLowerCase();
68
+ const ref = mediaRefs.find((u) => u.trim())?.trim() ?? extractPathFromMediaError(raw);
69
+ const shortRef = ref ? summarizeMediaRef(ref, 120) : undefined;
70
+ if (lower.includes("无法读取媒体") || lower.includes("unsupported ref")) {
71
+ if (shortRef && looksLikeWorkspaceRelativePath(shortRef)) {
72
+ return `未能将文件发送到 IM:找不到或无法读取「${shortRef}」。`;
73
+ }
74
+ return "未能将文件发送到 IM:找不到或无法读取附件路径。";
75
+ }
76
+ if (lower.includes("enoent") || lower.includes("no such file")) {
77
+ return shortRef
78
+ ? `未能将文件发送到 IM:本地找不到「${shortRef}」。`
79
+ : "未能将文件发送到 IM:本地找不到对应文件。";
80
+ }
81
+ if (lower.includes("eacces") || lower.includes("permission denied")) {
82
+ return "未能将文件发送到 IM:没有读取该文件的权限。";
83
+ }
84
+ if (lower.includes("abort") || lower.includes("timeout") || lower.includes("timed out")) {
85
+ return "未能将文件发送到 IM:读取或上传超时。";
86
+ }
87
+ if (lower.includes("axios") || lower.includes("network") || lower.includes("econnrefused")) {
88
+ return "未能将文件发送到 IM:网络或上传服务异常。";
89
+ }
90
+ return "未能将文件发送到 IM。";
91
+ }
92
+ function looksLikeWorkspaceRelativePath(ref) {
93
+ const t = ref.trim();
94
+ return (t.startsWith("project/") ||
95
+ t.startsWith("./project/") ||
96
+ t.startsWith("/project/") ||
97
+ t.startsWith("xg-cwork-im/") ||
98
+ t.startsWith("./xg") ||
99
+ t.startsWith("/workspace/"));
100
+ }
101
+ function extractPathFromMediaError(raw) {
102
+ const m = /:\s*(\S+)\s*$/.exec(raw.trim());
103
+ return m?.[1];
104
+ }
105
+ //# sourceMappingURL=user-facing-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-facing-errors.js","sourceRoot":"","sources":["../../src/user-facing-errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=user-facing-errors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-facing-errors.test.d.ts","sourceRoot":"","sources":["../../src/user-facing-errors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,62 @@
1
+ import assert from "node:assert/strict";
2
+ import { describe, it } from "node:test";
3
+ import { buildTerminalUserMessage, formatUserFacingMediaDeliverError, isAttachmentBlockedErrorMessage, isContextOverflowErrorMessage, } from "./user-facing-errors.js";
4
+ describe("isContextOverflowErrorMessage", () => {
5
+ it("detects context-overflow-precheck log style", () => {
6
+ assert.equal(isContextOverflowErrorMessage("[context-overflow-precheck] overflowTokens=72970 estimatedPromptTokens=328586"), true);
7
+ });
8
+ });
9
+ describe("isAttachmentBlockedErrorMessage", () => {
10
+ it("detects blocked attachment roots", () => {
11
+ assert.equal(isAttachmentBlockedErrorMessage("Blocked attachment path outside allowed roots: ./project/a.png"), true);
12
+ assert.equal(isAttachmentBlockedErrorMessage("Local media path is not under an allowed directory: /Users/x/ws/project/a.png"), true);
13
+ });
14
+ });
15
+ describe("buildTerminalUserMessage", () => {
16
+ it("refines runtime_error for attachment block", () => {
17
+ const msg = buildTerminalUserMessage("runtime_error", {
18
+ errorMessage: "Blocked attachment path outside allowed roots: ./project/x.png",
19
+ });
20
+ assert.ok(msg.includes("附件未能加载"));
21
+ assert.ok(!msg.includes("Blocked attachment"));
22
+ });
23
+ it("refines runtime_error for context overflow", () => {
24
+ const msg = buildTerminalUserMessage("runtime_error", {
25
+ errorMessage: "[context-overflow-precheck] overflowTokens=100",
26
+ });
27
+ assert.ok(msg.includes("上下文过大"));
28
+ });
29
+ it("refines no_reply for zero_deliver", () => {
30
+ const msg = buildTerminalUserMessage("no_reply", { noReplyCause: "zero_deliver" });
31
+ assert.ok(msg.includes("未向 IM 发送"));
32
+ assert.ok(!msg.includes("请"));
33
+ });
34
+ it("does not include operational suggestions in terminal copy", () => {
35
+ const cases = [
36
+ buildTerminalUserMessage("runtime_error"),
37
+ buildTerminalUserMessage("precheck_error"),
38
+ buildTerminalUserMessage("no_reply"),
39
+ ];
40
+ for (const msg of cases) {
41
+ assert.ok(!/请(稍后|发送|联系|确认|新开|换)/.test(msg));
42
+ assert.ok(!msg.includes("管理员"));
43
+ }
44
+ });
45
+ });
46
+ describe("formatUserFacingMediaDeliverError", () => {
47
+ it("maps workspace-relative media read failure", () => {
48
+ const msg = formatUserFacingMediaDeliverError(new Error("[cwork_im] 无法读取媒体(请使用 http(s)...): project/202607/207/artifacts/daily/summary.md"), ["project/202607/207/artifacts/daily/summary.md"]);
49
+ assert.ok(msg.includes("未能将文件发送到 IM"));
50
+ assert.ok(msg.includes("project/"));
51
+ assert.ok(!msg.includes("[cwork_im]"));
52
+ assert.ok(!msg.includes("http(s)"));
53
+ assert.ok(!/请(稍后|发送|联系|确认)/.test(msg));
54
+ });
55
+ it("maps enoent", () => {
56
+ const msg = formatUserFacingMediaDeliverError(new Error("ENOENT: no such file"), [
57
+ "./project/a.md",
58
+ ]);
59
+ assert.ok(msg.includes("找不到"));
60
+ });
61
+ });
62
+ //# sourceMappingURL=user-facing-errors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-facing-errors.test.js","sourceRoot":"","sources":["../../src/user-facing-errors.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xgjktech/xg_cwork_im",
3
- "version": "1.13.1",
3
+ "version": "1.15.1",
4
4
  "description": "XG CWork IM channel plugin for OpenClaw",
5
5
  "keywords": [
6
6
  "bot",
@@ -22,7 +22,7 @@
22
22
  "build": "tsc -p tsconfig.json",
23
23
  "type-check": "tsc -p tsconfig.json --noEmit",
24
24
  "lint": "tsc -p tsconfig.json --noEmit",
25
- "test": "npm run build && node --test dist/src/inbound-terminal-state.test.js",
25
+ "test": "npm run build && node --test dist/src/inbound-terminal-state.test.js dist/src/user-facing-errors.test.js dist/src/deliver-text.test.js dist/src/agent-context-types.test.js dist/src/block-streaming-config.test.js dist/src/per-message-fallback-notice.test.js dist/src/thinking-ws-progress.test.js dist/src/resource-file.test.js",
26
26
  "install:prod": "npm install --omit=dev",
27
27
  "prepublishOnly": "npm run build"
28
28
  },