@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 +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/sanitize.d.ts +11 -0
- package/dist/sanitize.d.ts.map +1 -1
- package/dist/sanitize.js +159 -7
- package/dist/sanitize.js.map +1 -1
- package/package.json +1 -1
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/sanitize.d.ts
CHANGED
|
@@ -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
|
package/dist/sanitize.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
package/dist/sanitize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,wBAAwB,GACnC,4DAA4D,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,GAAW;IACzD,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,+EAA+E;IAC/E,+EAA+E;IAC/E,+EAA+E;IAC/E,MAAM,OAAO,GAAG,IAAI;SACjB,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;QACvC,4CAA4C;SAC3C,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;SACtC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC9B,2EAA2E;IAC3E,2CAA2C;IAC3C,OAAO,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;AAC7D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,MAAc;IAC7D,MAAM,OAAO,GAAG,IAAI;SACjB,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;QACvC,4CAA4C;SAC3C,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;SACtC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC3B,8EAA8E;IAC9E,4EAA4E;IAC5E,wEAAwE;IACxE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/E,CAAC;AAED,MAAM,
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"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"}
|