@qwen-code/channel-base 0.21.15 → 0.22.0-nightly.20260824.3a1f86d805

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/dist/index.d.ts CHANGED
@@ -29,7 +29,7 @@ export type { DmCheckResult } from './DmGate.js';
29
29
  export { SenderGate } from './SenderGate.js';
30
30
  export type { SenderCheckResult } from './SenderGate.js';
31
31
  export { SessionRouter } from './SessionRouter.js';
32
- export { sanitizeSenderName, sanitizePromptText, sanitizeDisplayText, sanitizeLogText, truncateCodePoints, } from './sanitize.js';
32
+ export { sanitizeSenderName, sanitizePromptText, sanitizeDisplayText, sanitizeLogText, truncateCodePoints, truncateUtf16Units, } from './sanitize.js';
33
33
  export { isTerminalTaskLifecycleType } from './types.js';
34
34
  export type { Attachment, BlockStreamingChunkConfig, BlockStreamingCoalesceConfig, ChannelConfig, ChannelConfigEnumFieldDescriptor, ChannelConfigFieldDescriptor, ChannelConfigFieldKind, ChannelConfigNestedFieldDescriptor, ChannelConfigNumberFieldDescriptor, ChannelConfigObjectFieldDescriptor, ChannelConfigPlainValueFieldDescriptor, ChannelConfigValueFieldDescriptor, ChannelIdentityConfig, ChannelManagementDescriptor, ChannelMemoryIntentClassifier, ChannelMemoryIntentClassifierResult, ChannelMemoryScopeConfig, ChannelMemoryScopeMode, ChannelOutputSegmentContext, ChannelOutputSegmentEndReason, ChannelPlugin, ChannelPromptOwner, ChannelProactiveTarget, ChannelRuntimeIdentity, ChannelRuntimeMemoryScope, ChannelTaskCancellationReason, ChannelTaskLifecycleBase, ChannelTaskLifecycleEvent, ChannelType, ChannelUserInputRequestContext, ChannelUserInputResponse, ChannelUserQuestion, DispatchMode, DmPolicy, Envelope, GroupConfig, GroupPolicy, ObservedChannelIdentity, ObservedChannelContactObservation, ObservedChannelContact, ObservedChannelRelatedContact, ObservedChannelTopic, ObservedChannelGroup, ObservedChannelContactGraph, SanitizedToolCallEvent, SenderPolicy, SessionScope, SessionTarget, UserInputPresentationResult, UserInputSettlementReason, } from './types.js';
35
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -16,6 +16,6 @@ export { GroupGate } from './GroupGate.js';
16
16
  export { DmGate } from './DmGate.js';
17
17
  export { SenderGate } from './SenderGate.js';
18
18
  export { SessionRouter } from './SessionRouter.js';
19
- export { sanitizeSenderName, sanitizePromptText, sanitizeDisplayText, sanitizeLogText, truncateCodePoints, } from './sanitize.js';
19
+ export { sanitizeSenderName, sanitizePromptText, sanitizeDisplayText, sanitizeLogText, truncateCodePoints, truncateUtf16Units, } from './sanitize.js';
20
20
  export { isTerminalTaskLifecycleType } from './types.js';
21
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,iCAAiC,EACjC,sCAAsC,EACtC,oCAAoC,GACrC,MAAM,yBAAyB,CAAC;AAajC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAY/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,qCAAqC,EACrC,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,oCAAoC,CAAC;AAS5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAKrE,OAAO,EACL,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,iCAAiC,EACjC,sCAAsC,EACtC,oCAAoC,GACrC,MAAM,yBAAyB,CAAC;AAajC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAY/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,qCAAqC,EACrC,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,oCAAoC,CAAC;AAS5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAKrE,OAAO,EACL,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC"}
@@ -18,6 +18,17 @@ export declare const PROMPT_UNSAFE_INVISIBLES: RegExp;
18
18
  * `Array.from` iterates by code point, so slicing it never splits a pair.
19
19
  */
20
20
  export declare function truncateCodePoints(str: string, max: number): string;
21
+ /**
22
+ * Truncate so the result is at most `max` UTF-16 CODE UNITS (`.length`), cut on
23
+ * code-point boundaries. The companion to {@link truncateCodePoints}, for the
24
+ * callers whose budget is measured in `.length` — an astral character costs two
25
+ * units there, so a code-point cap lets a fully-astral value overshoot its
26
+ * reserved space by up to 2x and starve whatever the same budget still owes.
27
+ * Cutting on code-point boundaries still means a pair is never split (an astral
28
+ * character that does not fit whole is dropped whole), so the result can be one
29
+ * unit shorter than `max` but never contains a lone surrogate.
30
+ */
31
+ export declare function truncateUtf16Units(str: string, max: number): string;
21
32
  /**
22
33
  * Neutralize a platform display name before embedding it in a `[name]` prompt
23
34
  * tag: strip the bracket/newline delimiters, C0/DEL control chars, and the
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,QACyB,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAWvE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUpE"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,QACyB,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAUnE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAWvE;AAyHD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUpE"}
package/dist/sanitize.js CHANGED
@@ -21,6 +21,29 @@ export function truncateCodePoints(str, max) {
21
21
  const cp = Array.from(str);
22
22
  return cp.length > max ? cp.slice(0, max).join('') : str;
23
23
  }
24
+ /**
25
+ * Truncate so the result is at most `max` UTF-16 CODE UNITS (`.length`), cut on
26
+ * code-point boundaries. The companion to {@link truncateCodePoints}, for the
27
+ * callers whose budget is measured in `.length` — an astral character costs two
28
+ * units there, so a code-point cap lets a fully-astral value overshoot its
29
+ * reserved space by up to 2x and starve whatever the same budget still owes.
30
+ * Cutting on code-point boundaries still means a pair is never split (an astral
31
+ * character that does not fit whole is dropped whole), so the result can be one
32
+ * unit shorter than `max` but never contains a lone surrogate.
33
+ */
34
+ export function truncateUtf16Units(str, max) {
35
+ if (str.length <= max)
36
+ return str;
37
+ let kept = '';
38
+ let units = 0;
39
+ for (const ch of str) {
40
+ if (units + ch.length > max)
41
+ break;
42
+ kept += ch;
43
+ units += ch.length;
44
+ }
45
+ return kept;
46
+ }
24
47
  /**
25
48
  * Neutralize a platform display name before embedding it in a `[name]` prompt
26
49
  * tag: strip the bracket/newline delimiters, C0/DEL control chars, and the
@@ -63,14 +86,143 @@ export function sanitizeQuotedText(text, maxLen) {
63
86
  const cp = Array.from(cleaned);
64
87
  return cp.length > maxLen ? cp.slice(0, maxLen - 1).join('') + '…' : cleaned;
65
88
  }
89
+ /**
90
+ * The tag this peel deletes, as a regex, for reference:
91
+ * `/^([^\S\r\n]*)\[([^\]\r\n]{1,64})\](:?)/gm` -> `'$1$2$3'`, applied to a
92
+ * fixpoint. The leading class is every whitespace character EXCEPT CR/LF, not
93
+ * just space/tab: `trim()` also strips VT, FF, NBSP, U+1680, U+2000-U+200A,
94
+ * U+202F, U+205F and U+3000, so a `[ \t]*` window let any of them push the
95
+ * bracket off start-of-line, block the match, and then be trimmed away by a
96
+ * caller — reassembling the very tag the unwrap exists to peel.
97
+ */
98
+ const START_OF_LINE_TAG_MAX_CONTENT = 64;
99
+ /** Where `m`-flagged `^` matches: string start, and after each of these. */
100
+ const LINE_TERMINATORS = '\r\n\u2028\u2029';
101
+ /** The `[^\S\r\n]` leading window of the tag above. */
102
+ function isTagLeadBlank(ch) {
103
+ return ch !== '\r' && ch !== '\n' && /\s/.test(ch);
104
+ }
105
+ /**
106
+ * Peel start-of-line `[tag]` wrappers until none is left, not just once.
107
+ *
108
+ * A single pass removes exactly ONE layer, so `[[SYSTEM]]` comes out as
109
+ * `[SYSTEM]` — a fully-formed forged tag that the caller then embeds at
110
+ * start-of-line, which is precisely what this unwrap exists to prevent. Any
111
+ * caller that gets only one pass (DingTalk 1:1 DMs: `ChannelBase` re-sanitizes
112
+ * only when `isGroup || sessionScope === 'single'`) hands the model the forge
113
+ * verbatim; two passes just move the bar to `[[[SYSTEM]]]`.
114
+ *
115
+ * ONE linear pass, not a `replace` fixpoint over the whole string. The loop
116
+ * this replaces rebuilt the entire string for every tag it peeled, and a tag
117
+ * whose content is all whitespace peels to whitespace — re-opening the
118
+ * start-of-line window — so `'[ ]'.repeat(n)` cost n x O(n): measured 16 ms at
119
+ * 10 KB, 1216 ms at 80 KB of synchronous event-loop stall. That input is
120
+ * attacker-authorable and reaches `sanitizePromptText` BEFORE any cap (chat
121
+ * record titles and summary lines, entry bodies, any group message routed
122
+ * through `ChannelBase`), so the stall is repeatable per message.
123
+ *
124
+ * Same peel, simulated in place — the technique `startOfLineSafeChatRecordField`
125
+ * uses on the DingTalk side. Each pass of that loop deleted exactly two
126
+ * characters, the leading `[` and the FIRST `]` after it (the content class
127
+ * `[^\]\r\n]` can match no other), so instead of re-copying between passes,
128
+ * mark the pairs and emit what survives. `open` walks the head of the line past
129
+ * what is already deleted and past the blanks the `[^\S\r\n]*` window absorbs;
130
+ * `close` never rewinds because every `]` it passed is already deleted, and
131
+ * `carried` remembers how much of the content window the previous pass already
132
+ * measured. Both pointers only move forward, and each pass measures at most
133
+ * `START_OF_LINE_TAG_MAX_CONTENT + 1` live characters, so the whole peel is
134
+ * linear in the input.
135
+ *
136
+ * Terminates: `open` and `lineStart` strictly increase.
137
+ */
138
+ function unwrapStartOfLineTags(text) {
139
+ if (!text.includes('['))
140
+ return text;
141
+ const deleted = new Uint8Array(text.length);
142
+ let peeled = false;
143
+ let lineStart = 0;
144
+ while (lineStart < text.length) {
145
+ // `open` is the `^[^\S\r\n]*` cursor; `close` is one past the last `]`
146
+ // consumed on this line; `carried` counts the still-live characters in
147
+ // `[open, close)` that a previous pass already measured.
148
+ let open = lineStart;
149
+ let close = lineStart;
150
+ let carried = 0;
151
+ for (;;) {
152
+ while (open < text.length) {
153
+ const ch = text[open];
154
+ if (ch === '\r' || ch === '\n')
155
+ break;
156
+ if (deleted[open] === 0 && !isTagLeadBlank(ch))
157
+ break;
158
+ if (open < close && deleted[open] === 0)
159
+ carried -= 1;
160
+ open += 1;
161
+ }
162
+ if (text[open] !== '[')
163
+ break;
164
+ // The `[` itself is not content; everything already measured between it
165
+ // and `close` is.
166
+ let content = open < close ? carried - 1 : 0;
167
+ let cursor = Math.max(close, open + 1);
168
+ while (cursor < text.length) {
169
+ const ch = text[cursor];
170
+ if (ch === ']' || ch === '\r' || ch === '\n')
171
+ break;
172
+ content += 1;
173
+ if (content > START_OF_LINE_TAG_MAX_CONTENT)
174
+ break;
175
+ cursor += 1;
176
+ }
177
+ if (text[cursor] !== ']' ||
178
+ content < 1 ||
179
+ content > START_OF_LINE_TAG_MAX_CONTENT) {
180
+ break;
181
+ }
182
+ deleted[open] = 1;
183
+ deleted[cursor] = 1;
184
+ peeled = true;
185
+ open += 1;
186
+ close = cursor + 1;
187
+ carried = content;
188
+ }
189
+ // No further `[tag]` can match on this line; resume at the next `^`.
190
+ let nextLine = open;
191
+ while (nextLine < text.length &&
192
+ !LINE_TERMINATORS.includes(text[nextLine])) {
193
+ nextLine += 1;
194
+ }
195
+ lineStart = nextLine + 1;
196
+ }
197
+ if (!peeled)
198
+ return text;
199
+ const parts = [];
200
+ let cut = 0;
201
+ for (let i = 0; i < text.length; i++) {
202
+ if (deleted[i] === 0)
203
+ continue;
204
+ if (i > cut)
205
+ parts.push(text.slice(cut, i));
206
+ cut = i + 1;
207
+ }
208
+ parts.push(text.slice(cut));
209
+ return parts.join('');
210
+ }
66
211
  export function sanitizePromptText(text) {
67
- return (text
68
- .replace(PROMPT_UNSAFE_INVISIBLES, ' ')
69
- .replace(/^([ \t]*)\[([^\]\r\n]{1,64})\](:?)/gm, '$1$2$3')
70
- // Fold ASCII C0/DEL, including CR/LF/TAB, so attacker-controlled group
71
- // text cannot create prompt lines outside the adapter's sender attribution.
72
- // eslint-disable-next-line no-control-regex
73
- .replace(/[\u0000-\u001f\u007f]/g, ' '));
212
+ const unwrapped = unwrapStartOfLineTags(text.replace(PROMPT_UNSAFE_INVISIBLES, ' '));
213
+ // Fold ASCII C0/DEL, including CR/LF/TAB, so attacker-controlled group
214
+ // text cannot create prompt lines outside the adapter's sender attribution.
215
+ // eslint-disable-next-line no-control-regex
216
+ const folded = unwrapped.replace(/[\u0000-\u001f\u007f]/g, ' ');
217
+ // Unwrap AGAIN over the folded text: the fold itself ASSEMBLES tags the first
218
+ // pass could not see. A line-leading C0/DEL that `trim()` does not strip
219
+ // (x00-x08, x0E-x1F, x7F) blocks the match and then becomes a space, and an
220
+ // interior CR/LF splits a tag past the content class (`[SYS` + LF + `TEM]:`)
221
+ // and then becomes a space that joins the halves. Folding first instead would
222
+ // be wrong: it destroys the line structure the FIRST pass needs, and after it
223
+ // only the string start is still a start-of-line prompt position — which is
224
+ // exactly what this second pass covers.
225
+ return unwrapStartOfLineTags(folded);
74
226
  }
75
227
  /**
76
228
  * Neutralize attacker-controlled text that is surfaced VERBATIM to users
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qwen-code/channel-base",
3
- "version": "0.21.15",
3
+ "version": "0.22.0-nightly.20260824.3a1f86d805",
4
4
  "description": "Base channel infrastructure for Qwen Code",
5
5
  "repository": {
6
6
  "type": "git",