@jungjaehoon/mama-os 0.52.1 → 0.52.2
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/agent/code-act/constants.d.ts.map +1 -1
- package/dist/agent/code-act/constants.js +4 -2
- package/dist/agent/code-act/constants.js.map +1 -1
- package/dist/agent/code-act/tool-catalog.d.ts.map +1 -1
- package/dist/agent/code-act/tool-catalog.js +48 -22
- package/dist/agent/code-act/tool-catalog.js.map +1 -1
- package/dist/gateways/telegram-format.d.ts +21 -4
- package/dist/gateways/telegram-format.d.ts.map +1 -1
- package/dist/gateways/telegram-format.js +150 -8
- package/dist/gateways/telegram-format.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/agent/code-act/constants.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1D,eAAO,MAAM,wBAAwB,QAM6B,CAAC;AAEnE,eAAO,MAAM,uBAAuB,6DAA6D,CAAC;AAElG,eAAO,MAAM,8BAA8B,sSAC0D,CAAC;AAEtG,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,GAChC,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/agent/code-act/constants.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1D,eAAO,MAAM,wBAAwB,QAM6B,CAAC;AAEnE,eAAO,MAAM,uBAAuB,6DAA6D,CAAC;AAElG,eAAO,MAAM,8BAA8B,sSAC0D,CAAC;AAEtG,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,GAChC,MAAM,CA6CR;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,QAAkC,CAAC;AAErE,eAAO,MAAM,eAAe,aAAa,CAAC"}
|
|
@@ -38,8 +38,10 @@ code_act({ code: "${exports.CODE_ACT_SCRIPT_EXAMPLE}" })
|
|
|
38
38
|
|
|
39
39
|
### Progressive gateway discovery
|
|
40
40
|
|
|
41
|
-
The catalog is the exact gateway policy for this run. \`tool_search\`
|
|
42
|
-
|
|
41
|
+
The catalog is the exact gateway policy for this run. \`tool_search\` ranks by relevance and
|
|
42
|
+
returns the 6 best matches by default; every word is a hint, not a requirement, so a query
|
|
43
|
+
matching only part of a tool's name or description still returns it. \`limit\` must be an
|
|
44
|
+
integer from 1 to 12. Continue with
|
|
43
45
|
\`nextCursor\` until it is null when you need complete
|
|
44
46
|
coverage. \`tool_describe\` returns complete contracts for 1 to 4 selected names without
|
|
45
47
|
slicing declarations. A gateway function you already know may be called directly; discovery
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/agent/code-act/constants.ts"],"names":[],"mappings":";;;AAeA,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/agent/code-act/constants.ts"],"names":[],"mappings":";;;AAeA,wDAgDC;AA7DY,QAAA,wBAAwB,GACnC,mFAAmF;IACnF,sFAAsF;IACtF,mFAAmF;IACnF,4FAA4F;IAC5F,wFAAwF;IACxF,gEAAgE,CAAC;AAEtD,QAAA,uBAAuB,GAAG,0DAA0D,CAAC;AAErF,QAAA,8BAA8B,GAAG;qGACuD,CAAC;AAEtG,SAAgB,sBAAsB,CACpC,OAAuB,EACvB,aAAiC;IAEjC,MAAM,OAAO,GAAG,OAAO,KAAK,OAAO,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,KAAK,OAAO,CAAC;IACpC,MAAM,qBAAqB,GAAG,OAAO;QACnC,CAAC,CAAC;;;oFAG8E;QAChF,CAAC,CAAC;;EAEJ,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,kEAAkE,CAAC;IAE/F,OAAO;;EAEP,qBAAqB;;;;IAInB,gCAAwB;;;;;oBAKR,+BAAuB;;;;;;;;;;;;;;;;;;;EAmBzC,sCAA8B;;CAE/B,CAAC;AACF,CAAC;AAED;;GAEG;AACU,QAAA,qBAAqB,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAExD,QAAA,eAAe,GAAG,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-catalog.d.ts","sourceRoot":"","sources":["../../../src/agent/code-act/tool-catalog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAUjD,UAAU,iBAAiB;IACzB,QAAQ,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAsBD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;QAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;KACzC,CAAC,CAAC;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,wEAAwE;IACxE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,EAAE,iBAAiB;IAUrC,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,gBAAgB;
|
|
1
|
+
{"version":3,"file":"tool-catalog.d.ts","sourceRoot":"","sources":["../../../src/agent/code-act/tool-catalog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAUjD,UAAU,iBAAiB;IACzB,QAAQ,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAsBD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;QAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;KACzC,CAAC,CAAC;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,wEAAwE;IACxE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,EAAE,iBAAiB;IAUrC,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,gBAAgB;IA2C3C,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,kBAAkB;IAiC/C,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,YAAY;CA0BrB"}
|
|
@@ -6,8 +6,8 @@ const type_definition_generator_js_1 = require("./type-definition-generator.js")
|
|
|
6
6
|
const TOOL_SEARCH_DEFAULT_LIMIT = 6;
|
|
7
7
|
const TOOL_SEARCH_MAX_LIMIT = 12;
|
|
8
8
|
const TOOL_DESCRIBE_MAX_NAMES = 4;
|
|
9
|
-
const CURSOR_VERSION =
|
|
10
|
-
const CURSOR_ORDER = 'name:asc';
|
|
9
|
+
const CURSOR_VERSION = 2;
|
|
10
|
+
const CURSOR_ORDER = 'score:desc,all-tokens:first,name:asc';
|
|
11
11
|
const CURSOR_ERROR = 'Invalid or stale tool catalog cursor.';
|
|
12
12
|
class ProjectedToolCatalog {
|
|
13
13
|
definitions;
|
|
@@ -24,27 +24,22 @@ class ProjectedToolCatalog {
|
|
|
24
24
|
const category = optionalNormalizedString(input.category, 'tool_search category');
|
|
25
25
|
const limit = searchLimit(input.limit);
|
|
26
26
|
const offset = input.cursor === undefined ? 0 : this.decodeCursor(input.cursor, query, category);
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
const tokens = query
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
if (tokens.length === 0) {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
const haystack = `${definition.name}\n${definition.description}\n${definition.category}`.toLowerCase();
|
|
39
|
-
return tokens.every((token) => haystack.includes(token));
|
|
40
|
-
});
|
|
41
|
-
// Deterministic rank: exact name match first, then catalog (name:asc) order.
|
|
27
|
+
// Rank, do not filter-AND. Requiring every token silently returned [] for
|
|
28
|
+
// queries like "task update create" while task_update/task_create were both
|
|
29
|
+
// in the catalog, and the agent concluded no task ledger tool existed.
|
|
30
|
+
const tokens = queryTokens(query);
|
|
31
|
+
const scoped = category
|
|
32
|
+
? this.definitions.filter((definition) => definition.category.toLowerCase() === category)
|
|
33
|
+
: this.definitions;
|
|
42
34
|
const matches = tokens.length === 0
|
|
43
|
-
?
|
|
44
|
-
:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
35
|
+
? scoped
|
|
36
|
+
: scoped
|
|
37
|
+
.map((definition) => scoreDefinition(definition, tokens))
|
|
38
|
+
.filter((scored) => scored.score > 0)
|
|
39
|
+
.sort((left, right) => right.score - left.score ||
|
|
40
|
+
Number(right.allTokensMatched) - Number(left.allTokensMatched) ||
|
|
41
|
+
compareNames(left.definition.name, right.definition.name))
|
|
42
|
+
.map((scored) => scored.definition);
|
|
48
43
|
if (offset > matches.length) {
|
|
49
44
|
throw new Error(CURSOR_ERROR);
|
|
50
45
|
}
|
|
@@ -156,4 +151,35 @@ function searchLimit(value) {
|
|
|
156
151
|
function compareNames(left, right) {
|
|
157
152
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
158
153
|
}
|
|
154
|
+
/** Whitespace split, then `_`/`-` split, so "task_update" and "task update" are one query. */
|
|
155
|
+
function queryTokens(query) {
|
|
156
|
+
return query
|
|
157
|
+
.split(/\s+/)
|
|
158
|
+
.flatMap((token) => token.split(/[_-]+/))
|
|
159
|
+
.filter((token) => token.length > 0);
|
|
160
|
+
}
|
|
161
|
+
function scoreDefinition(definition, tokens) {
|
|
162
|
+
const name = definition.name.toLowerCase();
|
|
163
|
+
const nameSegments = new Set(name.split(/[_-]+/).filter((segment) => segment.length > 0));
|
|
164
|
+
const prose = `${definition.description}\n${definition.category}`.toLowerCase();
|
|
165
|
+
let score = 0;
|
|
166
|
+
let allTokensMatched = true;
|
|
167
|
+
for (const token of tokens) {
|
|
168
|
+
let tokenScore = 0;
|
|
169
|
+
if (nameSegments.has(token)) {
|
|
170
|
+
tokenScore += 3;
|
|
171
|
+
}
|
|
172
|
+
if (name.includes(token)) {
|
|
173
|
+
tokenScore += 2;
|
|
174
|
+
}
|
|
175
|
+
if (prose.includes(token)) {
|
|
176
|
+
tokenScore += 1;
|
|
177
|
+
}
|
|
178
|
+
if (tokenScore === 0) {
|
|
179
|
+
allTokensMatched = false;
|
|
180
|
+
}
|
|
181
|
+
score += tokenScore;
|
|
182
|
+
}
|
|
183
|
+
return { definition, score, allTokensMatched };
|
|
184
|
+
}
|
|
159
185
|
//# sourceMappingURL=tool-catalog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-catalog.js","sourceRoot":"","sources":["../../../src/agent/code-act/tool-catalog.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAGzC,iFAAyE;AAEzE,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"tool-catalog.js","sourceRoot":"","sources":["../../../src/agent/code-act/tool-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,10 +11,17 @@
|
|
|
11
11
|
* boundary can fall inside a tag pair. Offsets survive splitting; raw HTML does
|
|
12
12
|
* not.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
14
|
+
* Degradation is per span, not per message. `sanitizeTelegramHtml` rewrites the
|
|
15
|
+
* input into markup the parser can always read: a tag outside the subset, an
|
|
16
|
+
* attribute we do not accept, an orphan closing tag, or a nesting the subset
|
|
17
|
+
* forbids is escaped to literal text on its own, while every well-formed tag
|
|
18
|
+
* around it still renders. A tag left open at the end is closed for the author
|
|
19
|
+
* when it encloses real words, and escaped when it reads as a mention of the tag
|
|
20
|
+
* itself (`write <b>...</b>`). One stray `<b>` therefore no longer makes every
|
|
21
|
+
* tag in the message visible.
|
|
22
|
+
*
|
|
23
|
+
* Plain text is still always deliverable and never mangled, and a non-empty
|
|
24
|
+
* answer never becomes an empty message.
|
|
18
25
|
*
|
|
19
26
|
* Offsets and lengths are counted in UTF-16 code units, which is what Telegram
|
|
20
27
|
* counts for both entity spans and the 4096 message limit.
|
|
@@ -36,6 +43,16 @@ export declare const TELEGRAM_MAX_MESSAGE_LENGTH = 4096;
|
|
|
36
43
|
* Loaded once with the owner session, regardless of which input starts it.
|
|
37
44
|
*/
|
|
38
45
|
export declare const TELEGRAM_FORMAT_GUIDE: string;
|
|
46
|
+
/**
|
|
47
|
+
* Rewrite one answer into markup `parseTelegramHtml` can always read.
|
|
48
|
+
*
|
|
49
|
+
* Every tag is judged on its own: the ones the subset accepts are left alone,
|
|
50
|
+
* the ones it does not are escaped to literal text, and a tag still open at the
|
|
51
|
+
* end is closed rather than allowed to poison the message. Nothing here loosens
|
|
52
|
+
* the subset -- an escaped tag reaches Telegram as characters, never as an
|
|
53
|
+
* entity, and no attribute or protocol the parser rejects becomes acceptable.
|
|
54
|
+
*/
|
|
55
|
+
export declare function sanitizeTelegramHtml(input: string): string;
|
|
39
56
|
/**
|
|
40
57
|
* Make a mid-stream snapshot readable by the parser above.
|
|
41
58
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram-format.d.ts","sourceRoot":"","sources":["../../src/gateways/telegram-format.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"telegram-format.d.ts","sourceRoot":"","sources":["../../src/gateways/telegram-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,SAAS,CAAC;AAEzD,+DAA+D;AAC/D,eAAO,MAAM,2BAA2B,OAAO,CAAC;AA+BhD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,QAetB,CAAC;AA4Hb;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA2E1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA4B9D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAoC,EAC/C,WAAW,GAAE,mBAA+B,GAC3C,qBAAqB,EAAE,CAuDzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMjE"}
|
|
@@ -12,16 +12,24 @@
|
|
|
12
12
|
* boundary can fall inside a tag pair. Offsets survive splitting; raw HTML does
|
|
13
13
|
* not.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* Degradation is per span, not per message. `sanitizeTelegramHtml` rewrites the
|
|
16
|
+
* input into markup the parser can always read: a tag outside the subset, an
|
|
17
|
+
* attribute we do not accept, an orphan closing tag, or a nesting the subset
|
|
18
|
+
* forbids is escaped to literal text on its own, while every well-formed tag
|
|
19
|
+
* around it still renders. A tag left open at the end is closed for the author
|
|
20
|
+
* when it encloses real words, and escaped when it reads as a mention of the tag
|
|
21
|
+
* itself (`write <b>...</b>`). One stray `<b>` therefore no longer makes every
|
|
22
|
+
* tag in the message visible.
|
|
23
|
+
*
|
|
24
|
+
* Plain text is still always deliverable and never mangled, and a non-empty
|
|
25
|
+
* answer never becomes an empty message.
|
|
19
26
|
*
|
|
20
27
|
* Offsets and lengths are counted in UTF-16 code units, which is what Telegram
|
|
21
28
|
* counts for both entity spans and the 4096 message limit.
|
|
22
29
|
*/
|
|
23
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
31
|
exports.TELEGRAM_FORMAT_GUIDE = exports.TELEGRAM_MAX_MESSAGE_LENGTH = void 0;
|
|
32
|
+
exports.sanitizeTelegramHtml = sanitizeTelegramHtml;
|
|
25
33
|
exports.closeOpenTelegramHtml = closeOpenTelegramHtml;
|
|
26
34
|
exports.formatTelegramMessage = formatTelegramMessage;
|
|
27
35
|
exports.isTelegramEntityRejection = isTelegramEntityRejection;
|
|
@@ -88,9 +96,10 @@ function decodeEntities(text) {
|
|
|
88
96
|
});
|
|
89
97
|
}
|
|
90
98
|
/**
|
|
91
|
-
* Read the HTML subset.
|
|
92
|
-
* anything outside the subset appears
|
|
93
|
-
*
|
|
99
|
+
* Read the HTML subset. Still returns the input verbatim with no entities if
|
|
100
|
+
* anything outside the subset appears, as the last line of defence; callers
|
|
101
|
+
* reach it through `sanitizeTelegramHtml`, which removes those cases span by
|
|
102
|
+
* span so a whole-message fallback is no longer the normal outcome.
|
|
94
103
|
*/
|
|
95
104
|
function parseTelegramHtml(text) {
|
|
96
105
|
const literal = { text, entities: [] };
|
|
@@ -151,6 +160,139 @@ function parseTelegramHtml(text) {
|
|
|
151
160
|
entities: entities.sort((a, b) => a.offset - b.offset || b.length - a.length),
|
|
152
161
|
};
|
|
153
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Content that reads as a mention of a tag rather than as styled words.
|
|
165
|
+
*
|
|
166
|
+
* Emphasis in real output opens on a word. A run that opens on a comma, a
|
|
167
|
+
* closing bracket or a space, or that carries no letter or digit at all, is the
|
|
168
|
+
* author talking ABOUT the tag -- `write <b>...</b>`, `allowed: <b> <i>` -- and
|
|
169
|
+
* must survive as text.
|
|
170
|
+
*/
|
|
171
|
+
const MENTION_LEAD = /^[\s,.:;!?/>)\]}\u3001\u3002\uFF0C\uFF09\uFF1A\uFF1B\uFF01\uFF1F]/;
|
|
172
|
+
const HAS_WORD = /[\p{L}\p{N}]/u;
|
|
173
|
+
function escapeTagSource(raw) {
|
|
174
|
+
// Escape & first: the escaped tag is decoded as text later, so an entity inside a
|
|
175
|
+
// rejected tag (e.g. a URL with &) must stay literal instead of being re-decoded.
|
|
176
|
+
return raw.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
177
|
+
}
|
|
178
|
+
/** The opening-tag half of the subset check, shared by the parser and the sanitizer. */
|
|
179
|
+
function readOpeningTag(raw) {
|
|
180
|
+
const opening = OPENING_TAG.exec(raw);
|
|
181
|
+
if (!opening)
|
|
182
|
+
return null;
|
|
183
|
+
const tag = opening[1].toLowerCase();
|
|
184
|
+
const type = TAG_TYPES[tag];
|
|
185
|
+
if (!type)
|
|
186
|
+
return null;
|
|
187
|
+
if (tag === 'a') {
|
|
188
|
+
const href = /^\s+href="([^"]+)"\s*$/.exec(opening[2]);
|
|
189
|
+
if (!href)
|
|
190
|
+
return null;
|
|
191
|
+
try {
|
|
192
|
+
if (!LINK_PROTOCOLS.includes(new URL(decodeEntities(href[1])).protocol))
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else if (opening[2].trim()) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
return { tag, type };
|
|
203
|
+
}
|
|
204
|
+
function spanContent(input, from, to) {
|
|
205
|
+
return decodeEntities(input.slice(from, to).replace(TAG_SCAN, ''));
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Rewrite one answer into markup `parseTelegramHtml` can always read.
|
|
209
|
+
*
|
|
210
|
+
* Every tag is judged on its own: the ones the subset accepts are left alone,
|
|
211
|
+
* the ones it does not are escaped to literal text, and a tag still open at the
|
|
212
|
+
* end is closed rather than allowed to poison the message. Nothing here loosens
|
|
213
|
+
* the subset -- an escaped tag reaches Telegram as characters, never as an
|
|
214
|
+
* entity, and no attribute or protocol the parser rejects becomes acceptable.
|
|
215
|
+
*/
|
|
216
|
+
function sanitizeTelegramHtml(input) {
|
|
217
|
+
const spans = [];
|
|
218
|
+
const open = [];
|
|
219
|
+
for (const match of input.matchAll(TAG_SCAN)) {
|
|
220
|
+
const at = match.index ?? 0;
|
|
221
|
+
const raw = match[0];
|
|
222
|
+
const closing = CLOSING_TAG.exec(raw);
|
|
223
|
+
if (closing) {
|
|
224
|
+
const tag = closing[1].toLowerCase();
|
|
225
|
+
const index = spans.length;
|
|
226
|
+
const top = open.length ? spans[open[open.length - 1]] : undefined;
|
|
227
|
+
// An orphan or out-of-order closing tag is escaped on its own; the tag it
|
|
228
|
+
// fails to close is then judged as any other still-open tag.
|
|
229
|
+
if (!top || top.tag !== tag) {
|
|
230
|
+
spans.push({ at, end: at + raw.length, raw, tag, type: '', escaped: true });
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
const openIndex = open.pop();
|
|
234
|
+
top.closeAt = at;
|
|
235
|
+
top.partner = index;
|
|
236
|
+
spans.push({ at, end: at + raw.length, raw, tag, type: top.type, partner: openIndex, escaped: false });
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
const read = readOpeningTag(raw);
|
|
240
|
+
if (!read) {
|
|
241
|
+
spans.push({ at, end: at + raw.length, raw, tag: '', type: '', escaped: true });
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
const stack = open.map((index) => spans[index]);
|
|
245
|
+
const insideVerbatim = stack.some((entry) => ['code', 'pre'].includes(entry.type));
|
|
246
|
+
const verbatimInsideAnything = ['code', 'pre'].includes(read.type) && stack.length > 0;
|
|
247
|
+
const repeatedSelfNesting = ['text_link', 'blockquote'].includes(read.type) &&
|
|
248
|
+
stack.some((entry) => entry.type === read.type);
|
|
249
|
+
// Forbidden nesting escapes the INNER offending tag only: the span that
|
|
250
|
+
// breaks the rule becomes text, the span that contains it still renders.
|
|
251
|
+
if (insideVerbatim || verbatimInsideAnything || repeatedSelfNesting) {
|
|
252
|
+
spans.push({ at, end: at + raw.length, raw, tag: read.tag, type: read.type, escaped: true });
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
open.push(spans.length);
|
|
256
|
+
spans.push({ at, end: at + raw.length, raw, tag: read.tag, type: read.type, escaped: false });
|
|
257
|
+
}
|
|
258
|
+
const stillOpen = new Set(open.map((index) => spans[index]));
|
|
259
|
+
const autoClose = [];
|
|
260
|
+
for (const span of spans) {
|
|
261
|
+
if (span.escaped || span.type === '' || span.raw.startsWith('</'))
|
|
262
|
+
continue;
|
|
263
|
+
if (stillOpen.has(span)) {
|
|
264
|
+
const content = spanContent(input, span.end, input.length);
|
|
265
|
+
if (!HAS_WORD.test(content) || MENTION_LEAD.test(content)) {
|
|
266
|
+
span.escaped = true;
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
autoClose.push(span.tag);
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
const content = spanContent(input, span.end, span.closeAt ?? span.end);
|
|
273
|
+
// A closed pair around no word at all is a citation, not styling.
|
|
274
|
+
if (!HAS_WORD.test(content)) {
|
|
275
|
+
span.escaped = true;
|
|
276
|
+
if (span.partner !== undefined)
|
|
277
|
+
spans[span.partner].escaped = true;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (!spans.some((span) => span.escaped) && !autoClose.length)
|
|
281
|
+
return input;
|
|
282
|
+
let out = '';
|
|
283
|
+
let cursor = 0;
|
|
284
|
+
for (const span of spans) {
|
|
285
|
+
if (!span.escaped)
|
|
286
|
+
continue;
|
|
287
|
+
out += input.slice(cursor, span.at) + escapeTagSource(span.raw);
|
|
288
|
+
cursor = span.end;
|
|
289
|
+
}
|
|
290
|
+
out += input.slice(cursor);
|
|
291
|
+
// Innermost first, the same order `closeOpenTelegramHtml` uses for snapshots.
|
|
292
|
+
for (let index = autoClose.length - 1; index >= 0; index -= 1)
|
|
293
|
+
out += `</${autoClose[index]}>`;
|
|
294
|
+
return out;
|
|
295
|
+
}
|
|
154
296
|
/**
|
|
155
297
|
* Make a mid-stream snapshot readable by the parser above.
|
|
156
298
|
*
|
|
@@ -211,7 +353,7 @@ function formatTelegramMessage(input, maxLength = exports.TELEGRAM_MAX_MESSAGE_L
|
|
|
211
353
|
}
|
|
212
354
|
return chunks;
|
|
213
355
|
}
|
|
214
|
-
const parsed = parseTelegramHtml(input);
|
|
356
|
+
const parsed = parseTelegramHtml(sanitizeTelegramHtml(input));
|
|
215
357
|
// A parse can succeed and still leave nothing to send: `<b></b>` is readable
|
|
216
358
|
// markup around no text. Zero chunks would let the transport report the
|
|
217
359
|
// answer delivered without one API call and leave the placeholder standing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram-format.js","sourceRoot":"","sources":["../../src/gateways/telegram-format.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"telegram-format.js","sourceRoot":"","sources":["../../src/gateways/telegram-format.ts"],"names":[],"mappings":"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"}
|