@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
package/README.md CHANGED
@@ -253,6 +253,9 @@ openclaw gateway restart
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 一次。 |
257
+ | `blockStreamingCoalesce` | object | 不配 | 可选:合并同一 text 块内 token 碎片(`minChars` / `maxChars` / `idleMs`)。IM 默认不配;**若未在通道配置,插件会自动注入 `minChars:1 idleMs:0`,覆盖 `agents.defaults` 里偏大的 coalesce**。 |
258
+ | `deliverModelFallbackNotice` | boolean | `false`(未配置时) | 为 `true` 时向 IM 用户发送 OpenClaw 模型降级运营通知(`↪️ Model Fallback: …`)。默认不发送,仅保留 gateway 日志。 |
256
259
 
257
260
 
258
261
  ### 账户配置(`accounts.<accountId>`,对象 map)
@@ -2,7 +2,7 @@
2
2
  * robotMention.params.agentContext — 项目工作区路径 + 可选知识库绑定 + 可选项目背景
3
3
  */
4
4
  import { z } from "zod";
5
- /** 知识库空间 ID + 逻辑目录路径(与 rootFileId 二选一) */
5
+ /** 知识库空间 ID + 逻辑目录路径 */
6
6
  declare const knowledgeBaseByPathSchema: z.ZodObject<{
7
7
  projectId: z.ZodString;
8
8
  folderPath: z.ZodString;
@@ -13,6 +13,14 @@ declare const knowledgeBaseByPathSchema: z.ZodObject<{
13
13
  projectId: string;
14
14
  folderPath: string;
15
15
  }>;
16
+ /** IM 常见:仅传知识库空间 ID(无 folderPath) */
17
+ declare const knowledgeBaseByProjectIdOnlySchema: z.ZodObject<{
18
+ projectId: z.ZodString;
19
+ }, "strip", z.ZodTypeAny, {
20
+ projectId: string;
21
+ }, {
22
+ projectId: string;
23
+ }>;
16
24
  export declare const agentContextKnowledgeBaseSchema: z.ZodUnion<[z.ZodObject<{
17
25
  rootFileId: z.ZodString;
18
26
  }, "strip", z.ZodTypeAny, {
@@ -28,6 +36,12 @@ export declare const agentContextKnowledgeBaseSchema: z.ZodUnion<[z.ZodObject<{
28
36
  }, {
29
37
  projectId: string;
30
38
  folderPath: string;
39
+ }>, z.ZodObject<{
40
+ projectId: z.ZodString;
41
+ }, "strip", z.ZodTypeAny, {
42
+ projectId: string;
43
+ }, {
44
+ projectId: string;
31
45
  }>]>;
32
46
  export type AgentContextKnowledgeBase = z.infer<typeof agentContextKnowledgeBaseSchema>;
33
47
  /** 与 IM 后台约定的 `params.agentContext` 结构 */
@@ -57,6 +71,12 @@ export declare const robotMentionAgentContextSchema: z.ZodObject<{
57
71
  }, {
58
72
  projectId: string;
59
73
  folderPath: string;
74
+ }>, z.ZodObject<{
75
+ projectId: z.ZodString;
76
+ }, "strip", z.ZodTypeAny, {
77
+ projectId: string;
78
+ }, {
79
+ projectId: string;
60
80
  }>]>>;
61
81
  background: z.ZodOptional<z.ZodString>;
62
82
  }, "strip", z.ZodTypeAny, {
@@ -69,6 +89,8 @@ export declare const robotMentionAgentContextSchema: z.ZodObject<{
69
89
  } | {
70
90
  projectId: string;
71
91
  folderPath: string;
92
+ } | {
93
+ projectId: string;
72
94
  } | undefined;
73
95
  background?: string | undefined;
74
96
  }, {
@@ -81,12 +103,28 @@ export declare const robotMentionAgentContextSchema: z.ZodObject<{
81
103
  } | {
82
104
  projectId: string;
83
105
  folderPath: string;
106
+ } | {
107
+ projectId: string;
84
108
  } | undefined;
85
109
  background?: string | undefined;
86
110
  }>;
87
111
  export type RobotMentionAgentContext = z.infer<typeof robotMentionAgentContextSchema>;
112
+ export type ParseRobotMentionAgentContextResult = {
113
+ agentContext?: RobotMentionAgentContext;
114
+ /** localRoot 缺失等致命错误 */
115
+ fatalError?: string;
116
+ /** knowledgeBase 存在但无法解析时被丢弃 */
117
+ knowledgeBaseDropped?: boolean;
118
+ knowledgeBaseDropReason?: string;
119
+ };
120
+ /**
121
+ * 解析 agentContext;knowledgeBase 非法时丢弃该字段,仍保留 localRoot + background。
122
+ */
123
+ export declare function parseRobotMentionAgentContextDetailed(params: unknown): ParseRobotMentionAgentContextResult;
88
124
  export declare function parseRobotMentionAgentContext(params: unknown): RobotMentionAgentContext | undefined;
89
125
  /** 判断 knowledgeBase 是否为 projectId + folderPath 形式 */
90
126
  export declare function isKnowledgeBaseByPath(kb: AgentContextKnowledgeBase): kb is z.infer<typeof knowledgeBaseByPathSchema>;
127
+ /** 判断 knowledgeBase 是否仅有 projectId(无 folderPath / rootFileId) */
128
+ export declare function isKnowledgeBaseByProjectIdOnly(kb: AgentContextKnowledgeBase): kb is z.infer<typeof knowledgeBaseByProjectIdOnlySchema>;
91
129
  export {};
92
130
  //# sourceMappingURL=agent-context-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-context-types.d.ts","sourceRoot":"","sources":["../../src/agent-context-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,0CAA0C;AAC1C,QAAA,MAAM,yBAAyB;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;IAG1C,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,0CAA0C;AAC1C,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIzC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,OAAO,GAAG,wBAAwB,GAAG,SAAS,CAUnG;AAED,qDAAqD;AACrD,wBAAgB,qBAAqB,CACjC,EAAE,EAAE,yBAAyB,GAC9B,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAEjD"}
1
+ {"version":3,"file":"agent-context-types.d.ts","sourceRoot":"","sources":["../../src/agent-context-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,wBAAwB;AACxB,QAAA,MAAM,yBAAyB;;;;;;;;;EAG7B,CAAC;AAEH,qCAAqC;AACrC,QAAA,MAAM,kCAAkC;;;;;;EAEtC,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;IAI1C,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,0CAA0C;AAC1C,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIzC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,MAAM,MAAM,mCAAmC,GAAG;IAC9C,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CACpC,CAAC;AAQF;;GAEG;AACH,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,OAAO,GAAG,mCAAmC,CAuC1G;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,OAAO,GAAG,wBAAwB,GAAG,SAAS,CAEnG;AAED,qDAAqD;AACrD,wBAAgB,qBAAqB,CACjC,EAAE,EAAE,yBAAyB,GAC9B,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAEjD;AAED,iEAAiE;AACjE,wBAAgB,8BAA8B,CAC1C,EAAE,EAAE,yBAAyB,GAC9B,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAE1D"}
@@ -7,18 +7,23 @@ const localRootSchema = z.object({
7
7
  kind: z.enum(LOCAL_ROOT_KINDS),
8
8
  path: z.string().min(1),
9
9
  });
10
- /** 知识库目录 fileId(与 projectId+folderPath 二选一) */
10
+ /** 知识库目录 fileId(与 projectId 形式二选一) */
11
11
  const knowledgeBaseByFileIdSchema = z.object({
12
12
  rootFileId: z.string().min(1),
13
13
  });
14
- /** 知识库空间 ID + 逻辑目录路径(与 rootFileId 二选一) */
14
+ /** 知识库空间 ID + 逻辑目录路径 */
15
15
  const knowledgeBaseByPathSchema = z.object({
16
16
  projectId: z.string().min(1),
17
17
  folderPath: z.string().min(1),
18
18
  });
19
+ /** IM 常见:仅传知识库空间 ID(无 folderPath) */
20
+ const knowledgeBaseByProjectIdOnlySchema = z.object({
21
+ projectId: z.string().min(1),
22
+ });
19
23
  export const agentContextKnowledgeBaseSchema = z.union([
20
24
  knowledgeBaseByFileIdSchema,
21
25
  knowledgeBaseByPathSchema,
26
+ knowledgeBaseByProjectIdOnlySchema,
22
27
  ]);
23
28
  /** 与 IM 后台约定的 `params.agentContext` 结构 */
24
29
  export const robotMentionAgentContextSchema = z.object({
@@ -26,19 +31,59 @@ export const robotMentionAgentContextSchema = z.object({
26
31
  knowledgeBase: agentContextKnowledgeBaseSchema.optional(),
27
32
  background: z.string().optional(),
28
33
  });
29
- export function parseRobotMentionAgentContext(params) {
34
+ function formatZodIssue(err) {
35
+ const issue = err.issues[0];
36
+ const path = issue?.path?.length ? issue.path.join(".") : "agentContext";
37
+ return `${path}: ${issue?.message ?? err.message}`;
38
+ }
39
+ /**
40
+ * 解析 agentContext;knowledgeBase 非法时丢弃该字段,仍保留 localRoot + background。
41
+ */
42
+ export function parseRobotMentionAgentContextDetailed(params) {
30
43
  if (params == null || typeof params !== "object") {
31
- return undefined;
44
+ return {};
32
45
  }
33
46
  const raw = params.agentContext;
34
47
  if (raw == null || typeof raw !== "object") {
35
- return undefined;
48
+ return {};
36
49
  }
37
- const parsed = robotMentionAgentContextSchema.safeParse(raw);
38
- return parsed.success ? parsed.data : undefined;
50
+ const record = raw;
51
+ const localRootParsed = localRootSchema.safeParse(record.localRoot);
52
+ if (!localRootParsed.success) {
53
+ return { fatalError: formatZodIssue(localRootParsed.error) };
54
+ }
55
+ let knowledgeBase;
56
+ let knowledgeBaseDropped = false;
57
+ let knowledgeBaseDropReason;
58
+ if (record.knowledgeBase != null) {
59
+ const kbParsed = agentContextKnowledgeBaseSchema.safeParse(record.knowledgeBase);
60
+ if (kbParsed.success) {
61
+ knowledgeBase = kbParsed.data;
62
+ }
63
+ else {
64
+ knowledgeBaseDropped = true;
65
+ knowledgeBaseDropReason = formatZodIssue(kbParsed.error);
66
+ }
67
+ }
68
+ const background = typeof record.background === "string" ? record.background : undefined;
69
+ return {
70
+ agentContext: {
71
+ localRoot: localRootParsed.data,
72
+ ...(knowledgeBase ? { knowledgeBase } : {}),
73
+ ...(background !== undefined ? { background } : {}),
74
+ },
75
+ ...(knowledgeBaseDropped ? { knowledgeBaseDropped, knowledgeBaseDropReason } : {}),
76
+ };
77
+ }
78
+ export function parseRobotMentionAgentContext(params) {
79
+ return parseRobotMentionAgentContextDetailed(params).agentContext;
39
80
  }
40
81
  /** 判断 knowledgeBase 是否为 projectId + folderPath 形式 */
41
82
  export function isKnowledgeBaseByPath(kb) {
42
83
  return "projectId" in kb && "folderPath" in kb;
43
84
  }
85
+ /** 判断 knowledgeBase 是否仅有 projectId(无 folderPath / rootFileId) */
86
+ export function isKnowledgeBaseByProjectIdOnly(kb) {
87
+ return "projectId" in kb && !("folderPath" in kb) && !("rootFileId" in kb);
88
+ }
44
89
  //# sourceMappingURL=agent-context-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-context-types.js","sourceRoot":"","sources":["../../src/agent-context-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAC;AAEH,+CAA+C;AAC/C,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAChC,CAAC,CAAC;AAEH,0CAA0C;AAC1C,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAChC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC;IACnD,2BAA2B;IAC3B,yBAAyB;CAC5B,CAAC,CAAC;AAIH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,SAAS,EAAE,eAAe;IAC1B,aAAa,EAAE,+BAA+B,CAAC,QAAQ,EAAE;IACzD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAIH,MAAM,UAAU,6BAA6B,CAAC,MAAe;IACzD,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,GAAG,GAAI,MAAkC,CAAC,YAAY,CAAC;IAC7D,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,MAAM,GAAG,8BAA8B,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,qBAAqB,CACjC,EAA6B;IAE7B,OAAO,WAAW,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"agent-context-types.js","sourceRoot":"","sources":["../../src/agent-context-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-context-types.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-context-types.test.d.ts","sourceRoot":"","sources":["../../src/agent-context-types.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ import assert from "node:assert/strict";
2
+ import { describe, it } from "node:test";
3
+ import { parseRobotMentionAgentContext, parseRobotMentionAgentContextDetailed, } from "./agent-context-types.js";
4
+ const USER_PAYLOAD = {
5
+ agentContext: {
6
+ background: "- 项目名称:Sitavig\n\n该项目对应的知识库根目录id为:2072258063360479234\n\n### 会话背景信息:\n待办内容:BD初审修订任务",
7
+ knowledgeBase: { projectId: "1660820549716893698" },
8
+ localRoot: { kind: "workspace_relative", path: "project/202607/2074431529933336577" },
9
+ },
10
+ };
11
+ describe("parseRobotMentionAgentContext", () => {
12
+ it("accepts knowledgeBase with projectId only (IM 常见形态)", () => {
13
+ const ctx = parseRobotMentionAgentContext(USER_PAYLOAD);
14
+ assert.ok(ctx);
15
+ assert.equal(ctx.localRoot.path, "project/202607/2074431529933336577");
16
+ assert.deepEqual(ctx.knowledgeBase, { projectId: "1660820549716893698" });
17
+ assert.ok(ctx.background?.includes("Sitavig"));
18
+ });
19
+ it("accepts knowledgeBase with projectId and folderPath", () => {
20
+ const ctx = parseRobotMentionAgentContext({
21
+ agentContext: {
22
+ localRoot: { kind: "workspace_relative", path: "data/a" },
23
+ knowledgeBase: { projectId: "p1", folderPath: "团队文档/项目A" },
24
+ },
25
+ });
26
+ assert.deepEqual(ctx.knowledgeBase, {
27
+ projectId: "p1",
28
+ folderPath: "团队文档/项目A",
29
+ });
30
+ });
31
+ it("accepts knowledgeBase with rootFileId", () => {
32
+ const ctx = parseRobotMentionAgentContext({
33
+ agentContext: {
34
+ localRoot: { kind: "workspace_relative", path: "data/a" },
35
+ knowledgeBase: { rootFileId: "2072258063360479234" },
36
+ },
37
+ });
38
+ assert.deepEqual(ctx.knowledgeBase, { rootFileId: "2072258063360479234" });
39
+ });
40
+ it("rejects missing localRoot", () => {
41
+ const result = parseRobotMentionAgentContextDetailed({
42
+ agentContext: { background: "x" },
43
+ });
44
+ assert.equal(result.agentContext, undefined);
45
+ assert.ok(result.fatalError);
46
+ });
47
+ it("drops invalid knowledgeBase but keeps localRoot and background", () => {
48
+ const result = parseRobotMentionAgentContextDetailed({
49
+ agentContext: {
50
+ localRoot: { kind: "workspace_relative", path: "data/a" },
51
+ knowledgeBase: { rootFileId: "" },
52
+ background: "项目说明",
53
+ },
54
+ });
55
+ assert.ok(result.agentContext);
56
+ assert.equal(result.agentContext.background, "项目说明");
57
+ assert.equal(result.agentContext.knowledgeBase, undefined);
58
+ assert.equal(result.knowledgeBaseDropped, true);
59
+ });
60
+ });
61
+ //# sourceMappingURL=agent-context-types.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-context-types.test.js","sourceRoot":"","sources":["../../src/agent-context-types.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=block-streaming-config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-streaming-config.test.d.ts","sourceRoot":"","sources":["../../src/block-streaming-config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import assert from "node:assert/strict";
2
+ import { describe, it } from "node:test";
3
+ import { IM_BLOCK_STREAMING_COALESCE_DEFAULT, isInboundBlockStreamingEnabled, resolveBlockStreamingReplyOptions, resolveDispatchOpenClawCfg, } from "./channel-config.js";
4
+ function cfg(overrides = {}) {
5
+ return { baseUrl: "https://example.com", ...overrides };
6
+ }
7
+ const baseOpenClawCfg = {
8
+ agents: {
9
+ defaults: {
10
+ blockStreamingCoalesce: { minChars: 2400, maxChars: 12000, idleMs: 3000 },
11
+ },
12
+ },
13
+ channels: { xg_cwork_im: { baseUrl: "https://example.com" } },
14
+ };
15
+ describe("block streaming config", () => {
16
+ it("enabled by default when blockStreaming unset", () => {
17
+ assert.equal(isInboundBlockStreamingEnabled(cfg()), true);
18
+ assert.deepEqual(resolveBlockStreamingReplyOptions(cfg()), { disableBlockStreaming: false });
19
+ });
20
+ it("disabled when blockStreaming is false", () => {
21
+ assert.equal(isInboundBlockStreamingEnabled(cfg({ blockStreaming: false })), false);
22
+ assert.deepEqual(resolveBlockStreamingReplyOptions(cfg({ blockStreaming: false })), {
23
+ disableBlockStreaming: true,
24
+ });
25
+ });
26
+ it("explicit true forces enable", () => {
27
+ assert.equal(isInboundBlockStreamingEnabled(cfg({ blockStreaming: true })), true);
28
+ });
29
+ it("resolveDispatchOpenClawCfg injects IM coalesce when channel omits it", () => {
30
+ const patched = resolveDispatchOpenClawCfg(baseOpenClawCfg, cfg());
31
+ const xg = patched
32
+ .channels?.xg_cwork_im;
33
+ assert.deepEqual(xg?.blockStreamingCoalesce, { ...IM_BLOCK_STREAMING_COALESCE_DEFAULT });
34
+ });
35
+ it("resolveDispatchOpenClawCfg leaves cfg when channel coalesce set", () => {
36
+ const custom = { minChars: 100, idleMs: 50 };
37
+ const patched = resolveDispatchOpenClawCfg(baseOpenClawCfg, cfg({ blockStreamingCoalesce: custom }));
38
+ assert.equal(patched, baseOpenClawCfg);
39
+ });
40
+ });
41
+ //# sourceMappingURL=block-streaming-config.test.js.map
@@ -0,0 +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 +1 @@
1
- {"version":3,"file":"build-project-prompt.d.ts","sourceRoot":"","sources":["../../src/build-project-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAEH,KAAK,wBAAwB,EAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGH,KAAK,aAAa,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAIhE;AAED,MAAM,WAAW,uBAAuB;IACpC,YAAY,EAAE,wBAAwB,CAAC;IACvC,MAAM,EAAE,UAAU,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,GAAG,CAAC;CACb;AAED,MAAM,WAAW,wBAAwB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAQD,0CAA0C;AAC1C,wBAAgB,yBAAyB,CACrC,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,UAAU,GACnB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAA;CAAE,CAuB3H;AAOD,MAAM,WAAW,sBAAsB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,UAAU,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAmB7F;AA2BD;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,uBAAuB,GAAG,wBAAwB,CAgErG"}
1
+ {"version":3,"file":"build-project-prompt.d.ts","sourceRoot":"","sources":["../../src/build-project-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAGH,KAAK,wBAAwB,EAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGH,KAAK,aAAa,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAIhE;AAED,MAAM,WAAW,uBAAuB;IACpC,YAAY,EAAE,wBAAwB,CAAC;IACvC,MAAM,EAAE,UAAU,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,GAAG,CAAC;CACb;AAED,MAAM,WAAW,wBAAwB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAQD,0CAA0C;AAC1C,wBAAgB,yBAAyB,CACrC,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,UAAU,GACnB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAA;CAAE,CAuB3H;AAOD,MAAM,WAAW,sBAAsB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,UAAU,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAmB7F;AAkCD;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,uBAAuB,GAAG,wBAAwB,CAgErG"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * 将 IM 下发的 agentContext 渲染为 GroupSystemPrompt 追加段。
3
3
  */
4
- import { isKnowledgeBaseByPath, } from "./agent-context-types.js";
4
+ import { isKnowledgeBaseByPath, isKnowledgeBaseByProjectIdOnly, } from "./agent-context-types.js";
5
5
  import { normalizeWorkspaceRelativeSegment, resolveLocalAbsolutePath, } from "./project-path-normalize.js";
6
6
  const DEFAULT_SANDBOX_PREFIX = "/workspace";
7
7
  const DEFAULT_PROJECT_PROMPT_MAX_CHARS = 15_000;
@@ -81,6 +81,10 @@ function knowledgeBasePurposeLine(agentContext) {
81
81
  return (`- **知识库资料**:本项目已与知识库(空间 \`${kb.projectId.trim()}\`)目录「${folder}」建立同步;` +
82
82
  `来自知识库的文件会出现在项目根目录及子路径中,可作为背景资料使用。`);
83
83
  }
84
+ if (isKnowledgeBaseByProjectIdOnly(kb)) {
85
+ return (`- **知识库资料**:本项目已与知识库空间 \`${kb.projectId.trim()}\` 关联;` +
86
+ `来自知识库的文件会出现在项目根目录及子路径中,可作为背景资料使用。`);
87
+ }
84
88
  const fileId = kb.rootFileId.trim();
85
89
  return (`- **知识库资料**:本项目已与知识库目录(fileId: \`${fileId}\`)建立同步;` +
86
90
  `来自知识库的文件会出现在项目根目录及子路径中,可作为背景资料使用。`);
@@ -1 +1 @@
1
- {"version":3,"file":"build-project-prompt.js","sourceRoot":"","sources":["../../src/build-project-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-project-prompt.js","sourceRoot":"","sources":["../../src/build-project-prompt.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,21 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
29
29
  maxPendingMessages: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
30
30
  syncServiceBaseUrl: z.ZodOptional<z.ZodString>;
31
31
  projectPromptMaxChars: z.ZodOptional<z.ZodNumber>;
32
+ blockStreaming: z.ZodOptional<z.ZodBoolean>;
33
+ blockStreamingCoalesce: z.ZodOptional<z.ZodObject<{
34
+ minChars: z.ZodOptional<z.ZodNumber>;
35
+ maxChars: z.ZodOptional<z.ZodNumber>;
36
+ idleMs: z.ZodOptional<z.ZodNumber>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ minChars?: number | undefined;
39
+ maxChars?: number | undefined;
40
+ idleMs?: number | undefined;
41
+ }, {
42
+ minChars?: number | undefined;
43
+ maxChars?: number | undefined;
44
+ idleMs?: number | undefined;
45
+ }>>;
46
+ deliverModelFallbackNotice: z.ZodOptional<z.ZodBoolean>;
32
47
  accounts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
33
48
  robotKey: z.ZodOptional<z.ZodString>;
34
49
  appKey: z.ZodOptional<z.ZodString>;
@@ -44,6 +59,30 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
44
59
  maxPendingMessages: z.ZodOptional<z.ZodNumber>;
45
60
  syncServiceBaseUrl: z.ZodOptional<z.ZodString>;
46
61
  projectPromptMaxChars: z.ZodOptional<z.ZodNumber>;
62
+ /**
63
+ * 为 false 时关闭:assistant 在 tool 前的 text 块不再提前 HTTP deliver(整轮结束才发)。
64
+ * 未配置时默认开启。
65
+ */
66
+ blockStreaming: z.ZodOptional<z.ZodBoolean>;
67
+ /** 可选:合并同一 text 块内 token 级碎片;IM 默认不配(每个 text_end 立即 HTTP)。 */
68
+ blockStreamingCoalesce: z.ZodOptional<z.ZodObject<{
69
+ minChars: z.ZodOptional<z.ZodNumber>;
70
+ maxChars: z.ZodOptional<z.ZodNumber>;
71
+ idleMs: z.ZodOptional<z.ZodNumber>;
72
+ }, "strip", z.ZodTypeAny, {
73
+ minChars?: number | undefined;
74
+ maxChars?: number | undefined;
75
+ idleMs?: number | undefined;
76
+ }, {
77
+ minChars?: number | undefined;
78
+ maxChars?: number | undefined;
79
+ idleMs?: number | undefined;
80
+ }>>;
81
+ /**
82
+ * 为 true 时向 IM 用户发送 OpenClaw 模型降级运营通知(↪️ Model Fallback: …)。
83
+ * 未配置时默认不发送(仅 gateway 日志)。
84
+ */
85
+ deliverModelFallbackNotice: z.ZodOptional<z.ZodBoolean>;
47
86
  }, "strip", z.ZodTypeAny, {
48
87
  agentId: string;
49
88
  groupPolicy: "open" | "mention";
@@ -59,6 +98,13 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
59
98
  maxPendingMessages?: number | undefined;
60
99
  syncServiceBaseUrl?: string | undefined;
61
100
  projectPromptMaxChars?: number | undefined;
101
+ blockStreaming?: boolean | undefined;
102
+ blockStreamingCoalesce?: {
103
+ minChars?: number | undefined;
104
+ maxChars?: number | undefined;
105
+ idleMs?: number | undefined;
106
+ } | undefined;
107
+ deliverModelFallbackNotice?: boolean | undefined;
62
108
  }, {
63
109
  robotKey?: string | undefined;
64
110
  appKey?: string | undefined;
@@ -74,6 +120,13 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
74
120
  maxPendingMessages?: number | undefined;
75
121
  syncServiceBaseUrl?: string | undefined;
76
122
  projectPromptMaxChars?: number | undefined;
123
+ blockStreaming?: boolean | undefined;
124
+ blockStreamingCoalesce?: {
125
+ minChars?: number | undefined;
126
+ maxChars?: number | undefined;
127
+ idleMs?: number | undefined;
128
+ } | undefined;
129
+ deliverModelFallbackNotice?: boolean | undefined;
77
130
  }>>>;
78
131
  }, "strip", z.ZodTypeAny, {
79
132
  agentId: string;
@@ -102,6 +155,13 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
102
155
  maxPendingMessages?: number | undefined;
103
156
  syncServiceBaseUrl?: string | undefined;
104
157
  projectPromptMaxChars?: number | undefined;
158
+ blockStreaming?: boolean | undefined;
159
+ blockStreamingCoalesce?: {
160
+ minChars?: number | undefined;
161
+ maxChars?: number | undefined;
162
+ idleMs?: number | undefined;
163
+ } | undefined;
164
+ deliverModelFallbackNotice?: boolean | undefined;
105
165
  }> | undefined;
106
166
  robotKey?: string | undefined;
107
167
  appKey?: string | undefined;
@@ -115,6 +175,13 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
115
175
  systemPrompt?: string | undefined;
116
176
  syncServiceBaseUrl?: string | undefined;
117
177
  projectPromptMaxChars?: number | undefined;
178
+ blockStreaming?: boolean | undefined;
179
+ blockStreamingCoalesce?: {
180
+ minChars?: number | undefined;
181
+ maxChars?: number | undefined;
182
+ idleMs?: number | undefined;
183
+ } | undefined;
184
+ deliverModelFallbackNotice?: boolean | undefined;
118
185
  }, {
119
186
  baseUrl: string;
120
187
  accounts?: Record<string, {
@@ -132,6 +199,13 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
132
199
  maxPendingMessages?: number | undefined;
133
200
  syncServiceBaseUrl?: string | undefined;
134
201
  projectPromptMaxChars?: number | undefined;
202
+ blockStreaming?: boolean | undefined;
203
+ blockStreamingCoalesce?: {
204
+ minChars?: number | undefined;
205
+ maxChars?: number | undefined;
206
+ idleMs?: number | undefined;
207
+ } | undefined;
208
+ deliverModelFallbackNotice?: boolean | undefined;
135
209
  }> | undefined;
136
210
  robotKey?: string | undefined;
137
211
  appKey?: string | undefined;
@@ -155,6 +229,13 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
155
229
  maxPendingMessages?: number | undefined;
156
230
  syncServiceBaseUrl?: string | undefined;
157
231
  projectPromptMaxChars?: number | undefined;
232
+ blockStreaming?: boolean | undefined;
233
+ blockStreamingCoalesce?: {
234
+ minChars?: number | undefined;
235
+ maxChars?: number | undefined;
236
+ idleMs?: number | undefined;
237
+ } | undefined;
238
+ deliverModelFallbackNotice?: boolean | undefined;
158
239
  }>, {
159
240
  agentId: string;
160
241
  baseUrl: string;
@@ -182,6 +263,13 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
182
263
  maxPendingMessages?: number | undefined;
183
264
  syncServiceBaseUrl?: string | undefined;
184
265
  projectPromptMaxChars?: number | undefined;
266
+ blockStreaming?: boolean | undefined;
267
+ blockStreamingCoalesce?: {
268
+ minChars?: number | undefined;
269
+ maxChars?: number | undefined;
270
+ idleMs?: number | undefined;
271
+ } | undefined;
272
+ deliverModelFallbackNotice?: boolean | undefined;
185
273
  }> | undefined;
186
274
  robotKey?: string | undefined;
187
275
  appKey?: string | undefined;
@@ -195,6 +283,13 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
195
283
  systemPrompt?: string | undefined;
196
284
  syncServiceBaseUrl?: string | undefined;
197
285
  projectPromptMaxChars?: number | undefined;
286
+ blockStreaming?: boolean | undefined;
287
+ blockStreamingCoalesce?: {
288
+ minChars?: number | undefined;
289
+ maxChars?: number | undefined;
290
+ idleMs?: number | undefined;
291
+ } | undefined;
292
+ deliverModelFallbackNotice?: boolean | undefined;
198
293
  }, {
199
294
  baseUrl: string;
200
295
  accounts?: Record<string, {
@@ -212,6 +307,13 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
212
307
  maxPendingMessages?: number | undefined;
213
308
  syncServiceBaseUrl?: string | undefined;
214
309
  projectPromptMaxChars?: number | undefined;
310
+ blockStreaming?: boolean | undefined;
311
+ blockStreamingCoalesce?: {
312
+ minChars?: number | undefined;
313
+ maxChars?: number | undefined;
314
+ idleMs?: number | undefined;
315
+ } | undefined;
316
+ deliverModelFallbackNotice?: boolean | undefined;
215
317
  }> | undefined;
216
318
  robotKey?: string | undefined;
217
319
  appKey?: string | undefined;
@@ -235,6 +337,13 @@ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
235
337
  maxPendingMessages?: number | undefined;
236
338
  syncServiceBaseUrl?: string | undefined;
237
339
  projectPromptMaxChars?: number | undefined;
340
+ blockStreaming?: boolean | undefined;
341
+ blockStreamingCoalesce?: {
342
+ minChars?: number | undefined;
343
+ maxChars?: number | undefined;
344
+ idleMs?: number | undefined;
345
+ } | undefined;
346
+ deliverModelFallbackNotice?: boolean | undefined;
238
347
  }>;
239
348
  /** 将 `robotKey`(推荐)或旧字段 `appKey` 归一为鉴权可用的密钥(两字段同步为同一非空值)。 */
240
349
  export declare function normalizeRobotKey<T extends {
@@ -243,6 +352,25 @@ export declare function normalizeRobotKey<T extends {
243
352
  }>(config: T): T;
244
353
  /** 从顶层 cfg 中取出 XgImConfig,支持多账户(README:channels.xg_cwork_im) */
245
354
  export declare function getXgImConfig(cfg: OpenClawConfig, accountId?: string | null): XgImConfig;
355
+ /** 入站 block streaming 是否开启(未显式 false 时默认开启)。 */
356
+ export declare function isInboundBlockStreamingEnabled(config: XgImConfig): boolean;
357
+ /** 是否向 IM 投递 OpenClaw 模型降级运营通知(仅显式 true 时发送)。 */
358
+ export declare function shouldDeliverModelFallbackNoticeToIm(config: XgImConfig): boolean;
359
+ /** IM 通道未配置 coalesce 时,用于覆盖 agents.defaults 中偏大值的即时 flush 策略 */
360
+ export declare const IM_BLOCK_STREAMING_COALESCE_DEFAULT: {
361
+ readonly minChars: 1;
362
+ readonly maxChars: 12000;
363
+ readonly idleMs: 0;
364
+ };
365
+ /** 传给 OpenClaw replyOptions,强制开启/关闭 text_end 中间块 deliver。 */
366
+ export declare function resolveBlockStreamingReplyOptions(config: XgImConfig): {
367
+ disableBlockStreaming: boolean;
368
+ };
369
+ /**
370
+ * 入站 dispatch 用 cfg:在 block streaming 开启且通道未配 coalesce 时,
371
+ * 为 `channels.xg_cwork_im` 注入 IM 友好 coalesce,避免 agents.defaults 的大 minChars/idleMs 推迟 tool 前 HTTP。
372
+ */
373
+ export declare function resolveDispatchOpenClawCfg(cfg: OpenClawConfig, config: XgImConfig): OpenClawConfig;
246
374
  /**
247
375
  * 合并 `channels.xg_cwork_im` 顶层、`accounts.default`、以及 `accounts.<accountId>` 后的 `systemPrompt`,
248
376
  * 写入 OpenClaw 入站 `GroupSystemPrompt`。
@@ -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;AAmB7C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgFvB,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;;;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;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"}