@xgjktech/xg_cwork_im 1.16.1 → 1.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/src/channel-config.d.ts +7 -3
- package/dist/src/channel-config.d.ts.map +1 -1
- package/dist/src/channel-config.js +7 -3
- package/dist/src/channel-config.js.map +1 -1
- package/dist/src/dispatch-mentioned-reply.d.ts +1 -1
- package/dist/src/dispatch-mentioned-reply.d.ts.map +1 -1
- package/dist/src/dispatch-mentioned-reply.js +56 -12
- package/dist/src/dispatch-mentioned-reply.js.map +1 -1
- package/dist/src/inbound-terminal-delivery.d.ts +2 -1
- package/dist/src/inbound-terminal-delivery.d.ts.map +1 -1
- package/dist/src/inbound-terminal-delivery.js +2 -1
- package/dist/src/inbound-terminal-delivery.js.map +1 -1
- package/dist/src/inbound-terminal-state.d.ts +6 -2
- package/dist/src/inbound-terminal-state.d.ts.map +1 -1
- package/dist/src/inbound-terminal-state.js +20 -8
- package/dist/src/inbound-terminal-state.js.map +1 -1
- package/dist/src/inbound-terminal-state.test.js +34 -8
- package/dist/src/inbound-terminal-state.test.js.map +1 -1
- package/dist/src/turn-deliver-buffer.d.ts +13 -1
- package/dist/src/turn-deliver-buffer.d.ts.map +1 -1
- package/dist/src/turn-deliver-buffer.js +57 -2
- package/dist/src/turn-deliver-buffer.js.map +1 -1
- package/dist/src/turn-deliver-buffer.test.js +42 -8
- package/dist/src/turn-deliver-buffer.test.js.map +1 -1
- package/dist/src/types.d.ts +3 -3
- package/dist/src/user-facing-errors.d.ts +9 -6
- package/dist/src/user-facing-errors.d.ts.map +1 -1
- package/dist/src/user-facing-errors.js +26 -34
- package/dist/src/user-facing-errors.js.map +1 -1
- package/dist/src/user-facing-errors.test.js +27 -13
- package/dist/src/user-facing-errors.test.js.map +1 -1
- package/dist/src/ws-run-event-unmapped.d.ts +10 -0
- package/dist/src/ws-run-event-unmapped.d.ts.map +1 -0
- package/dist/src/ws-run-event-unmapped.js +16 -0
- package/dist/src/ws-run-event-unmapped.js.map +1 -0
- package/dist/src/ws-run-event-unmapped.test.d.ts +2 -0
- package/dist/src/ws-run-event-unmapped.test.d.ts.map +1 -0
- package/dist/src/ws-run-event-unmapped.test.js +15 -0
- package/dist/src/ws-run-event-unmapped.test.js.map +1 -0
- package/package.json +4 -4
|
@@ -93,14 +93,16 @@ describe("resolveTerminalState", () => {
|
|
|
93
93
|
});
|
|
94
94
|
});
|
|
95
95
|
describe("shouldSendTerminalHttpForState", () => {
|
|
96
|
-
it("
|
|
96
|
+
it("never sends HTTP for no_reply or timeout", () => {
|
|
97
|
+
assert.equal(shouldSendTerminalHttpForState("no_reply", { normalizerSilentSkip: false }), false);
|
|
97
98
|
assert.equal(shouldSendTerminalHttpForState("no_reply", { normalizerSilentSkip: true }), false);
|
|
99
|
+
assert.equal(shouldSendTerminalHttpForState("timeout", {}), false);
|
|
100
|
+
assert.equal(shouldSendTerminalHttpForState("compaction_failed", {}), false);
|
|
98
101
|
});
|
|
99
|
-
it("
|
|
100
|
-
assert.equal(shouldSendTerminalHttpForState("
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}), true);
|
|
102
|
+
it("allows delivery_failed and confirmed error states", () => {
|
|
103
|
+
assert.equal(shouldSendTerminalHttpForState("delivery_failed", {}), true);
|
|
104
|
+
assert.equal(shouldSendTerminalHttpForState("precheck_error", {}), true);
|
|
105
|
+
assert.equal(shouldSendTerminalHttpForState("runtime_error", {}), true);
|
|
104
106
|
});
|
|
105
107
|
});
|
|
106
108
|
describe("resolveNoReplyCause", () => {
|
|
@@ -138,8 +140,12 @@ describe("InboundTerminalController idempotency", () => {
|
|
|
138
140
|
const sendFn = async () => {
|
|
139
141
|
sendCount++;
|
|
140
142
|
};
|
|
141
|
-
const first = await controller.trySendTerminal("precheck_error", sendFn
|
|
142
|
-
|
|
143
|
+
const first = await controller.trySendTerminal("precheck_error", sendFn, {
|
|
144
|
+
errorMessage: "Context overflow: prompt too large for the model (precheck)",
|
|
145
|
+
});
|
|
146
|
+
const second = await controller.trySendTerminal("precheck_error", sendFn, {
|
|
147
|
+
errorMessage: "Context overflow: prompt too large for the model (precheck)",
|
|
148
|
+
});
|
|
143
149
|
assert.equal(first, true);
|
|
144
150
|
assert.equal(second, false);
|
|
145
151
|
assert.equal(sendCount, 1);
|
|
@@ -167,6 +173,26 @@ describe("InboundTerminalController idempotency", () => {
|
|
|
167
173
|
assert.ok(sent.includes("上下文过大"));
|
|
168
174
|
markGlobalTerminalSent("msg-2002", "precheck_error");
|
|
169
175
|
});
|
|
176
|
+
it("does not send HTTP for zero_deliver no_reply", async () => {
|
|
177
|
+
const controller = new InboundTerminalController({
|
|
178
|
+
messageId: "msg-4004",
|
|
179
|
+
groupId: "g4",
|
|
180
|
+
sessionKey: "sk4",
|
|
181
|
+
log: noopLog,
|
|
182
|
+
logPrefix: "[test]",
|
|
183
|
+
});
|
|
184
|
+
let sendCount = 0;
|
|
185
|
+
const state = await controller.finalizeAndDeliver({
|
|
186
|
+
sendFn: async () => {
|
|
187
|
+
sendCount++;
|
|
188
|
+
},
|
|
189
|
+
dispatchThrew: false,
|
|
190
|
+
deliverInvokeCount: 0,
|
|
191
|
+
deliverCallCount: 0,
|
|
192
|
+
});
|
|
193
|
+
assert.equal(state, "no_reply");
|
|
194
|
+
assert.equal(sendCount, 0);
|
|
195
|
+
});
|
|
170
196
|
it("does not send HTTP for intentional NO_REPLY silent skip", async () => {
|
|
171
197
|
const controller = new InboundTerminalController({
|
|
172
198
|
messageId: "msg-3003",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-terminal-state.test.js","sourceRoot":"","sources":["../../src/inbound-terminal-state.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"inbound-terminal-state.test.js","sourceRoot":"","sources":["../../src/inbound-terminal-state.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 一轮 dispatch 内的 assistant
|
|
2
|
+
* 一轮 dispatch 内的 assistant 正文段缓冲:
|
|
3
|
+
* - 同段修稿(新文延展/包住旧文)→ 覆盖
|
|
4
|
+
* - 流式分块新段 → 追加合并
|
|
5
|
+
* 在 tool 边界或轮次结束冲刷 HTTP。
|
|
3
6
|
*/
|
|
4
7
|
import type { ReplyDeliverPayload } from "./send-service.js";
|
|
5
8
|
export type DeliverFlushKind = "interim" | "final";
|
|
@@ -10,6 +13,10 @@ export type BufferedDeliverEntry = {
|
|
|
10
13
|
};
|
|
11
14
|
export type TurnDeliverBufferStats = {
|
|
12
15
|
writeCount: number;
|
|
16
|
+
/** write 时判定为修稿并覆盖 */
|
|
17
|
+
revisionOverwriteCount: number;
|
|
18
|
+
/** write 时判定为新段并追加 */
|
|
19
|
+
segmentAppendCount: number;
|
|
13
20
|
flushInterimCount: number;
|
|
14
21
|
flushFinalCount: number;
|
|
15
22
|
skippedDuplicateFlushCount: number;
|
|
@@ -29,6 +36,11 @@ export declare function isDeliverPayloadSendable(args: {
|
|
|
29
36
|
hasMedia: boolean;
|
|
30
37
|
isThinking?: boolean;
|
|
31
38
|
}): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* 新文是否像对旧文的「修稿/延展」(可安全覆盖),而非另一完整分块。
|
|
41
|
+
* 无权威 OpenClaw 标记,偏保守:宁可追加重复,不可覆盖丢段。
|
|
42
|
+
*/
|
|
43
|
+
export declare function isDeliverTextRevision(oldText: string, newText: string): boolean;
|
|
32
44
|
export declare class TurnDeliverBuffer {
|
|
33
45
|
private buffer;
|
|
34
46
|
private lastFlushedComparable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-deliver-buffer.d.ts","sourceRoot":"","sources":["../../src/turn-deliver-buffer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"turn-deliver-buffer.d.ts","sourceRoot":"","sources":["../../src/turn-deliver-buffer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnD,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,0BAA0B,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GACxB;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACnB;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,oBAAoB,CAAA;CAAE,GAC5D;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAEvD,2CAA2C;AAC3C,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAEV;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAS/E;AA4BD,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,qBAAqB,CAAM;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAOpB;IAEF,UAAU,IAAI,OAAO;IAIrB,QAAQ,IAAI,sBAAsB;IAIlC,KAAK,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAiBxC,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB;IAiCxD,KAAK,IAAI,IAAI;CAGhB"}
|
|
@@ -1,16 +1,61 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 一轮 dispatch 内的 assistant
|
|
2
|
+
* 一轮 dispatch 内的 assistant 正文段缓冲:
|
|
3
|
+
* - 同段修稿(新文延展/包住旧文)→ 覆盖
|
|
4
|
+
* - 流式分块新段 → 追加合并
|
|
5
|
+
* 在 tool 边界或轮次结束冲刷 HTTP。
|
|
3
6
|
*/
|
|
4
7
|
import { normalizeDeliverComparableText } from "./deliver-text.js";
|
|
5
8
|
/** deliver 正文/附件是否值得写入 buffer 或立即 HTTP。 */
|
|
6
9
|
export function isDeliverPayloadSendable(args) {
|
|
7
10
|
return Boolean(args.textPart) || (args.hasMedia && !args.isThinking);
|
|
8
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* 新文是否像对旧文的「修稿/延展」(可安全覆盖),而非另一完整分块。
|
|
14
|
+
* 无权威 OpenClaw 标记,偏保守:宁可追加重复,不可覆盖丢段。
|
|
15
|
+
*/
|
|
16
|
+
export function isDeliverTextRevision(oldText, newText) {
|
|
17
|
+
const oldN = normalizeDeliverComparableText(oldText);
|
|
18
|
+
const newN = normalizeDeliverComparableText(newText);
|
|
19
|
+
if (!oldN)
|
|
20
|
+
return true;
|
|
21
|
+
if (!newN)
|
|
22
|
+
return true;
|
|
23
|
+
if (oldN === newN)
|
|
24
|
+
return true;
|
|
25
|
+
if (newN.startsWith(oldN) || newN.includes(oldN))
|
|
26
|
+
return true;
|
|
27
|
+
if (oldN.startsWith(newN))
|
|
28
|
+
return true;
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
function mergeAppendedEntry(prev, next) {
|
|
32
|
+
const prevText = prev.textPart.trim();
|
|
33
|
+
const nextText = next.textPart.trim();
|
|
34
|
+
const textPart = prevText && nextText ? `${prevText}\n\n${nextText}` : prevText || nextText;
|
|
35
|
+
const hasMedia = prev.hasMedia || next.hasMedia;
|
|
36
|
+
const payload = {
|
|
37
|
+
...prev.payload,
|
|
38
|
+
...next.payload,
|
|
39
|
+
text: textPart,
|
|
40
|
+
};
|
|
41
|
+
if (prev.payload.markdown != null || next.payload.markdown != null) {
|
|
42
|
+
payload.markdown = textPart;
|
|
43
|
+
}
|
|
44
|
+
if (!next.hasMedia && prev.hasMedia) {
|
|
45
|
+
if (prev.payload.mediaUrl != null)
|
|
46
|
+
payload.mediaUrl = prev.payload.mediaUrl;
|
|
47
|
+
if (prev.payload.mediaUrls != null)
|
|
48
|
+
payload.mediaUrls = prev.payload.mediaUrls;
|
|
49
|
+
}
|
|
50
|
+
return { payload, textPart, hasMedia };
|
|
51
|
+
}
|
|
9
52
|
export class TurnDeliverBuffer {
|
|
10
53
|
buffer;
|
|
11
54
|
lastFlushedComparable = "";
|
|
12
55
|
stats = {
|
|
13
56
|
writeCount: 0,
|
|
57
|
+
revisionOverwriteCount: 0,
|
|
58
|
+
segmentAppendCount: 0,
|
|
14
59
|
flushInterimCount: 0,
|
|
15
60
|
flushFinalCount: 0,
|
|
16
61
|
skippedDuplicateFlushCount: 0,
|
|
@@ -22,8 +67,18 @@ export class TurnDeliverBuffer {
|
|
|
22
67
|
return { ...this.stats };
|
|
23
68
|
}
|
|
24
69
|
write(entry) {
|
|
25
|
-
this.buffer = entry;
|
|
26
70
|
this.stats.writeCount++;
|
|
71
|
+
if (!this.buffer) {
|
|
72
|
+
this.buffer = entry;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (isDeliverTextRevision(this.buffer.textPart, entry.textPart)) {
|
|
76
|
+
this.stats.revisionOverwriteCount++;
|
|
77
|
+
this.buffer = entry;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
this.stats.segmentAppendCount++;
|
|
81
|
+
this.buffer = mergeAppendedEntry(this.buffer, entry);
|
|
27
82
|
}
|
|
28
83
|
takeForFlush(kind) {
|
|
29
84
|
if (!this.buffer) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-deliver-buffer.js","sourceRoot":"","sources":["../../src/turn-deliver-buffer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"turn-deliver-buffer.js","sourceRoot":"","sources":["../../src/turn-deliver-buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
2
|
import { describe, it } from "node:test";
|
|
3
|
-
import { isDeliverPayloadSendable, TurnDeliverBuffer, } from "./turn-deliver-buffer.js";
|
|
3
|
+
import { isDeliverPayloadSendable, isDeliverTextRevision, TurnDeliverBuffer, } from "./turn-deliver-buffer.js";
|
|
4
4
|
const HOUTONG_BODY_LOOSE = `确实是这个问题:昨天那版虽然用了内嵌 SVG,但你现在的文档预览器没有把 SVG 正常渲染出来,所以流程看不到。
|
|
5
5
|
|
|
6
6
|
我已经重新生成了一版**纯 Markdown 可读版**:
|
|
@@ -22,6 +22,16 @@ const WORLD_CUP_FULL = `| 场次 | 时间 |
|
|
|
22
22
|
| 1 | 21:00 |
|
|
23
23
|
| 2 | 00:00 |
|
|
24
24
|
| 3 | 03:00 |`;
|
|
25
|
+
const RT002_PART1 = `BEGIN_123
|
|
26
|
+
|
|
27
|
+
## 一、背景
|
|
28
|
+
|
|
29
|
+
随着人工智能技术的快速发展,企业级AI助手在提升工作效率中发挥着日益重要的作用。`;
|
|
30
|
+
const RT002_PART2 = `- 工具调用的完整日志必须被记录,包括调用时间、调用者、工具名称。
|
|
31
|
+
|
|
32
|
+
## 六、审计
|
|
33
|
+
|
|
34
|
+
审计是AI助手治理的监督机制。`;
|
|
25
35
|
function entry(textPart, hasMedia = false) {
|
|
26
36
|
return {
|
|
27
37
|
payload: { text: textPart, ...(hasMedia ? { mediaUrl: "/tmp/a.md" } : {}) },
|
|
@@ -37,8 +47,18 @@ describe("isDeliverPayloadSendable", () => {
|
|
|
37
47
|
assert.equal(isDeliverPayloadSendable({ textPart: "", hasMedia: false }), false);
|
|
38
48
|
});
|
|
39
49
|
});
|
|
50
|
+
describe("isDeliverTextRevision", () => {
|
|
51
|
+
it("treats growth / containment as revision", () => {
|
|
52
|
+
assert.equal(isDeliverTextRevision(WORLD_CUP_PARTIAL, WORLD_CUP_FULL), true);
|
|
53
|
+
assert.equal(isDeliverTextRevision("abc", "abcdef"), true);
|
|
54
|
+
assert.equal(isDeliverTextRevision("abcdef", "abc"), true);
|
|
55
|
+
});
|
|
56
|
+
it("treats disjoint later chunk as not revision", () => {
|
|
57
|
+
assert.equal(isDeliverTextRevision(RT002_PART1, RT002_PART2), false);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
40
60
|
describe("TurnDeliverBuffer", () => {
|
|
41
|
-
it("
|
|
61
|
+
it("revision overwrite keeps last version (and media)", () => {
|
|
42
62
|
const buf = new TurnDeliverBuffer();
|
|
43
63
|
buf.write(entry(HOUTONG_BODY_LOOSE));
|
|
44
64
|
buf.write(entry(HOUTONG_BODY_TIGHT));
|
|
@@ -49,12 +69,24 @@ describe("TurnDeliverBuffer", () => {
|
|
|
49
69
|
assert.equal(final.entry.textPart, HOUTONG_BODY_TIGHT);
|
|
50
70
|
assert.equal(final.entry.hasMedia, true);
|
|
51
71
|
}
|
|
52
|
-
assert.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
72
|
+
assert.equal(buf.getStats().writeCount, 3);
|
|
73
|
+
assert.ok(buf.getStats().revisionOverwriteCount >= 1);
|
|
74
|
+
assert.equal(buf.getStats().flushFinalCount, 1);
|
|
75
|
+
});
|
|
76
|
+
it("appends additive stream chunks so BEGIN is not lost", () => {
|
|
77
|
+
const buf = new TurnDeliverBuffer();
|
|
78
|
+
buf.write(entry(RT002_PART1));
|
|
79
|
+
buf.write(entry(RT002_PART2));
|
|
80
|
+
const final = buf.takeForFlush("final");
|
|
81
|
+
assert.equal(final.status, "ready");
|
|
82
|
+
if (final.status === "ready") {
|
|
83
|
+
assert.ok(final.entry.textPart.includes("BEGIN_123"));
|
|
84
|
+
assert.ok(final.entry.textPart.includes("## 六、审计"));
|
|
85
|
+
assert.ok(final.entry.textPart.includes(RT002_PART1.trim()));
|
|
86
|
+
assert.ok(final.entry.textPart.includes(RT002_PART2.trim()));
|
|
87
|
+
}
|
|
88
|
+
assert.equal(buf.getStats().segmentAppendCount, 1);
|
|
89
|
+
assert.equal(buf.getStats().revisionOverwriteCount, 0);
|
|
58
90
|
});
|
|
59
91
|
it("interim flush clears buffer; final holds post-tool segment", () => {
|
|
60
92
|
const buf = new TurnDeliverBuffer();
|
|
@@ -114,6 +146,8 @@ describe("TurnDeliverBuffer", () => {
|
|
|
114
146
|
if (final.status === "ready") {
|
|
115
147
|
assert.equal(final.entry.textPart, WORLD_CUP_FULL);
|
|
116
148
|
}
|
|
149
|
+
assert.equal(buf.getStats().revisionOverwriteCount, 1);
|
|
150
|
+
assert.equal(buf.getStats().segmentAppendCount, 0);
|
|
117
151
|
});
|
|
118
152
|
it("multi-tool: two interim + one final", () => {
|
|
119
153
|
const buf = new TurnDeliverBuffer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-deliver-buffer.test.js","sourceRoot":"","sources":["../../src/turn-deliver-buffer.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,iBAAiB,GACpB,MAAM,0BAA0B,CAAC;AAElC,MAAM,kBAAkB,GAAG;;;;;;;MAOrB,CAAC;AAEP,MAAM,kBAAkB,GAAG;;;KAGtB,CAAC;AAEN,MAAM,iBAAiB,GAAG;;;MAGpB,CAAC;AAEP,MAAM,cAAc,GAAG;;;;cAIT,CAAC;AAEf,SAAS,KAAK,CAAC,QAAgB,EAAE,QAAQ,GAAG,KAAK;IAC7C,OAAO;QACH,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAC3E,QAAQ;QACR,QAAQ;KACX,CAAC;AACN,CAAC;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAClF,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/E,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAClG,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"turn-deliver-buffer.test.js","sourceRoot":"","sources":["../../src/turn-deliver-buffer.test.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -153,8 +153,8 @@ export interface XgImConfig extends OpenClawConfig {
|
|
|
153
153
|
*/
|
|
154
154
|
blockStreaming?: boolean;
|
|
155
155
|
/**
|
|
156
|
-
* 可选:合并同一 text 块内的流式 token
|
|
157
|
-
*
|
|
156
|
+
* 可选:合并同一 text 块内的流式 token 碎片后再向通道 deliver。
|
|
157
|
+
* 通道未配时插件注入默认 `minChars:500 idleMs:500`(盖住 agents.defaults 偏大值,也避免旧 1/0 过碎)。
|
|
158
158
|
*/
|
|
159
159
|
blockStreamingCoalesce?: BlockStreamingCoalesceConfig;
|
|
160
160
|
/**
|
|
@@ -164,7 +164,7 @@ export interface XgImConfig extends OpenClawConfig {
|
|
|
164
164
|
deliverModelFallbackNotice?: boolean;
|
|
165
165
|
/**
|
|
166
166
|
* 是否在 `blockStreaming` 开启时,将同一段 assistant 正文缓冲后在 tool 边界 / 轮次结束再 HTTP。
|
|
167
|
-
* 默认 `true
|
|
167
|
+
* 默认 `true`:修稿覆盖、流式分块追加合并;设为 `false` 恢复「每次 deliver 即 HTTP + C7 去重」。
|
|
168
168
|
*/
|
|
169
169
|
deliverSegmentBuffer?: boolean;
|
|
170
170
|
}
|
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 面向 IM
|
|
2
|
+
* 面向 IM 的确认错误文案:仅白名单翻译或透传上游原文;不编造「没有生成回复」等结论。
|
|
3
3
|
*/
|
|
4
4
|
import type { NoReplyCause, TerminalState } from "./inbound-terminal-state.js";
|
|
5
5
|
export type TerminalMessageContext = {
|
|
6
|
-
/**
|
|
6
|
+
/** 原始错误信息(分类前),用于确认映射或透传 */
|
|
7
7
|
errorMessage?: string;
|
|
8
8
|
noReplyCause?: NoReplyCause;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
* 基于插件侧信号(agent 是否已启动、dispatch 是否仍在进行),非 OpenClaw 运行态 API。
|
|
10
|
+
* @deprecated 首包超时不对用户发文案;仅日志可能仍带此字段。
|
|
12
11
|
*/
|
|
13
12
|
timeoutCause?: FirstReplyTimeoutCause;
|
|
14
13
|
};
|
|
15
|
-
/**
|
|
14
|
+
/** 首条回复超时日志粗分(不对 IM 发终态话术) */
|
|
16
15
|
export type FirstReplyTimeoutCause = "never_started" | "in_progress" | "ended_without_http_reply";
|
|
17
16
|
export declare function isAttachmentBlockedErrorMessage(message: string): boolean;
|
|
18
17
|
export declare function isContextOverflowErrorMessage(message: string): boolean;
|
|
19
18
|
/**
|
|
20
|
-
*
|
|
19
|
+
* 上游错误 → IM 正文:确认白名单译人话,否则透传截断原文;无内容则空串。
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatConfirmedUpstreamErrorForIm(raw: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* 终态 HTTP 文案:仅 delivery_failed / 确认错误等;no_reply / timeout / compaction 返回空(不发)。
|
|
21
24
|
*/
|
|
22
25
|
export declare function buildTerminalUserMessage(state: TerminalState, context?: TerminalMessageContext): string;
|
|
23
26
|
/**
|
|
@@ -1 +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,
|
|
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,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;OAEG;IACH,YAAY,CAAC,EAAE,sBAAsB,CAAC;CACzC,CAAC;AAEF,8BAA8B;AAC9B,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG,aAAa,GAAG,0BAA0B,CAAC;AAIlG,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQxE;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAatE;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWrE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACpC,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,sBAAsB,GACjC,MAAM,CAiBR;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,GAAE,MAAM,EAAO,GAAG,MAAM,CAgChG"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 面向 IM
|
|
2
|
+
* 面向 IM 的确认错误文案:仅白名单翻译或透传上游原文;不编造「没有生成回复」等结论。
|
|
3
3
|
*/
|
|
4
4
|
import { summarizeMediaRef } from "./resource-file.js";
|
|
5
|
-
|
|
6
|
-
return (context?.errorMessage ?? "").trim().toLowerCase();
|
|
7
|
-
}
|
|
5
|
+
const UPSTREAM_ERROR_PASSTHROUGH_MAX = 500;
|
|
8
6
|
export function isAttachmentBlockedErrorMessage(message) {
|
|
9
7
|
const lower = message.trim().toLowerCase();
|
|
10
8
|
return (lower.includes("blocked attachment") ||
|
|
@@ -25,47 +23,41 @@ export function isContextOverflowErrorMessage(message) {
|
|
|
25
23
|
(lower.includes("precheck") && lower.includes("overflow")));
|
|
26
24
|
}
|
|
27
25
|
/**
|
|
28
|
-
*
|
|
26
|
+
* 上游错误 → IM 正文:确认白名单译人话,否则透传截断原文;无内容则空串。
|
|
27
|
+
*/
|
|
28
|
+
export function formatConfirmedUpstreamErrorForIm(raw) {
|
|
29
|
+
const t = raw.trim();
|
|
30
|
+
if (!t || t === "(empty)")
|
|
31
|
+
return "";
|
|
32
|
+
if (isAttachmentBlockedErrorMessage(t)) {
|
|
33
|
+
return "您发送的图片或附件未能加载(系统路径访问受限),模型可能看不到附件内容;文本消息已收到。";
|
|
34
|
+
}
|
|
35
|
+
if (isContextOverflowErrorMessage(t)) {
|
|
36
|
+
return "当前对话上下文过大,处理失败。";
|
|
37
|
+
}
|
|
38
|
+
if (t.length <= UPSTREAM_ERROR_PASSTHROUGH_MAX)
|
|
39
|
+
return t;
|
|
40
|
+
return `${t.slice(0, UPSTREAM_ERROR_PASSTHROUGH_MAX - 1)}…`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 终态 HTTP 文案:仅 delivery_failed / 确认错误等;no_reply / timeout / compaction 返回空(不发)。
|
|
29
44
|
*/
|
|
30
45
|
export function buildTerminalUserMessage(state, context) {
|
|
31
|
-
const errLower = errorMessageLower(context);
|
|
32
46
|
switch (state) {
|
|
33
|
-
case "precheck_error":
|
|
34
|
-
return "当前对话上下文过大,本轮未能调用模型。";
|
|
35
|
-
case "compaction_failed":
|
|
36
|
-
return "系统已尝试压缩对话历史,但仍未生成回复。";
|
|
37
|
-
case "timeout":
|
|
38
|
-
if (context?.timeoutCause === "never_started") {
|
|
39
|
-
return "已超过首条回复等待时限,模型处理尚未启动。";
|
|
40
|
-
}
|
|
41
|
-
if (context?.timeoutCause === "in_progress") {
|
|
42
|
-
return "已超过首条回复等待时限,尚未向 IM 发送首条回复,模型处理可能仍在进行中。";
|
|
43
|
-
}
|
|
44
|
-
if (context?.timeoutCause === "ended_without_http_reply") {
|
|
45
|
-
return "已超过首条回复等待时限,本轮未向 IM 发送任何回复内容。";
|
|
46
|
-
}
|
|
47
|
-
return "已超过首条回复等待时限。";
|
|
48
47
|
case "no_reply":
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return "
|
|
48
|
+
case "timeout":
|
|
49
|
+
case "compaction_failed":
|
|
50
|
+
case "success":
|
|
51
|
+
return "";
|
|
52
|
+
case "precheck_error":
|
|
53
53
|
case "runtime_error":
|
|
54
|
-
|
|
55
|
-
return ("您发送的图片或附件未能加载(系统路径访问受限),模型可能看不到附件内容;文本消息已收到。");
|
|
56
|
-
}
|
|
57
|
-
if (isContextOverflowErrorMessage(errLower)) {
|
|
58
|
-
return "当前对话上下文过大,处理失败。";
|
|
59
|
-
}
|
|
60
|
-
return "当前请求处理时出现异常。";
|
|
54
|
+
return formatConfirmedUpstreamErrorForIm(context?.errorMessage ?? "");
|
|
61
55
|
case "delivery_failed":
|
|
62
56
|
return "回复已生成,但发送到 IM 时失败。";
|
|
63
57
|
case "cancelled":
|
|
64
58
|
return "当前请求已取消。";
|
|
65
59
|
case "superseded":
|
|
66
60
|
return "当前请求已被更新的处理覆盖。";
|
|
67
|
-
case "success":
|
|
68
|
-
return "";
|
|
69
61
|
}
|
|
70
62
|
}
|
|
71
63
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-facing-errors.js","sourceRoot":"","sources":["../../src/user-facing-errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"user-facing-errors.js","sourceRoot":"","sources":["../../src/user-facing-errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
2
|
import { describe, it } from "node:test";
|
|
3
|
-
import { buildTerminalUserMessage, formatUserFacingMediaDeliverError, isAttachmentBlockedErrorMessage, isContextOverflowErrorMessage, } from "./user-facing-errors.js";
|
|
3
|
+
import { buildTerminalUserMessage, formatConfirmedUpstreamErrorForIm, formatUserFacingMediaDeliverError, isAttachmentBlockedErrorMessage, isContextOverflowErrorMessage, } from "./user-facing-errors.js";
|
|
4
4
|
describe("isContextOverflowErrorMessage", () => {
|
|
5
5
|
it("detects context-overflow-precheck log style", () => {
|
|
6
6
|
assert.equal(isContextOverflowErrorMessage("[context-overflow-precheck] overflowTokens=72970 estimatedPromptTokens=328586"), true);
|
|
@@ -12,6 +12,14 @@ describe("isAttachmentBlockedErrorMessage", () => {
|
|
|
12
12
|
assert.equal(isAttachmentBlockedErrorMessage("Local media path is not under an allowed directory: /Users/x/ws/project/a.png"), true);
|
|
13
13
|
});
|
|
14
14
|
});
|
|
15
|
+
describe("formatConfirmedUpstreamErrorForIm", () => {
|
|
16
|
+
it("maps overflow and attachment; passthrough unknown", () => {
|
|
17
|
+
assert.ok(formatConfirmedUpstreamErrorForIm("[context-overflow-precheck] overflowTokens=100").includes("上下文过大"));
|
|
18
|
+
assert.ok(formatConfirmedUpstreamErrorForIm("Blocked attachment path outside allowed roots: ./x.png").includes("附件未能加载"));
|
|
19
|
+
assert.equal(formatConfirmedUpstreamErrorForIm("Some upstream boom"), "Some upstream boom");
|
|
20
|
+
assert.equal(formatConfirmedUpstreamErrorForIm(""), "");
|
|
21
|
+
});
|
|
22
|
+
});
|
|
15
23
|
describe("buildTerminalUserMessage", () => {
|
|
16
24
|
it("refines runtime_error for attachment block", () => {
|
|
17
25
|
const msg = buildTerminalUserMessage("runtime_error", {
|
|
@@ -26,22 +34,28 @@ describe("buildTerminalUserMessage", () => {
|
|
|
26
34
|
});
|
|
27
35
|
assert.ok(msg.includes("上下文过大"));
|
|
28
36
|
});
|
|
29
|
-
it("
|
|
30
|
-
|
|
31
|
-
assert.
|
|
32
|
-
assert.
|
|
37
|
+
it("does not invent no_reply or timeout copy", () => {
|
|
38
|
+
assert.equal(buildTerminalUserMessage("no_reply", { noReplyCause: "zero_deliver" }), "");
|
|
39
|
+
assert.equal(buildTerminalUserMessage("no_reply"), "");
|
|
40
|
+
assert.equal(buildTerminalUserMessage("timeout", { timeoutCause: "in_progress" }), "");
|
|
41
|
+
assert.equal(buildTerminalUserMessage("timeout"), "");
|
|
42
|
+
assert.equal(buildTerminalUserMessage("compaction_failed"), "");
|
|
43
|
+
});
|
|
44
|
+
it("passthrough unknown runtime errors; empty without upstream text", () => {
|
|
45
|
+
assert.equal(buildTerminalUserMessage("runtime_error", { errorMessage: "boom-xyz" }), "boom-xyz");
|
|
46
|
+
assert.equal(buildTerminalUserMessage("runtime_error"), "");
|
|
47
|
+
assert.equal(buildTerminalUserMessage("precheck_error"), "");
|
|
33
48
|
});
|
|
34
|
-
it("
|
|
35
|
-
assert.
|
|
36
|
-
assert.equal(buildTerminalUserMessage("timeout", { timeoutCause: "in_progress" }), "已超过首条回复等待时限,尚未向 IM 发送首条回复,模型处理可能仍在进行中。");
|
|
37
|
-
assert.equal(buildTerminalUserMessage("timeout", { timeoutCause: "ended_without_http_reply" }), "已超过首条回复等待时限,本轮未向 IM 发送任何回复内容。");
|
|
49
|
+
it("keeps delivery_failed as channel fact", () => {
|
|
50
|
+
assert.ok(buildTerminalUserMessage("delivery_failed").includes("发送到 IM 时失败"));
|
|
38
51
|
});
|
|
39
52
|
it("does not include operational suggestions in terminal copy", () => {
|
|
40
53
|
const cases = [
|
|
41
|
-
buildTerminalUserMessage("runtime_error"),
|
|
42
|
-
buildTerminalUserMessage("precheck_error"
|
|
43
|
-
|
|
44
|
-
|
|
54
|
+
buildTerminalUserMessage("runtime_error", { errorMessage: "x" }),
|
|
55
|
+
buildTerminalUserMessage("precheck_error", {
|
|
56
|
+
errorMessage: "Context overflow: prompt too large for the model (precheck)",
|
|
57
|
+
}),
|
|
58
|
+
buildTerminalUserMessage("delivery_failed"),
|
|
45
59
|
];
|
|
46
60
|
for (const msg of cases) {
|
|
47
61
|
assert.ok(!/请(稍后|发送|联系|确认|新开|换)/.test(msg));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-facing-errors.test.js","sourceRoot":"","sources":["../../src/user-facing-errors.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,iCAAiC,EACjC,+BAA+B,EAC/B,6BAA6B,GAChC,MAAM,yBAAyB,CAAC;AAEjC,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,KAAK,CACR,6BAA6B,CACzB,+EAA+E,CAClF,EACD,IAAI,CACP,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,KAAK,CACR,+BAA+B,CAC3B,gEAAgE,CACnE,EACD,IAAI,CACP,CAAC;QACF,MAAM,CAAC,KAAK,CACR,+BAA+B,CAC3B,+EAA+E,CAClF,EACD,IAAI,CACP,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,GAAG,GAAG,wBAAwB,CAAC,eAAe,EAAE;YAClD,YAAY,EAAE,gEAAgE;SACjF,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,GAAG,GAAG,wBAAwB,CAAC,eAAe,EAAE;YAClD,YAAY,EAAE,gDAAgD;SACjE,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"user-facing-errors.test.js","sourceRoot":"","sources":["../../src/user-facing-errors.test.ts"],"names":[],"mappings":"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"}
|