dsh-data-domain-knowledge 0.1.0-alpha.2 → 0.1.0-alpha.4

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.
Files changed (180) hide show
  1. package/README.md +147 -19
  2. package/cordis.patch.yml +25 -10
  3. package/lib/client.js +6400 -3326
  4. package/lib/doc-page.js +7761 -0
  5. package/lib/types/convert/host.d.ts.map +1 -1
  6. package/lib/types/convert/host.js +63 -11
  7. package/lib/types/convert/host.js.map +1 -1
  8. package/lib/types/convert/ingest.d.ts +7 -4
  9. package/lib/types/convert/ingest.d.ts.map +1 -1
  10. package/lib/types/convert/ingest.js +52 -14
  11. package/lib/types/convert/ingest.js.map +1 -1
  12. package/lib/types/convert/types.d.ts +2 -2
  13. package/lib/types/convert/types.d.ts.map +1 -1
  14. package/lib/types/convert/types.js +2 -2
  15. package/lib/types/convert/types.js.map +1 -1
  16. package/lib/types/diagnosis/cards.d.ts +8 -7
  17. package/lib/types/diagnosis/cards.d.ts.map +1 -1
  18. package/lib/types/diagnosis/cards.js +119 -49
  19. package/lib/types/diagnosis/cards.js.map +1 -1
  20. package/lib/types/diagnosis/run.d.ts +57 -0
  21. package/lib/types/diagnosis/run.d.ts.map +1 -0
  22. package/lib/types/diagnosis/run.js +245 -0
  23. package/lib/types/diagnosis/run.js.map +1 -0
  24. package/lib/types/diagnosis/schema.d.ts +25 -2
  25. package/lib/types/diagnosis/schema.d.ts.map +1 -1
  26. package/lib/types/diagnosis/schema.js +64 -25
  27. package/lib/types/diagnosis/schema.js.map +1 -1
  28. package/lib/types/diagnosis/seed-source.d.ts +17 -2
  29. package/lib/types/diagnosis/seed-source.d.ts.map +1 -1
  30. package/lib/types/diagnosis/seed-source.js +19 -2
  31. package/lib/types/diagnosis/seed-source.js.map +1 -1
  32. package/lib/types/diagnosis/seed.d.ts +32 -42
  33. package/lib/types/diagnosis/seed.d.ts.map +1 -1
  34. package/lib/types/diagnosis/seed.js +187 -51
  35. package/lib/types/diagnosis/seed.js.map +1 -1
  36. package/lib/types/diagnosis/store.d.ts +95 -25
  37. package/lib/types/diagnosis/store.d.ts.map +1 -1
  38. package/lib/types/diagnosis/store.js +297 -166
  39. package/lib/types/diagnosis/store.js.map +1 -1
  40. package/lib/types/diagnosis/types.d.ts +168 -16
  41. package/lib/types/diagnosis/types.d.ts.map +1 -1
  42. package/lib/types/diagnosis/types.js +1 -1
  43. package/lib/types/diagnosis/types.js.map +1 -1
  44. package/lib/types/document-page.d.ts +39 -0
  45. package/lib/types/document-page.d.ts.map +1 -0
  46. package/lib/types/document-page.js +43 -0
  47. package/lib/types/document-page.js.map +1 -0
  48. package/lib/types/extract-model.d.ts +67 -27
  49. package/lib/types/extract-model.d.ts.map +1 -1
  50. package/lib/types/extract-model.js +225 -97
  51. package/lib/types/extract-model.js.map +1 -1
  52. package/lib/types/extract.d.ts +16 -0
  53. package/lib/types/extract.d.ts.map +1 -1
  54. package/lib/types/extract.js +19 -2
  55. package/lib/types/extract.js.map +1 -1
  56. package/lib/types/fs-atomic.d.ts +11 -0
  57. package/lib/types/fs-atomic.d.ts.map +1 -0
  58. package/lib/types/fs-atomic.js +41 -0
  59. package/lib/types/fs-atomic.js.map +1 -0
  60. package/lib/types/index.d.ts.map +1 -1
  61. package/lib/types/index.js +466 -63
  62. package/lib/types/index.js.map +1 -1
  63. package/lib/types/intent/types.js +1 -1
  64. package/lib/types/intent/types.js.map +1 -1
  65. package/lib/types/knowledge-bases.d.ts +23 -12
  66. package/lib/types/knowledge-bases.d.ts.map +1 -1
  67. package/lib/types/knowledge-bases.js +37 -44
  68. package/lib/types/knowledge-bases.js.map +1 -1
  69. package/lib/types/layout.d.ts +3 -3
  70. package/lib/types/layout.d.ts.map +1 -1
  71. package/lib/types/layout.js +4 -4
  72. package/lib/types/layout.js.map +1 -1
  73. package/lib/types/migrate.d.ts +1 -1
  74. package/lib/types/migrate.js +2 -2
  75. package/lib/types/migrate.js.map +1 -1
  76. package/lib/types/model-text.d.ts +99 -0
  77. package/lib/types/model-text.d.ts.map +1 -0
  78. package/lib/types/model-text.js +103 -0
  79. package/lib/types/model-text.js.map +1 -0
  80. package/lib/types/present.d.ts +239 -0
  81. package/lib/types/present.d.ts.map +1 -0
  82. package/lib/types/present.js +255 -0
  83. package/lib/types/present.js.map +1 -0
  84. package/lib/types/recall-rank.d.ts +37 -0
  85. package/lib/types/recall-rank.d.ts.map +1 -1
  86. package/lib/types/recall-rank.js +41 -1
  87. package/lib/types/recall-rank.js.map +1 -1
  88. package/lib/types/runtime.d.ts +564 -31
  89. package/lib/types/runtime.d.ts.map +1 -1
  90. package/lib/types/runtime.js +2645 -292
  91. package/lib/types/runtime.js.map +1 -1
  92. package/lib/types/settings-schema.d.ts +4 -2
  93. package/lib/types/settings-schema.d.ts.map +1 -1
  94. package/lib/types/settings-schema.js +2 -0
  95. package/lib/types/settings-schema.js.map +1 -1
  96. package/lib/types/source-images.d.ts +118 -0
  97. package/lib/types/source-images.d.ts.map +1 -0
  98. package/lib/types/source-images.js +288 -0
  99. package/lib/types/source-images.js.map +1 -0
  100. package/lib/types/types.d.ts +356 -28
  101. package/lib/types/types.d.ts.map +1 -1
  102. package/lib/types/types.js +112 -18
  103. package/lib/types/types.js.map +1 -1
  104. package/lib/types/wiki-finalize.d.ts +140 -0
  105. package/lib/types/wiki-finalize.d.ts.map +1 -0
  106. package/lib/types/wiki-finalize.js +269 -0
  107. package/lib/types/wiki-finalize.js.map +1 -0
  108. package/lib/types/wiki-types.d.ts +10 -2
  109. package/lib/types/wiki-types.d.ts.map +1 -1
  110. package/lib/types/wiki-types.js +27 -30
  111. package/lib/types/wiki-types.js.map +1 -1
  112. package/package.json +4 -3
  113. package/preset/tita-data-agent/agent.cordis.yml +25 -10
  114. package/src/client/DirectoryPicker.tsx +12 -12
  115. package/src/client/DrawerSection.tsx +18 -0
  116. package/src/client/InfoHint.tsx +21 -8
  117. package/src/client/IntentTab.tsx +20 -26
  118. package/src/client/KnowledgeBaseTab.tsx +458 -158
  119. package/src/client/KnowledgePanel.tsx +44 -10
  120. package/src/client/KnowledgeStepRail.tsx +3 -0
  121. package/src/client/KnowledgeToolRow.tsx +331 -0
  122. package/src/client/NodeSettings.tsx +20 -22
  123. package/src/client/PreviewSections.tsx +178 -43
  124. package/src/client/RecallPanel.tsx +418 -127
  125. package/src/client/TypeDefinitionDrawer.tsx +154 -54
  126. package/src/client/WikiCardReview.tsx +266 -0
  127. package/src/client/WikiFlowCard.tsx +57 -95
  128. package/src/client/WikiTypeEditor.tsx +197 -95
  129. package/src/client/arch/AgentArchitectureGraph.tsx +30 -14
  130. package/src/client/arch/NodeLogicPanel.tsx +6 -3
  131. package/src/client/arch/model.ts +164 -26
  132. package/src/client/architecture.css +25 -10
  133. package/src/client/architecture.tsx +66 -41
  134. package/src/client/asset-images.ts +125 -0
  135. package/src/client/attribution/AttributionGraph.tsx +481 -34
  136. package/src/client/attribution/AttributionTab.tsx +501 -106
  137. package/src/client/attribution/CaseView.tsx +9 -14
  138. package/src/client/attribution/GraphStage.tsx +25 -18
  139. package/src/client/attribution/RunView.tsx +27 -9
  140. package/src/client/attribution/StageChrome.tsx +280 -140
  141. package/src/client/attribution/graph-options.ts +611 -47
  142. package/src/client/attribution/model.ts +559 -30
  143. package/src/client/convert/ConvertPanel.tsx +36 -4
  144. package/src/client/doc-page.css +134 -0
  145. package/src/client/doc-page.tsx +242 -0
  146. package/src/client/index.ts +18 -0
  147. package/src/client/panel-state.ts +105 -0
  148. package/src/client/problem-domains.ts +1 -1
  149. package/src/client/request.ts +36 -0
  150. package/src/client/styles.css +397 -54
  151. package/src/client/useFitScale.ts +15 -2
  152. package/src/client/wiki-type-groups.ts +86 -0
  153. package/src/convert/host.ts +68 -9
  154. package/src/convert/ingest.ts +61 -18
  155. package/src/convert/types.ts +2 -2
  156. package/src/diagnosis/cards.ts +120 -50
  157. package/src/diagnosis/run.ts +251 -0
  158. package/src/diagnosis/schema.ts +67 -26
  159. package/src/diagnosis/seed-source.ts +29 -4
  160. package/src/diagnosis/seed.ts +187 -85
  161. package/src/diagnosis/store.ts +310 -173
  162. package/src/diagnosis/types.ts +181 -16
  163. package/src/document-page.ts +51 -0
  164. package/src/extract-model.ts +254 -99
  165. package/src/extract.ts +35 -3
  166. package/src/fs-atomic.ts +41 -0
  167. package/src/index.ts +499 -62
  168. package/src/intent/types.ts +1 -1
  169. package/src/knowledge-bases.ts +50 -49
  170. package/src/layout.ts +4 -4
  171. package/src/migrate.ts +2 -2
  172. package/src/model-text.ts +126 -0
  173. package/src/present.ts +367 -0
  174. package/src/recall-rank.ts +57 -2
  175. package/src/runtime.ts +2802 -293
  176. package/src/settings-schema.ts +2 -0
  177. package/src/source-images.ts +326 -0
  178. package/src/types.ts +446 -45
  179. package/src/wiki-finalize.ts +310 -0
  180. package/src/wiki-types.ts +28 -32
@@ -0,0 +1,125 @@
1
+ /**
2
+ * 正文里的图片引用 → 能加载的 URL,以及反向的「正文引用了哪几张图」。
3
+ *
4
+ * 服务端在详情里把每一张真图放在 `assets` 里(`rel` 相对知识库根、`url` 是
5
+ * `/knowledge/assets/...`),而正文里写的是**相对文件自己**的引用
6
+ * (`_assets/<bucket>/img-xxx.png`,或 `../../01_source_raw/_assets/...`)。
7
+ * 两者不是同一个字符串,所以要认三种写法:
8
+ *
9
+ * 1. 整段相对路径相等(`rel === clean`);
10
+ * 2. 以它为结尾(`rel.endsWith('/' + clean)`)—— 覆盖 `01_source_raw/_assets/...`;
11
+ * 3. 退到文件名(`img-xxx.png`)—— 覆盖 `_assets/<bucket>/img-xxx.png` 与
12
+ * `../../01_source_raw/_assets/<bucket>/img-xxx.png`。
13
+ *
14
+ * 都认不出来就交回 `null`,由渲染器显示 alt 文字 —— 显示一个坏图比显示「这张图没认出来」
15
+ * 更糟。
16
+ *
17
+ * 为什么单独一个模块:面板抽屉(平台 `MarkdownText` 的 `pathImages`)与独立整页
18
+ * (`LocalMarkdown` 的 `resolveImage`)**必须给同一个答案**。两处各写一遍,
19
+ * 就会出现「整页能看图、抽屉看不到图」这种漂移 —— 0047 实机就是这样:抽屉压根没接
20
+ * 这个解析器,正文里的图被浏览器按 GUI 的地址解析成 `/_assets/...`,全是 404。
21
+ *
22
+ * 0049 又加了相反方向的一问(`referencedRelsOf`):抽屉要把正文与图片摆成一份内容,
23
+ * 就得知道**哪几张图正文里没提到** —— 提到过的就地渲染,没提到的排在正文末尾。
24
+ * 两个方向的判据必须逐字相同,所以共用 `matchAsset`。
25
+ */
26
+
27
+ export interface AssetRef {
28
+ rel: string
29
+ bytes: number
30
+ url: string
31
+ }
32
+
33
+ export type ImageResolver = (source: string) => string | null
34
+
35
+ /** 预建的两张查找表。同一个 `assets` 会被反复问,所以索引建一次。 */
36
+ export interface AssetIndex {
37
+ byRel: Map<string, AssetRef>
38
+ byName: Map<string, AssetRef>
39
+ }
40
+
41
+ export function assetIndexOf(assets: AssetRef[]): AssetIndex {
42
+ const byRel = new Map<string, AssetRef>()
43
+ const byName = new Map<string, AssetRef>()
44
+ for (const asset of assets) {
45
+ byRel.set(asset.rel, asset)
46
+ const name = asset.rel.split('/').pop() ?? ''
47
+ // 先到先得:同名不同桶时保持确定性,不让遍历顺序决定谁赢。
48
+ if (name !== '' && !byName.has(name)) byName.set(name, asset)
49
+ }
50
+ return { byRel, byName }
51
+ }
52
+
53
+ /** 一个正文引用对应哪张真图。三条判据见模块头。 */
54
+ export function matchAsset(source: string, index: AssetIndex): AssetRef | undefined {
55
+ if (/^(?:https?:|data:)/i.test(source)) return undefined
56
+ const clean = source.replace(/^\.\//, '').replace(/^\/+/, '')
57
+ const exact = index.byRel.get(clean)
58
+ if (exact !== undefined) return exact
59
+ for (const [rel, asset] of index.byRel) if (rel.endsWith(`/${clean}`)) return asset
60
+ return index.byName.get(clean.split('/').pop() ?? '')
61
+ }
62
+
63
+ /**
64
+ * 把资产 URL 变成**带协议**的绝对地址。
65
+ *
66
+ * 这不是美化,是平台渲染器的硬要求:`MarkdownText` 的 `pathImages.resolve` 返回值要过
67
+ * `vocabularyImageUrl` —— 它只认 `http:` / `https:` / `blob:` / `data:` 或
68
+ * `dsh-app://` 开头的地址,其余一律判为「不可显示」,正文里的图就退化成 alt 文字。
69
+ *
70
+ * 0047 之后抽屉里的图一直是**这样坏着的**:服务端给的 `url` 是
71
+ * `/knowledge/assets/default/01_source_raw/_assets/...`(根相对路径),`new URL()`
72
+ * 没有 base 会抛错 → 返回 undefined → 正文里只剩「图片」两个字,而真图全挤在正文
73
+ * 末尾那块素材区里(那里用的是裸 `<img src>`,不受这条限制)。2026-09-27 实测确认。
74
+ *
75
+ * `file://` 打开整页时没有可用的 origin,那时保持原样(裸 `<img src>` 认相对路径)。
76
+ */
77
+ export function absoluteAssetUrl(url: string, origin?: string): string {
78
+ if (/^(?:https?:|data:|blob:|dsh-app:)/i.test(url)) return url
79
+ const base = origin ?? (typeof window === 'undefined' ? undefined : window.location.origin)
80
+ if (base === undefined || !/^https?:\/\//i.test(base)) return url
81
+ try { return new URL(url, base).href } catch { return url }
82
+ }
83
+
84
+ export function imageResolverOf(assets: AssetRef[]): ImageResolver | undefined {
85
+ if (assets.length === 0) return undefined
86
+ const index = assetIndexOf(assets)
87
+ return (source: string): string | null => {
88
+ if (/^(?:https?:|data:)/i.test(source)) return source
89
+ const asset = matchAsset(source, index)
90
+ return asset === undefined ? null : absoluteAssetUrl(asset.url)
91
+ }
92
+ }
93
+
94
+ /**
95
+ * 平台 `MarkdownText` 的 `pathImages` 词汇:认不出来时返回 `undefined`(那张图留成
96
+ * 惰性的 alt 文字),而不是 `null`。
97
+ */
98
+ export function pathImagesOf(assets: AssetRef[]): { resolve(value: string): string | undefined } | undefined {
99
+ const resolve = imageResolverOf(assets)
100
+ if (resolve === undefined) return undefined
101
+ return { resolve: (value: string) => resolve(value) ?? undefined }
102
+ }
103
+
104
+ /** 正文里的图片引用:`![alt](ref)`、`![alt](<ref>)` 与 `<img src="…">` 三种写法。 */
105
+ const IMAGE_REF = /!\[[^\]]*\]\(\s*(?:<([^>]+)>|([^\s)]+))|<img[^>]*\ssrc=["']([^"']+)["']/g
106
+
107
+ /**
108
+ * 正文里**真的引用到**的那几张图(按 `rel` 报回来)。
109
+ *
110
+ * 用它把「正文里已经画出来的图」与「正文没提到的图」分开:前者就地渲染,后者排在
111
+ * 正文末尾 —— 否则同一张图会在一屏里出现两次(正文一次、末尾素材区一次),
112
+ * 看起来像渲染重复。
113
+ */
114
+ export function referencedRelsOf(content: string, assets: AssetRef[]): Set<string> {
115
+ const referenced = new Set<string>()
116
+ if (assets.length === 0) return referenced
117
+ const index = assetIndexOf(assets)
118
+ for (const match of content.matchAll(IMAGE_REF)) {
119
+ const source = match[1] ?? match[2] ?? match[3]
120
+ if (!source) continue
121
+ const asset = matchAsset(source, index)
122
+ if (asset) referenced.add(asset.rel)
123
+ }
124
+ return referenced
125
+ }