@xihe-lab/tapd-core 2.0.0-rc.6 → 2.0.0-rc.7
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/registry/richtext.d.ts +8 -0
- package/dist/registry/richtext.d.ts.map +1 -1
- package/dist/registry/richtext.js +19 -4
- package/dist/registry/richtext.js.map +1 -1
- package/dist/richtext/pipeline.d.ts +2 -1
- package/dist/richtext/pipeline.d.ts.map +1 -1
- package/dist/richtext/pipeline.js +2 -2
- package/dist/richtext/pipeline.js.map +1 -1
- package/package.json +2 -2
|
@@ -10,6 +10,14 @@ import type { MdToHtmlOptions } from '../richtext/index.js';
|
|
|
10
10
|
export declare const RAW_HTML_FIELD: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
11
11
|
export declare const READ_RICHTEXT_FIELDS: ReadonlySet<string>;
|
|
12
12
|
export declare function isRichtextAutoEnabled(): boolean;
|
|
13
|
+
/** 读侧无损投影开关(Wave 3):默认开;TAPD_RICHTEXT_LOSSLESS=0 回退有损(向后兼容)。 */
|
|
14
|
+
export declare function isLosslessReadEnabled(): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* HTML 旁路启发式(bug 0111 修正):判定前先剥除 fence/行内代码与白名单冻结标签对——
|
|
17
|
+
* 前者是 md 语法本体(反引号内的标签示例),后者是 htmlToMdLossless 读投影的合法回放
|
|
18
|
+
* 单元;二者都不应令整篇跳过 md→html 转换(曾致含标签示例的 md 裸文本落库)。
|
|
19
|
+
* 其余 HTML 标签(真块级/粘贴的富文本)仍触发旁路原样透传。
|
|
20
|
+
*/
|
|
13
21
|
export declare function looksLikeHtml(value: string): boolean;
|
|
14
22
|
export declare function transformWriteArgs(toolName: string, args: Record<string, unknown>, mdOptions?: MdToHtmlOptions): Record<string, unknown>;
|
|
15
23
|
export declare function transformReadData(data: unknown): unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"richtext.d.ts","sourceRoot":"","sources":["../../src/registry/richtext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,2CAE1B,CAAC;AAGF,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAA4B,CAAC;AAElF,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"richtext.d.ts","sourceRoot":"","sources":["../../src/registry/richtext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,2CAE1B,CAAC;AAGF,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAA4B,CAAC;AAElF,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED,gEAAgE;AAChE,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAKD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGpD;AAID,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,CAAC,EAAE,eAAe,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwBzB;AAKD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAGxD"}
|
|
@@ -2,7 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import { DUAL_WRITE_TOOLS, WRITE_RICHTEXT_FIELDS_BY_TOOL } from './richtext-manifests.generated.js';
|
|
3
3
|
// rc.2 P3 接线(1139814312001001548):写/读管道与 md_to_html/html_to_md 工具共用同一条
|
|
4
4
|
// 保真转换管道(richtext/pipeline.ts,token/规则级 @ + 附件锚点接线)——FSD §3.7。
|
|
5
|
-
import { htmlToMd, mdToHtml } from '../richtext/pipeline.js';
|
|
5
|
+
import { htmlToMd, htmlToMdLossless, mdToHtml, stripKeepInlineHtml } from '../richtext/pipeline.js';
|
|
6
6
|
const BLOCK_HTML_RE = /<(p|div|ul|ol|li|table|thead|tbody|tr|td|th|strong|em|h[1-6]|blockquote|pre|br|a|span|code|img|hr|s|del|u|font|b|i)\b[^>]*>/i;
|
|
7
7
|
/**
|
|
8
8
|
* raw_html 直发通道(P3,FSD §3.5,需求 1139814312001001548)。
|
|
@@ -17,8 +17,21 @@ export const READ_RICHTEXT_FIELDS = new Set(['description']);
|
|
|
17
17
|
export function isRichtextAutoEnabled() {
|
|
18
18
|
return process.env.TAPD_RICHTEXT_AUTO !== '0';
|
|
19
19
|
}
|
|
20
|
+
/** 读侧无损投影开关(Wave 3):默认开;TAPD_RICHTEXT_LOSSLESS=0 回退有损(向后兼容)。 */
|
|
21
|
+
export function isLosslessReadEnabled() {
|
|
22
|
+
return process.env.TAPD_RICHTEXT_LOSSLESS !== '0';
|
|
23
|
+
}
|
|
24
|
+
const FENCE_RE = /```[\s\S]*?```/g;
|
|
25
|
+
const CODE_SPAN_RE = /`[^`\n]*`/g;
|
|
26
|
+
/**
|
|
27
|
+
* HTML 旁路启发式(bug 0111 修正):判定前先剥除 fence/行内代码与白名单冻结标签对——
|
|
28
|
+
* 前者是 md 语法本体(反引号内的标签示例),后者是 htmlToMdLossless 读投影的合法回放
|
|
29
|
+
* 单元;二者都不应令整篇跳过 md→html 转换(曾致含标签示例的 md 裸文本落库)。
|
|
30
|
+
* 其余 HTML 标签(真块级/粘贴的富文本)仍触发旁路原样透传。
|
|
31
|
+
*/
|
|
20
32
|
export function looksLikeHtml(value) {
|
|
21
|
-
|
|
33
|
+
const stripped = stripKeepInlineHtml(value.replace(FENCE_RE, '').replace(CODE_SPAN_RE, ''));
|
|
34
|
+
return BLOCK_HTML_RE.test(stripped);
|
|
22
35
|
}
|
|
23
36
|
// 写侧三层路由:raw_html 旁路 -> wiki 双写 -> 启发式双模 -> 关闭时全原样
|
|
24
37
|
// mdOptions:mention 守卫谓词(bug 0103,registry 执行期经 primeMentionFilter 预热注入)
|
|
@@ -52,7 +65,9 @@ export function transformWriteArgs(toolName, args, mdOptions) {
|
|
|
52
65
|
}
|
|
53
66
|
return out;
|
|
54
67
|
}
|
|
55
|
-
// 读侧:递归扫描富文本字段,HTML 转 md
|
|
68
|
+
// 读侧:递归扫描富文本字段,HTML 转 md;无标签特征的值原样。
|
|
69
|
+
// Wave 3 起默认无损投影(GFM 不可表达标签行内 HTML 保留,读→改→写闭环无损),
|
|
70
|
+
// TAPD_RICHTEXT_LOSSLESS=0 回退有损。
|
|
56
71
|
export function transformReadData(data) {
|
|
57
72
|
if (!isRichtextAutoEnabled())
|
|
58
73
|
return data;
|
|
@@ -65,7 +80,7 @@ function walk(node) {
|
|
|
65
80
|
const out = {};
|
|
66
81
|
for (const [key, value] of Object.entries(node)) {
|
|
67
82
|
if (READ_RICHTEXT_FIELDS.has(key) && typeof value === 'string' && looksLikeHtml(value)) {
|
|
68
|
-
out[key] = htmlToMd(value);
|
|
83
|
+
out[key] = isLosslessReadEnabled() ? htmlToMdLossless(value) : htmlToMd(value);
|
|
69
84
|
}
|
|
70
85
|
else {
|
|
71
86
|
out[key] = walk(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"richtext.js","sourceRoot":"","sources":["../../src/registry/richtext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AACpG,uEAAuE;AACvE,+DAA+D;AAC/D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"richtext.js","sourceRoot":"","sources":["../../src/registry/richtext.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { mdToHtml, htmlToMd } from '@xihe-lab/tapd-markdown';
|
|
1
|
+
export { mdToHtml, htmlToMd, htmlToMdLossless, sanitizeTapdHtml, stripKeepInlineHtml, } from '@xihe-lab/tapd-markdown';
|
|
2
|
+
export type { MdToHtmlOptions } from '@xihe-lab/tapd-markdown';
|
|
2
3
|
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/richtext/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/richtext/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
//
|
|
2
|
-
export { mdToHtml, htmlToMd } from '@xihe-lab/tapd-markdown';
|
|
1
|
+
// 兼容垫片:转换引擎已迁出为 @xihe-lab/tapd-markdown(Wave 3 起含无损读与冻结回放)。
|
|
2
|
+
export { mdToHtml, htmlToMd, htmlToMdLossless, sanitizeTapdHtml, stripKeepInlineHtml, } from '@xihe-lab/tapd-markdown';
|
|
3
3
|
//# sourceMappingURL=pipeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/richtext/pipeline.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/richtext/pipeline.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xihe-lab/tapd-core",
|
|
3
|
-
"version": "2.0.0-rc.
|
|
3
|
+
"version": "2.0.0-rc.7",
|
|
4
4
|
"description": "Shared kernel for TAPD tools: tool definitions, TapdClient and registry, shared by CLI and MCP entries",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@opentapd/tapd-node-sdk": "^1.67.0",
|
|
42
|
-
"@xihe-lab/tapd-markdown": "1.0.0-rc.
|
|
42
|
+
"@xihe-lab/tapd-markdown": "1.0.0-rc.4",
|
|
43
43
|
"zod": "^3.25.76",
|
|
44
44
|
"zod-to-json-schema": "^3.25.2"
|
|
45
45
|
},
|