@xgjktech/xg_cwork_im 1.12.9 → 1.14.6

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 (102) hide show
  1. package/README.md +18 -4
  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/apply-sync-mapping.js +14 -6
  11. package/dist/src/apply-sync-mapping.js.map +1 -1
  12. package/dist/src/block-streaming-config.test.d.ts +2 -0
  13. package/dist/src/block-streaming-config.test.d.ts.map +1 -0
  14. package/dist/src/block-streaming-config.test.js +41 -0
  15. package/dist/src/block-streaming-config.test.js.map +1 -0
  16. package/dist/src/build-project-prompt.d.ts.map +1 -1
  17. package/dist/src/build-project-prompt.js +5 -1
  18. package/dist/src/build-project-prompt.js.map +1 -1
  19. package/dist/src/channel-config.d.ts +128 -0
  20. package/dist/src/channel-config.d.ts.map +1 -1
  21. package/dist/src/channel-config.js +67 -0
  22. package/dist/src/channel-config.js.map +1 -1
  23. package/dist/src/channel.d.ts.map +1 -1
  24. package/dist/src/channel.js +24 -8
  25. package/dist/src/channel.js.map +1 -1
  26. package/dist/src/connection.d.ts +7 -0
  27. package/dist/src/connection.d.ts.map +1 -1
  28. package/dist/src/connection.js +16 -1
  29. package/dist/src/connection.js.map +1 -1
  30. package/dist/src/deliver-text.d.ts +13 -0
  31. package/dist/src/deliver-text.d.ts.map +1 -0
  32. package/dist/src/deliver-text.js +28 -0
  33. package/dist/src/deliver-text.js.map +1 -0
  34. package/dist/src/deliver-text.test.d.ts +2 -0
  35. package/dist/src/deliver-text.test.d.ts.map +1 -0
  36. package/dist/src/deliver-text.test.js +31 -0
  37. package/dist/src/deliver-text.test.js.map +1 -0
  38. package/dist/src/dispatch-mentioned-reply.d.ts +3 -0
  39. package/dist/src/dispatch-mentioned-reply.d.ts.map +1 -1
  40. package/dist/src/dispatch-mentioned-reply.js +124 -76
  41. package/dist/src/dispatch-mentioned-reply.js.map +1 -1
  42. package/dist/src/gateway-session-queue.d.ts +3 -0
  43. package/dist/src/gateway-session-queue.d.ts.map +1 -1
  44. package/dist/src/gateway-session-queue.js +1 -0
  45. package/dist/src/gateway-session-queue.js.map +1 -1
  46. package/dist/src/inbound-chat-type.d.ts +4 -0
  47. package/dist/src/inbound-chat-type.d.ts.map +1 -1
  48. package/dist/src/inbound-chat-type.js +8 -0
  49. package/dist/src/inbound-chat-type.js.map +1 -1
  50. package/dist/src/inbound-display.d.ts +2 -0
  51. package/dist/src/inbound-display.d.ts.map +1 -1
  52. package/dist/src/inbound-display.js +16 -5
  53. package/dist/src/inbound-display.js.map +1 -1
  54. package/dist/src/inbound-input-media.js +1 -1
  55. package/dist/src/inbound-input-media.js.map +1 -1
  56. package/dist/src/inbound-media-local.js +1 -1
  57. package/dist/src/inbound-media-local.js.map +1 -1
  58. package/dist/src/inbound-terminal-delivery.d.ts +74 -0
  59. package/dist/src/inbound-terminal-delivery.d.ts.map +1 -0
  60. package/dist/src/inbound-terminal-delivery.js +246 -0
  61. package/dist/src/inbound-terminal-delivery.js.map +1 -0
  62. package/dist/src/inbound-terminal-state.d.ts +61 -0
  63. package/dist/src/inbound-terminal-state.d.ts.map +1 -0
  64. package/dist/src/inbound-terminal-state.js +177 -0
  65. package/dist/src/inbound-terminal-state.js.map +1 -0
  66. package/dist/src/inbound-terminal-state.test.d.ts +2 -0
  67. package/dist/src/inbound-terminal-state.test.d.ts.map +1 -0
  68. package/dist/src/inbound-terminal-state.test.js +203 -0
  69. package/dist/src/inbound-terminal-state.test.js.map +1 -0
  70. package/dist/src/per-message-fallback-notice.d.ts +11 -1
  71. package/dist/src/per-message-fallback-notice.d.ts.map +1 -1
  72. package/dist/src/per-message-fallback-notice.js +16 -1
  73. package/dist/src/per-message-fallback-notice.js.map +1 -1
  74. package/dist/src/per-message-fallback-notice.test.d.ts +2 -0
  75. package/dist/src/per-message-fallback-notice.test.d.ts.map +1 -0
  76. package/dist/src/per-message-fallback-notice.test.js +47 -0
  77. package/dist/src/per-message-fallback-notice.test.js.map +1 -0
  78. package/dist/src/project-path-normalize.d.ts +14 -0
  79. package/dist/src/project-path-normalize.d.ts.map +1 -1
  80. package/dist/src/project-path-normalize.js +26 -0
  81. package/dist/src/project-path-normalize.js.map +1 -1
  82. package/dist/src/resource-file.d.ts +7 -1
  83. package/dist/src/resource-file.d.ts.map +1 -1
  84. package/dist/src/resource-file.js +56 -19
  85. package/dist/src/resource-file.js.map +1 -1
  86. package/dist/src/send-group-message-tool.d.ts.map +1 -1
  87. package/dist/src/send-group-message-tool.js +4 -2
  88. package/dist/src/send-group-message-tool.js.map +1 -1
  89. package/dist/src/send-service.d.ts.map +1 -1
  90. package/dist/src/send-service.js +33 -7
  91. package/dist/src/send-service.js.map +1 -1
  92. package/dist/src/sync-mapping-types.d.ts +58 -8
  93. package/dist/src/sync-mapping-types.d.ts.map +1 -1
  94. package/dist/src/sync-mapping-types.js +19 -5
  95. package/dist/src/sync-mapping-types.js.map +1 -1
  96. package/dist/src/sync-service-client.d.ts +3 -1
  97. package/dist/src/sync-service-client.d.ts.map +1 -1
  98. package/dist/src/sync-service-client.js.map +1 -1
  99. package/dist/src/types.d.ts +27 -0
  100. package/dist/src/types.d.ts.map +1 -1
  101. package/dist/src/types.js.map +1 -1
  102. package/package.json +3 -2
package/README.md CHANGED
@@ -12,10 +12,19 @@ IM 系统 → WebSocket → 插件(本项目) → OpenClaw AI → IM
12
12
  2. 建立 WebSocket 长连接,接收带业务 `params` 的推送(当前代码会处理 `**robotMention**` 与 `**groupMessage**`,条件:`parsed.params` 存在且 `cmd` 为上述二者之一)
13
13
  3. 将收到的消息转发给 OpenClaw 处理
14
14
  4. OpenClaw AI 回复后,插件:
15
- - 先通过 WebSocket `START` 让 IM 端显示一条「思考中」占位消息;
16
- - AI 产出第一条完整回复时,用 HTTP `/im/message/send` 覆盖这条占位消息;
17
- - 若有多条回复,则后续每条都通过 HTTP 作为**独立消息**发送;
18
- - 首条回复若在配置的超时时间内一直未产生,会自动将占位消息更新为「当前请求处理超时,请稍后重试」。
15
+ - 通过 HTTP `/im/message/send` 发送**业务正文**(及附件);
16
+ - 若本轮无业务回复或失败(超时、precheck、无回复、发 IM 失败等),通过 **HTTP 终态兜底** 发送中文说明(见 `docs/reliability-roadmap.md`);
17
+ - WebSocket 可发 BEGIN / 进度 / FINISHED 等信令(IM 可不展示;**不以 WS 为唯一用户反馈**)。
18
+
19
+ ### 文档索引
20
+
21
+ | 文档 | 说明 |
22
+ |------|------|
23
+ | [docs/reliability-roadmap.md](docs/reliability-roadmap.md) | **可靠性优化路线图**(待办清单、风险、执行顺序) |
24
+ | [docs/插件实现逻辑说明.md](docs/插件实现逻辑说明.md) | 实现细节 |
25
+ | [docs/openclaw通道插件-BUSINESS.md](docs/openclaw通道插件-BUSINESS.md) | 业务场景 |
26
+ | [docs/im服务接口说明.md](docs/im服务接口说明.md) | IM API / WS |
27
+ | [docs/流式消息协议设计与优化.md](docs/流式消息协议设计与优化.md) | WS 协议 |
19
28
 
20
29
  ---
21
30
 
@@ -244,6 +253,9 @@ openclaw gateway restart
244
253
  | `inboundMediaSandboxRootPrefix` | string | — | **可选**。沙箱内 workspace 挂载根,填 `**/workspace`** 时,在 `workspaceRelative` 模式下 `MediaPath` 为 `**/workspace/xg_im_inbound/...**`,避免 `./` 被 `read` 等工具按**进程 cwd**解析导致「不可访问」。须以 `/` 开头。 |
245
254
  | `syncServiceBaseUrl` | string | — | **可选**。openclaw-xgkb-sync **管理 API** 根地址(如 `http://127.0.0.1:9090`)。配置后插件可处理 IM 下发的 `openclawApplySyncMapping` 信令并登记目录映射。详见 `docs/im服务接口说明.md`。 |
246
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 日志。 |
247
259
 
248
260
 
249
261
  ### 账户配置(`accounts.<accountId>`,对象 map)
@@ -270,6 +282,8 @@ openclaw gateway restart
270
282
 
271
283
  ## 故障排除
272
284
 
285
+ 排查「无回复 / Media failed / 断连」时,请先对照 **[可靠性路线图](docs/reliability-roadmap.md)** 中的已知现状与日志字段。
286
+
273
287
  ### 收不到消息
274
288
 
275
289
  - 确认 `robotKey` 正确(或旧字段 `appKey` 正确),且机器人已在 IM 后台激活
@@ -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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"}
@@ -2,7 +2,7 @@
2
2
  * 处理 IM WebSocket 下发的 openclawApplySyncMapping 信令。
3
3
  */
4
4
  import { resolveAgentWorkspaceDir } from "openclaw/plugin-sdk/memory-core-host-engine-foundation";
5
- import { normalizeRemoteRootFolderPath, resolveLocalAbsolutePath } from "./project-path-normalize.js";
5
+ import { resolveLocalAbsolutePath, resolveRemoteRootForSync } from "./project-path-normalize.js";
6
6
  import { parseSyncMappingParams } from "./sync-mapping-types.js";
7
7
  import { deleteSyncMapping, upsertSyncMapping } from "./sync-service-client.js";
8
8
  const DEFAULT_FILE_PATTERNS = ["**/*"];
@@ -37,12 +37,15 @@ async function applyUpsert(ctx, syncBase, params) {
37
37
  const { config, cfg, log, logPrefix } = ctx;
38
38
  const localRoot = params.localRoot;
39
39
  const agentId = config.agentId || "main";
40
- let remoteRootFolderPath;
40
+ let remoteRoot;
41
41
  try {
42
- remoteRootFolderPath = normalizeRemoteRootFolderPath(params.remoteRootFolderPath);
42
+ remoteRoot = resolveRemoteRootForSync({
43
+ remoteRootFolderId: params.remoteRootFolderId,
44
+ remoteRootFolderPath: params.remoteRootFolderPath,
45
+ });
43
46
  }
44
47
  catch (e) {
45
- log.error(`${logPrefix} [sync-mapping] remote path: ${String(e)}`);
48
+ log.error(`${logPrefix} [sync-mapping] remote root: ${String(e)}`);
46
49
  return;
47
50
  }
48
51
  let workspaceHost;
@@ -73,13 +76,18 @@ async function applyUpsert(ctx, syncBase, params) {
73
76
  localRoot: resolvedLocalAbs,
74
77
  enabled: params.enabled ?? true,
75
78
  appKey: params.appKey.trim(),
76
- remoteRootFolderPath,
79
+ ...(remoteRoot.remoteRootFileId ? { remoteRootFileId: remoteRoot.remoteRootFileId } : {}),
80
+ ...(remoteRoot.remoteRootFolderPath ? { remoteRootFolderPath: remoteRoot.remoteRootFolderPath } : {}),
77
81
  ...(params.kbProjectId?.trim() ? { projectId: params.kbProjectId.trim() } : {}),
78
82
  filePatterns,
79
83
  excludePatterns,
80
84
  ...(syncOpts?.direction ? { syncDirection: syncOpts.direction } : {}),
81
85
  };
82
- log.info(`${logPrefix} [sync-mapping] upsert mappingId=${params.mappingId} agentId=${agentId} workspaceHost=${workspaceHost ?? "(host_absolute)"} localRoot=${resolvedLocalAbs} remote=${remoteRootFolderPath}`);
86
+ const remoteLabel = remoteRoot.remoteRootFileId
87
+ ? `fileId=${remoteRoot.remoteRootFileId}` +
88
+ (remoteRoot.remoteRootFolderPath ? ` path=${remoteRoot.remoteRootFolderPath}` : "")
89
+ : `path=${remoteRoot.remoteRootFolderPath}`;
90
+ log.info(`${logPrefix} [sync-mapping] upsert mappingId=${params.mappingId} agentId=${agentId} workspaceHost=${workspaceHost ?? "(host_absolute)"} localRoot=${resolvedLocalAbs} remote=${remoteLabel}`);
83
91
  try {
84
92
  await upsertSyncMapping(syncBase, params.mappingId, body, log);
85
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"apply-sync-mapping.js","sourceRoot":"","sources":["../../src/apply-sync-mapping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply-sync-mapping.js","sourceRoot":"","sources":["../../src/apply-sync-mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAElG,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAE,sBAAsB,EAAgC,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGhF,MAAM,qBAAqB,GAAG,CAAC,MAAM,CAAC,CAAC;AACvC,MAAM,eAAe,GAAG,CAAC,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAU5E,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAC9C,GAA4B,EAC5B,SAAkB;IAElB,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,EAAE,CACN,GAAG,SAAS,qGAAqG,CACpH,CAAC;QACF,OAAO;IACX,CAAC;IAED,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACD,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,mCAAmC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtE,OAAO;IACX,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC;YACD,MAAM,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,kCAAkC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,OAAO;IACX,CAAC;IAED,MAAM,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,WAAW,CACtB,GAA4B,EAC5B,QAAgB,EAChB,MAA+B;IAE/B,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;IAEzC,IAAI,UAAuD,CAAC;IAC5D,IAAI,CAAC;QACD,UAAU,GAAG,wBAAwB,CAAC;YAClC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;SACpD,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,gCAAgC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,OAAO;IACX,CAAC;IAED,IAAI,aAAiC,CAAC;IACtC,IAAI,SAAS,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAC1C,IAAI,CAAC;YACD,aAAa,GAAG,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,oDAAoD,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpG,OAAO;QACX,CAAC;IACL,CAAC;IAED,IAAI,gBAAwB,CAAC;IAC7B,IAAI,CAAC;QACD,gBAAgB,GAAG,wBAAwB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,uCAAuC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAC7B,MAAM,YAAY,GACd,QAAQ,EAAE,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAC/G,MAAM,eAAe,GACjB,QAAQ,EAAE,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;QAC5D,CAAC,CAAC,QAAQ,CAAC,eAAe;QAC1B,CAAC,CAAC,eAAe,CAAC;IAE1B,MAAM,IAAI,GAAG;QACT,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,gBAAgB;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAC5B,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,YAAY;QACZ,eAAe;QACf,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC;IAEF,MAAM,WAAW,GAAG,UAAU,CAAC,gBAAgB;QAC3C,CAAC,CAAC,UAAU,UAAU,CAAC,gBAAgB,EAAE;YACvC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,CAAC,CAAC,QAAQ,UAAU,CAAC,oBAAoB,EAAE,CAAC;IAEhD,GAAG,CAAC,IAAI,CACJ,GAAG,SAAS,oCAAoC,MAAM,CAAC,SAAS,YAAY,OAAO,kBAAkB,aAAa,IAAI,iBAAiB,cAAc,gBAAgB,WAAW,WAAW,EAAE,CAChM,CAAC;IAEF,IAAI,CAAC;QACD,MAAM,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,kCAAkC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;AACL,CAAC"}
@@ -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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"}