dsh-data-domain-knowledge 0.1.1-alpha.2 → 0.1.1-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 (252) hide show
  1. package/README.md +33 -16
  2. package/lib/client.js +1042 -2097
  3. package/lib/contract-refs.d.ts +0 -1
  4. package/lib/doc-page.js +1 -1
  5. package/lib/pages.js +2489 -1060
  6. package/lib/types/agent-behavior-rules.d.ts.map +1 -1
  7. package/lib/types/agent-behavior-rules.js +3 -2
  8. package/lib/types/agent-behavior-rules.js.map +1 -1
  9. package/lib/types/axis-contract.js +1 -1
  10. package/lib/types/axis-contract.js.map +1 -1
  11. package/lib/types/card-organize.d.ts +2 -1
  12. package/lib/types/card-organize.d.ts.map +1 -1
  13. package/lib/types/card-organize.js +5 -3
  14. package/lib/types/card-organize.js.map +1 -1
  15. package/lib/types/config-schema.d.ts +1 -1
  16. package/lib/types/config-schema.js +1 -1
  17. package/lib/types/convert/host.d.ts +2 -3
  18. package/lib/types/convert/host.d.ts.map +1 -1
  19. package/lib/types/convert/host.js +11 -2
  20. package/lib/types/convert/host.js.map +1 -1
  21. package/lib/types/convert/ingest.d.ts +14 -20
  22. package/lib/types/convert/ingest.d.ts.map +1 -1
  23. package/lib/types/convert/ingest.js +8 -5
  24. package/lib/types/convert/ingest.js.map +1 -1
  25. package/lib/types/diagnosis/store.d.ts +2 -2
  26. package/lib/types/diagnosis/store.d.ts.map +1 -1
  27. package/lib/types/diagnosis/store.js +10 -2
  28. package/lib/types/diagnosis/store.js.map +1 -1
  29. package/lib/types/diagnosis/types.d.ts +1 -1
  30. package/lib/types/diagnosis/types.js +1 -1
  31. package/lib/types/extract-model.d.ts +3 -0
  32. package/lib/types/extract-model.d.ts.map +1 -1
  33. package/lib/types/extract-model.js.map +1 -1
  34. package/lib/types/images.js +1 -1
  35. package/lib/types/index.d.ts +0 -4
  36. package/lib/types/index.d.ts.map +1 -1
  37. package/lib/types/index.js +99 -91
  38. package/lib/types/index.js.map +1 -1
  39. package/lib/types/knowledge-bases.d.ts +3 -0
  40. package/lib/types/knowledge-bases.d.ts.map +1 -1
  41. package/lib/types/knowledge-bases.js +22 -2
  42. package/lib/types/knowledge-bases.js.map +1 -1
  43. package/lib/types/knowledge-contract.d.ts +6 -0
  44. package/lib/types/knowledge-contract.d.ts.map +1 -1
  45. package/lib/types/knowledge-contract.js +6 -2
  46. package/lib/types/knowledge-contract.js.map +1 -1
  47. package/lib/types/layout.d.ts +9 -26
  48. package/lib/types/layout.d.ts.map +1 -1
  49. package/lib/types/layout.js +10 -28
  50. package/lib/types/layout.js.map +1 -1
  51. package/lib/types/materialize-snapshot.d.ts +5 -0
  52. package/lib/types/materialize-snapshot.d.ts.map +1 -1
  53. package/lib/types/migrate.d.ts +3 -1
  54. package/lib/types/migrate.d.ts.map +1 -1
  55. package/lib/types/migrate.js +3 -1
  56. package/lib/types/migrate.js.map +1 -1
  57. package/lib/types/model-text.d.ts +7 -0
  58. package/lib/types/model-text.d.ts.map +1 -1
  59. package/lib/types/model-text.js +31 -9
  60. package/lib/types/model-text.js.map +1 -1
  61. package/lib/types/organize-contract.d.ts.map +1 -1
  62. package/lib/types/organize-contract.js +2 -1
  63. package/lib/types/organize-contract.js.map +1 -1
  64. package/lib/types/pipeline/engine.d.ts +28 -4
  65. package/lib/types/pipeline/engine.d.ts.map +1 -1
  66. package/lib/types/pipeline/engine.js +68 -15
  67. package/lib/types/pipeline/engine.js.map +1 -1
  68. package/lib/types/pipeline/progress.d.ts +12 -0
  69. package/lib/types/pipeline/progress.d.ts.map +1 -0
  70. package/lib/types/pipeline/progress.js +37 -0
  71. package/lib/types/pipeline/progress.js.map +1 -0
  72. package/lib/types/pipeline/resumable-extract.d.ts +45 -0
  73. package/lib/types/pipeline/resumable-extract.d.ts.map +1 -0
  74. package/lib/types/pipeline/resumable-extract.js +262 -0
  75. package/lib/types/pipeline/resumable-extract.js.map +1 -0
  76. package/lib/types/pipeline/store.d.ts +8 -2
  77. package/lib/types/pipeline/store.d.ts.map +1 -1
  78. package/lib/types/pipeline/store.js +27 -5
  79. package/lib/types/pipeline/store.js.map +1 -1
  80. package/lib/types/pipeline/types.d.ts +56 -0
  81. package/lib/types/pipeline/types.d.ts.map +1 -1
  82. package/lib/types/pipeline/types.js +18 -1
  83. package/lib/types/pipeline/types.js.map +1 -1
  84. package/lib/types/present.d.ts +1 -1
  85. package/lib/types/present.js +1 -1
  86. package/lib/types/preset-ids.d.ts +0 -1
  87. package/lib/types/preset-ids.d.ts.map +1 -1
  88. package/lib/types/preset-ids.js +0 -3
  89. package/lib/types/preset-ids.js.map +1 -1
  90. package/lib/types/query-analysis.d.ts +0 -5
  91. package/lib/types/query-analysis.d.ts.map +1 -1
  92. package/lib/types/query-analysis.js +0 -16
  93. package/lib/types/query-analysis.js.map +1 -1
  94. package/lib/types/recall-delivery.d.ts +36 -0
  95. package/lib/types/recall-delivery.d.ts.map +1 -0
  96. package/lib/types/recall-delivery.js +16 -0
  97. package/lib/types/recall-delivery.js.map +1 -0
  98. package/lib/types/retrieval/scope.d.ts +17 -0
  99. package/lib/types/retrieval/scope.d.ts.map +1 -0
  100. package/lib/types/retrieval/scope.js +11 -0
  101. package/lib/types/retrieval/scope.js.map +1 -0
  102. package/lib/types/runtime.d.ts +75 -14
  103. package/lib/types/runtime.d.ts.map +1 -1
  104. package/lib/types/runtime.js +454 -198
  105. package/lib/types/runtime.js.map +1 -1
  106. package/lib/types/settings-volatile.d.ts +0 -7
  107. package/lib/types/settings-volatile.d.ts.map +1 -1
  108. package/lib/types/settings-volatile.js +0 -7
  109. package/lib/types/settings-volatile.js.map +1 -1
  110. package/lib/types/source-identity.d.ts +34 -0
  111. package/lib/types/source-identity.d.ts.map +1 -0
  112. package/lib/types/source-identity.js +85 -0
  113. package/lib/types/source-identity.js.map +1 -0
  114. package/lib/types/source-read.d.ts +18 -0
  115. package/lib/types/source-read.d.ts.map +1 -0
  116. package/lib/types/source-read.js +49 -0
  117. package/lib/types/source-read.js.map +1 -0
  118. package/lib/types/store/axis-references.d.ts.map +1 -1
  119. package/lib/types/store/axis-references.js +5 -3
  120. package/lib/types/store/axis-references.js.map +1 -1
  121. package/lib/types/store/knowledge-db.d.ts +5 -29
  122. package/lib/types/store/knowledge-db.d.ts.map +1 -1
  123. package/lib/types/store/knowledge-db.js +57 -2
  124. package/lib/types/store/knowledge-db.js.map +1 -1
  125. package/lib/types/store/source-identity.d.ts +8 -0
  126. package/lib/types/store/source-identity.d.ts.map +1 -0
  127. package/lib/types/store/source-identity.js +56 -0
  128. package/lib/types/store/source-identity.js.map +1 -0
  129. package/lib/types/types.d.ts +46 -5
  130. package/lib/types/types.d.ts.map +1 -1
  131. package/lib/types/types.js +6 -3
  132. package/lib/types/types.js.map +1 -1
  133. package/lib/types/wiki-availability.d.ts +11 -0
  134. package/lib/types/wiki-availability.d.ts.map +1 -0
  135. package/lib/types/wiki-availability.js +39 -0
  136. package/lib/types/wiki-availability.js.map +1 -0
  137. package/lib/types/wiki-finalize.d.ts +4 -2
  138. package/lib/types/wiki-finalize.d.ts.map +1 -1
  139. package/lib/types/wiki-finalize.js +9 -27
  140. package/lib/types/wiki-finalize.js.map +1 -1
  141. package/lib/types/wiki-links.d.ts +35 -0
  142. package/lib/types/wiki-links.d.ts.map +1 -0
  143. package/lib/types/wiki-links.js +129 -0
  144. package/lib/types/wiki-links.js.map +1 -0
  145. package/lib/types/wiki-trial-types.d.ts +3 -0
  146. package/lib/types/wiki-trial-types.d.ts.map +1 -1
  147. package/lib/types/wiki-trial.d.ts +3 -3
  148. package/lib/types/wiki-trial.d.ts.map +1 -1
  149. package/lib/types/wiki-trial.js +14 -3
  150. package/lib/types/wiki-trial.js.map +1 -1
  151. package/package.json +16 -16
  152. package/scripts/doctor.mjs +0 -7
  153. package/scripts/setup-embedding.sh +0 -0
  154. package/src/agent-behavior-rules.ts +3 -2
  155. package/src/axis-contract.ts +1 -1
  156. package/src/card-organize.ts +5 -3
  157. package/src/client/AttributionEventGuide.tsx +3 -3
  158. package/src/client/AxisMatrix.tsx +86 -19
  159. package/src/client/AxisRegistrySection.tsx +1 -1
  160. package/src/client/CompileSettingsView.tsx +473 -0
  161. package/src/client/DirectoryPicker.tsx +0 -2
  162. package/src/client/ExtractionTasksPage.tsx +557 -423
  163. package/src/client/GuideArchitectureCanvas.tsx +5 -12
  164. package/src/client/ImportFilesDialog.tsx +1 -0
  165. package/src/client/InfoHint.tsx +1 -1
  166. package/src/client/KnowledgeBaseTab.tsx +141 -148
  167. package/src/client/KnowledgePanel.tsx +16 -9
  168. package/src/client/OperationLogTab.tsx +1 -1
  169. package/src/client/PipelineRunView.tsx +173 -0
  170. package/src/client/RecallPanel.tsx +5 -16
  171. package/src/client/TabGuide.tsx +3 -7
  172. package/src/client/WikiFlowPanel.tsx +10 -11
  173. package/src/client/arch/NodeLogicPanel.tsx +3 -3
  174. package/src/client/arch/model.ts +5 -113
  175. package/src/client/architecture.css +1 -1
  176. package/src/client/architecture.tsx +13 -27
  177. package/src/client/attribution/AttributionTab.tsx +141 -10
  178. package/src/client/pages.css +305 -180
  179. package/src/client/pages.tsx +7 -12
  180. package/src/client/styles.css +15 -96
  181. package/src/config-schema.ts +1 -1
  182. package/src/convert/host.ts +13 -5
  183. package/src/convert/ingest.ts +20 -7
  184. package/src/diagnosis/store.ts +7 -2
  185. package/src/diagnosis/types.ts +1 -1
  186. package/src/extract-model.ts +3 -0
  187. package/src/images.ts +1 -1
  188. package/src/index.ts +92 -97
  189. package/src/knowledge-bases.ts +23 -3
  190. package/src/knowledge-contract.ts +7 -2
  191. package/src/layout.ts +10 -32
  192. package/src/materialize-snapshot.ts +1 -0
  193. package/src/migrate.ts +3 -1
  194. package/src/model-text.ts +33 -11
  195. package/src/organize-contract.ts +2 -1
  196. package/src/pipeline/engine.ts +85 -22
  197. package/src/pipeline/progress.ts +40 -0
  198. package/src/pipeline/resumable-extract.ts +233 -0
  199. package/src/pipeline/store.ts +28 -6
  200. package/src/pipeline/types.ts +47 -2
  201. package/src/present.ts +1 -1
  202. package/src/preset-ids.ts +0 -4
  203. package/src/query-analysis.ts +0 -20
  204. package/src/recall-delivery.ts +19 -0
  205. package/src/retrieval/scope.ts +10 -0
  206. package/src/runtime.ts +412 -206
  207. package/src/settings-volatile.ts +0 -7
  208. package/src/source-identity.ts +85 -0
  209. package/src/source-read.ts +47 -0
  210. package/src/store/axis-references.ts +5 -3
  211. package/src/store/knowledge-db.ts +54 -2
  212. package/src/store/source-identity.ts +42 -0
  213. package/src/types.ts +18 -5
  214. package/src/wiki-availability.ts +37 -0
  215. package/src/wiki-finalize.ts +9 -25
  216. package/src/wiki-links.ts +120 -0
  217. package/src/wiki-trial-types.ts +3 -2
  218. package/src/wiki-trial.ts +17 -6
  219. package/lib/types/intent/engine.d.ts +0 -122
  220. package/lib/types/intent/engine.d.ts.map +0 -1
  221. package/lib/types/intent/engine.js +0 -488
  222. package/lib/types/intent/engine.js.map +0 -1
  223. package/lib/types/intent/host.d.ts +0 -68
  224. package/lib/types/intent/host.d.ts.map +0 -1
  225. package/lib/types/intent/host.js +0 -249
  226. package/lib/types/intent/host.js.map +0 -1
  227. package/lib/types/intent/scope.d.ts +0 -25
  228. package/lib/types/intent/scope.d.ts.map +0 -1
  229. package/lib/types/intent/scope.js +0 -116
  230. package/lib/types/intent/scope.js.map +0 -1
  231. package/lib/types/intent/store.d.ts +0 -33
  232. package/lib/types/intent/store.d.ts.map +0 -1
  233. package/lib/types/intent/store.js +0 -239
  234. package/lib/types/intent/store.js.map +0 -1
  235. package/lib/types/intent/tools.d.ts +0 -62
  236. package/lib/types/intent/tools.d.ts.map +0 -1
  237. package/lib/types/intent/tools.js +0 -130
  238. package/lib/types/intent/tools.js.map +0 -1
  239. package/lib/types/intent/types.d.ts +0 -170
  240. package/lib/types/intent/types.d.ts.map +0 -1
  241. package/lib/types/intent/types.js +0 -56
  242. package/lib/types/intent/types.js.map +0 -1
  243. package/src/client/IntentLogic.tsx +0 -192
  244. package/src/client/IntentTab.tsx +0 -343
  245. package/src/client/TypeDefinitionDrawer.tsx +0 -195
  246. package/src/intent/README.md +0 -42
  247. package/src/intent/engine.ts +0 -515
  248. package/src/intent/host.ts +0 -315
  249. package/src/intent/scope.ts +0 -125
  250. package/src/intent/store.ts +0 -218
  251. package/src/intent/tools.ts +0 -154
  252. package/src/intent/types.ts +0 -229
@@ -81,13 +81,6 @@ export declare function unwrapVolatile<T>(value: unknown): T | undefined;
81
81
  * `knowledge` / `convert` / `behaviorRules` 三组),而只解一层的结果是「组本身还是原始对象、
82
82
  * 组里的字段还是引用」。
83
83
  *
84
- * 0029 实测到的故障就是这样来的:`intent` 组被原样交给 `applyIntent`,于是
85
- * `engine.settings.predicates` 是一个 `{get, write}` 引用而不是字符串数组,
86
- * `routingPrompt()` 里那句 `predicates.join('、')` 抛
87
- * `this.settings.predicates.join is not a function`。抛出点在 **preset 的挂载行**上,
88
- * 所以整个 preset 组合不出会话 —— 宿主平面没事(它在 apply 时不读谓词),一个字段
89
- * 的类型错误把 preset 打挂。
90
- *
91
84
  * ## 为什么是两层而不是把 `unwrapVolatile` 写成递归
92
85
  *
93
86
  * 多出来的那一层是**已知的、唯一的一层**:组 → 字段。递归会把「数组里的对象恰好
@@ -1 +1 @@
1
- {"version":3,"file":"settings-volatile.d.ts","sourceRoot":"","sources":["../../src/settings-volatile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAIlF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS,CAI/D;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAMzD;AAED,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,CAEpG"}
1
+ {"version":3,"file":"settings-volatile.d.ts","sourceRoot":"","sources":["../../src/settings-volatile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAIlF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS,CAI/D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAMzD;AAED,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,CAEpG"}
@@ -86,13 +86,6 @@ export function unwrapVolatile(value) {
86
86
  * `knowledge` / `convert` / `behaviorRules` 三组),而只解一层的结果是「组本身还是原始对象、
87
87
  * 组里的字段还是引用」。
88
88
  *
89
- * 0029 实测到的故障就是这样来的:`intent` 组被原样交给 `applyIntent`,于是
90
- * `engine.settings.predicates` 是一个 `{get, write}` 引用而不是字符串数组,
91
- * `routingPrompt()` 里那句 `predicates.join('、')` 抛
92
- * `this.settings.predicates.join is not a function`。抛出点在 **preset 的挂载行**上,
93
- * 所以整个 preset 组合不出会话 —— 宿主平面没事(它在 apply 时不读谓词),一个字段
94
- * 的类型错误把 preset 打挂。
95
- *
96
89
  * ## 为什么是两层而不是把 `unwrapVolatile` 写成递归
97
90
  *
98
91
  * 多出来的那一层是**已知的、唯一的一层**:组 → 字段。递归会把「数组里的对象恰好
@@ -1 +1 @@
1
- {"version":3,"file":"settings-volatile.js","sourceRoot":"","sources":["../../src/settings-volatile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAKH;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAwC,MAAS;IAC7E,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CACnE,CAAA;AACR,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAI,KAAc;IAC9C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAsB,CAAA;IAC9E,MAAM,GAAG,GAAG,KAA0B,CAAA;IACtC,OAAO,OAAO,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAE,KAAW,CAAA;AACjE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,WAAW,CAAI,KAAc;IAC3C,MAAM,KAAK,GAAG,cAAc,CAA0B,KAAK,CAAC,CAAA;IAC5D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAA;IAC1D,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5D,CAAA;AACjB,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,eAAe,CAAC,IAA0C;IACxE,OAAO,WAAW,CAAkB,IAAI,CAAC,CAAA;AAC3C,CAAC"}
1
+ {"version":3,"file":"settings-volatile.js","sourceRoot":"","sources":["../../src/settings-volatile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAKH;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAwC,MAAS;IAC7E,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CACnE,CAAA;AACR,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAI,KAAc;IAC9C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAsB,CAAA;IAC9E,MAAM,GAAG,GAAG,KAA0B,CAAA;IACtC,OAAO,OAAO,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAE,KAAW,CAAA;AACjE,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CAAI,KAAc;IAC3C,MAAM,KAAK,GAAG,cAAc,CAA0B,KAAK,CAAC,CAAA;IAC5D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAA;IAC1D,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5D,CAAA;AACjB,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,eAAe,CAAC,IAA0C;IACxE,OAAO,WAAW,CAAkB,IAAI,CAAC,CAAA;AAC3C,CAAC"}
@@ -0,0 +1,34 @@
1
+ /** Source IDs are opaque, scoped by knowledge base, and independent of names, locations and content. */
2
+ export declare function isSourceId(value: unknown): value is string;
3
+ /** Allocate once when an input joins the import queue; retries and conversions keep this ID. */
4
+ export declare function newSourceId(): string;
5
+ /** Explicit acquisition identity; never inferred from document body or an arbitrary external_id. */
6
+ export interface SourceIdentityInput {
7
+ url?: string;
8
+ system?: string;
9
+ scope?: string;
10
+ documentType?: string;
11
+ documentId?: string;
12
+ /** Snake-case names accepted by Agent/HTTP callers. */
13
+ document_id?: string;
14
+ document_type?: string;
15
+ }
16
+ export interface SourceIdentity {
17
+ system: string;
18
+ scope: string;
19
+ documentType: string;
20
+ documentId: string;
21
+ rule: 'native-v1' | 'google-docs-v1' | 'feishu-v1' | 'url-v1';
22
+ url?: string;
23
+ }
24
+ export declare class SourceIdentityError extends Error {
25
+ readonly code: string;
26
+ readonly candidates: string[];
27
+ constructor(code: string, message: string, candidates?: string[]);
28
+ }
29
+ export declare function sourceIdentityKey(value: SourceIdentity): string;
30
+ /** WHATWG URL only: preserve query order, fragments, trailing slashes and protocol. No network/redirect inference. */
31
+ export declare function normalizeSourceUrl(value: string): URL;
32
+ /** First entry is the primary identity; additional entries are verified URL aliases of that same identity. */
33
+ export declare function resolveSourceIdentities(input: SourceIdentityInput): SourceIdentity[];
34
+ //# sourceMappingURL=source-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-identity.d.ts","sourceRoot":"","sources":["../../src/source-identity.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE1D;AAED,gGAAgG;AAChG,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,oGAAoG;AACpG,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AACD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,WAAW,GAAG,gBAAgB,GAAG,WAAW,GAAG,QAAQ,CAAA;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AACD,qBAAa,mBAAoB,SAAQ,KAAK;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAmB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE;gBAA5D,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAW,UAAU,GAAE,MAAM,EAAO;CACvF;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAE/D;AAED,sHAAsH;AACtH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAKrD;AAmBD,8GAA8G;AAC9G,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,EAAE,CAsBpF"}
@@ -0,0 +1,85 @@
1
+ /** Source IDs are opaque, scoped by knowledge base, and independent of names, locations and content. */
2
+ export function isSourceId(value) {
3
+ return typeof value === 'string' && /^[a-zA-Z0-9._:-]{1,160}$/.test(value);
4
+ }
5
+ /** Allocate once when an input joins the import queue; retries and conversions keep this ID. */
6
+ export function newSourceId() {
7
+ return `src_${globalThis.crypto.randomUUID()}`;
8
+ }
9
+ export class SourceIdentityError extends Error {
10
+ code;
11
+ candidates;
12
+ constructor(code, message, candidates = []) {
13
+ super(message);
14
+ this.code = code;
15
+ this.candidates = candidates;
16
+ }
17
+ }
18
+ export function sourceIdentityKey(value) {
19
+ return JSON.stringify([value.system, value.scope, value.documentType, value.documentId]);
20
+ }
21
+ /** WHATWG URL only: preserve query order, fragments, trailing slashes and protocol. No network/redirect inference. */
22
+ export function normalizeSourceUrl(value) {
23
+ let url;
24
+ try {
25
+ url = new URL(value);
26
+ }
27
+ catch {
28
+ throw new SourceIdentityError('SOURCE_IDENTITY_INVALID', '来源 URL 必须是完整的 HTTP(S) 地址。');
29
+ }
30
+ if (!['https:', 'http:'].includes(url.protocol) || url.username || url.password || value.length > 8192)
31
+ throw new SourceIdentityError('SOURCE_IDENTITY_INVALID', '来源 URL 必须为 HTTP(S),且不能包含用户名或密码。');
32
+ return url;
33
+ }
34
+ /** Known document links only. Unknown query parameters / fragments fall back to exact URL identity. */
35
+ function platformIdentity(url, scope) {
36
+ if (url.hash || url.port)
37
+ return undefined;
38
+ // These explicit tracking parameters do not select a document or its version. All others are retained via URL fallback.
39
+ if ([...url.searchParams.keys()].some(key => !['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'].includes(key)))
40
+ return undefined;
41
+ if (url.hostname === 'docs.google.com') {
42
+ const match = /^\/document\/(?:u\/\d+\/)?d\/([a-zA-Z0-9_-]+)(?:\/(?:edit|view|preview))?\/?$/.exec(url.pathname);
43
+ if (match)
44
+ return { system: 'google-docs', scope: scope ?? url.origin, documentType: 'document', documentId: match[1], rule: 'google-docs-v1', url: url.href };
45
+ }
46
+ if (url.hostname.endsWith('.feishu.cn') || url.hostname.endsWith('.larksuite.com')) {
47
+ const match = /^\/(docx|docs|wiki)\/([a-zA-Z0-9]+)\/?$/.exec(url.pathname);
48
+ if (match)
49
+ return { system: url.hostname.endsWith('.feishu.cn') ? 'feishu' : 'lark', scope: scope ?? url.origin,
50
+ documentType: match[1] === 'wiki' ? 'wiki-node' : match[1] === 'docs' ? 'doc' : 'docx', documentId: match[2], rule: 'feishu-v1', url: url.href };
51
+ }
52
+ return undefined;
53
+ }
54
+ /** First entry is the primary identity; additional entries are verified URL aliases of that same identity. */
55
+ export function resolveSourceIdentities(input) {
56
+ if (!input || typeof input !== 'object' || Array.isArray(input))
57
+ throw new SourceIdentityError('SOURCE_IDENTITY_INVALID', 'source_identity 必须为对象。');
58
+ if ((input.documentId !== undefined && input.document_id !== undefined && input.documentId !== input.document_id) || (input.documentType !== undefined && input.document_type !== undefined && input.documentType !== input.document_type))
59
+ throw new SourceIdentityError('SOURCE_IDENTITY_INVALID', '平台文档身份的同名参数不能冲突。');
60
+ input = { ...input, documentId: input.documentId ?? input.document_id, documentType: input.documentType ?? input.document_type };
61
+ for (const key of ['url', 'system', 'scope', 'documentType', 'documentId']) {
62
+ const value = input[key];
63
+ if (value !== undefined && (typeof value !== 'string' || !value.trim() || value !== value.trim() || value.length > (key === 'url' ? 8192 : 2048)))
64
+ throw new SourceIdentityError('SOURCE_IDENTITY_INVALID', `source_identity.${key} 必须为非空、无首尾空格的字符串。`);
65
+ }
66
+ const url = input.url ? normalizeSourceUrl(input.url) : undefined;
67
+ const parsed = url ? platformIdentity(url, input.scope) : undefined;
68
+ const native = input.documentId !== undefined || input.system !== undefined || input.documentType !== undefined;
69
+ const urlIdentity = url ? { system: 'web', scope: input.scope ?? url.origin, documentType: 'url', documentId: url.href, rule: 'url-v1', url: url.href } : undefined;
70
+ if (native) {
71
+ if (!input.system || !input.scope || !input.documentId)
72
+ throw new SourceIdentityError('SOURCE_IDENTITY_INVALID', '平台身份必须同时提供 system、scope 和 document_id。');
73
+ const identity = { system: input.system.toLowerCase(), scope: input.scope, documentType: input.documentType ?? 'document', documentId: input.documentId, rule: 'native-v1', ...(url ? { url: url.href } : {}) };
74
+ if (parsed && sourceIdentityKey(identity) !== sourceIdentityKey(parsed))
75
+ throw new SourceIdentityError('SOURCE_ORIGIN_CONFLICT', '平台文档 ID 与链接解析结果不一致。');
76
+ // An unknown URL is provenance only: it does not prove an alias for a native resource.
77
+ return parsed && urlIdentity ? [identity, urlIdentity] : [identity];
78
+ }
79
+ if (parsed && urlIdentity)
80
+ return [parsed, urlIdentity];
81
+ if (urlIdentity)
82
+ return [urlIdentity];
83
+ throw new SourceIdentityError('SOURCE_IDENTITY_INVALID', '请提供 url,或完整的平台文档身份。');
84
+ }
85
+ //# sourceMappingURL=source-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-identity.js","sourceRoot":"","sources":["../../src/source-identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { KnowledgeDb } from './store/knowledge-db.js';
2
+ export interface SourceReadInput {
3
+ sourceId: string;
4
+ version?: number;
5
+ contentHash?: string;
6
+ start?: number;
7
+ end?: number;
8
+ quote?: string;
9
+ offset?: number;
10
+ maxChars?: number;
11
+ }
12
+ export declare class SourceReadError extends Error {
13
+ readonly code: string;
14
+ constructor(code: string, message: string);
15
+ }
16
+ /** Source ID identifies the document; the integer version pins its body; ranges use UTF-16, end exclusive. */
17
+ export declare function readSourceExact(db: KnowledgeDb, input: SourceReadInput): Record<string, unknown>;
18
+ //# sourceMappingURL=source-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-read.d.ts","sourceRoot":"","sources":["../../src/source-read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAI1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AACD,qBAAa,eAAgB,SAAQ,KAAK;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CACnD;AACD,8GAA8G;AAC9G,wBAAgB,eAAe,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2BhG"}
@@ -0,0 +1,49 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { isSourceId } from './source-identity.js';
3
+ import { locateQuote } from './wiki-trial.js';
4
+ export class SourceReadError extends Error {
5
+ code;
6
+ constructor(code, message) {
7
+ super(message);
8
+ this.code = code;
9
+ }
10
+ }
11
+ /** Source ID identifies the document; the integer version pins its body; ranges use UTF-16, end exclusive. */
12
+ export function readSourceExact(db, input) {
13
+ const fail = (code, message) => { throw new SourceReadError(code, message); };
14
+ if (!isSourceId(input.sourceId))
15
+ return fail('SOURCE_ID_INVALID', 'source_id 必须为已返回的完整合法 ID。');
16
+ const current = db.source(input.sourceId);
17
+ if (!current)
18
+ return fail('SOURCE_NOT_FOUND', 'source_id 不存在或已删除;不会回退到标题或正文搜索。');
19
+ const version = input.version ?? current.version;
20
+ if (!Number.isInteger(version) || version < 1)
21
+ return fail('SOURCE_VERSION_INVALID', 'version 必须为正整数。');
22
+ const revision = db.revisionBody('source', input.sourceId, version);
23
+ if (!revision)
24
+ return fail('SOURCE_VERSION_NOT_FOUND', '指定来源版本不可用;不会改读最新版。');
25
+ const text = revision.body;
26
+ const contentHash = createHash('sha256').update(text).digest('hex');
27
+ if (input.contentHash !== undefined && input.contentHash !== contentHash && input.contentHash !== contentHash.slice(0, 24))
28
+ return fail('SOURCE_HASH_MISMATCH', '指定版本的正文哈希与引用不一致。');
29
+ if (input.quote !== undefined && (typeof input.quote !== 'string' || !input.quote.trim()))
30
+ return fail('SOURCE_QUOTE_INVALID', 'quote 必须为非空原文引文。');
31
+ const located = input.quote === undefined ? undefined : locateQuote(text, input.quote);
32
+ if (located && !located.found)
33
+ return fail('SOURCE_QUOTE_MISMATCH', '引文不在指定版本中。');
34
+ const start = input.start ?? (input.end === undefined ? located?.locator?.start : undefined) ?? 0;
35
+ const end = input.end ?? (input.start === undefined ? located?.locator?.end : undefined) ?? text.length;
36
+ const offset = input.offset ?? 0, maxChars = input.maxChars ?? 20000;
37
+ if (![start, end, offset, maxChars].every(Number.isInteger) || start < 0 || end < start || end > text.length || offset < 0 || offset > end - start || maxChars < 1 || maxChars > 40000)
38
+ return fail('SOURCE_RANGE_INVALID', '范围必须满足 0 ≤ start ≤ end ≤ 正文长度;offset 为范围内偏移,max_chars 为 1–40000。');
39
+ if (input.quote && !locateQuote(text.slice(start, end), input.quote).found)
40
+ return fail('SOURCE_QUOTE_MISMATCH', '指定范围与引文不匹配。');
41
+ const from = start + offset, to = Math.min(end, from + maxChars), truncated = to < end;
42
+ const readRef = { source_id: input.sourceId, version, content_hash: contentHash, start, end };
43
+ return { sourceId: input.sourceId, title: String(revision.frontmatter.title ?? current.record.title), version, currentVersion: current.version,
44
+ historical: version !== current.version, contentHash, content: text.slice(from, to), start: from, end: to, rangeStart: start, rangeEnd: end,
45
+ offset, returnedChars: to - from, totalChars: text.length, truncated, nextOffset: truncated ? offset + to - from : null, readRef,
46
+ ...(truncated ? { nextRead: { tool: 'query_source_truth', args: { ...readRef, offset: offset + to - from, max_chars: maxChars } } } : {}),
47
+ };
48
+ }
49
+ //# sourceMappingURL=source-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-read.js","sourceRoot":"","sources":["../../src/source-read.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"axis-references.d.ts","sourceRoot":"","sources":["../../../src/store/axis-references.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,mBAAmB,CAAA;AAEtE,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAwF5G"}
1
+ {"version":3,"file":"axis-references.d.ts","sourceRoot":"","sources":["../../../src/store/axis-references.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,mBAAmB,CAAA;AAEtE,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA0F5G"}
@@ -13,14 +13,15 @@ export function redirectAxisReferences(db, kind, fromId, intoId) {
13
13
  db.raw(`UPDATE knowledge SET ${column} = ?, updated_at = ? WHERE ${column} = ?`).run(intoId, new Date().toISOString(), fromId);
14
14
  const placements = db.placements();
15
15
  const cards = db.cards();
16
- const byCoordinate = new Map(cards.filter(row => row.card.coordinate).map(row => [cardCoordinateKey(row.card.coordinate), row]));
16
+ const wikiKind = (card) => card.metadata.wiki_kind === 'fact' || card.metadata.wiki_kind === 'way' ? card.metadata.wiki_kind : undefined;
17
+ const byCoordinate = new Map(cards.filter(row => row.card.coordinate).map(row => [cardCoordinateKey(row.card.coordinate, wikiKind(row.card)), row]));
17
18
  db.transact({ opId: `axis-merge:${fromId}:${intoId}:${Date.now()}`, actor: 'user', summary: '合并轴实体并迁移知识、卡片与事件引用' }, tx => {
18
19
  for (const row of cards) {
19
20
  const coordinate = row.card.coordinate;
20
21
  if (!coordinate || coordinate[field] !== fromId)
21
22
  continue;
22
23
  const next = redirect(coordinate);
23
- const key = cardCoordinateKey(next);
24
+ const key = cardCoordinateKey(next, wikiKind(row.card));
24
25
  const target = byCoordinate.get(key);
25
26
  const base = target && target.card.entityId !== row.card.entityId ? target : row;
26
27
  const merged = base !== row;
@@ -31,6 +32,7 @@ export function redirectAxisReferences(db, kind, fromId, intoId) {
31
32
  sourceRefs: [...new Set([...base.card.sourceRefs, ...row.card.sourceRefs])],
32
33
  annotations: [...new Map([...(base.card.annotations ?? []), ...(row.card.annotations ?? [])].map(annotation => [annotation.id, annotation])).values()],
33
34
  metadata: { ...base.card.metadata, layout: undefined, citations: undefined,
35
+ knowledge_versions: { ...(row.card.metadata.knowledge_versions ?? {}), ...(base.card.metadata.knowledge_versions ?? {}) },
34
36
  aliases: [...new Set([...(Array.isArray(base.card.metadata.aliases) ? base.card.metadata.aliases : []), ...(Array.isArray(row.card.metadata.aliases) ? row.card.metadata.aliases : []), base.card.title, row.card.title])],
35
37
  ...(eventRefs.length ? { event_refs: JSON.stringify(eventRefs) } : {}) },
36
38
  };
@@ -41,7 +43,7 @@ export function redirectAxisReferences(db, kind, fromId, intoId) {
41
43
  const frontmatter = { ...base.frontmatter, coordinate: { object: next.objectId, action: next.actionId, scene: next.sceneId }, source_refs: card.sourceRefs, metadata: card.metadata, annotations: card.annotations };
42
44
  tx.putCard(card, frontmatter, { actor: 'user', kind: 'named', summary: '轴合并后的卡片引用' }, combined, true);
43
45
  db.setCardEvents(card.entityId, eventRefs);
44
- byCoordinate.delete(cardCoordinateKey(coordinate));
46
+ byCoordinate.delete(cardCoordinateKey(coordinate, wikiKind(row.card)));
45
47
  byCoordinate.set(key, { ...base, card, frontmatter });
46
48
  placements.set(card.entityId, combined);
47
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"axis-references.js","sourceRoot":"","sources":["../../../src/store/axis-references.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"axis-references.js","sourceRoot":"","sources":["../../../src/store/axis-references.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,4 @@
1
- /**
2
- * 知识库文件(`<库 id>/knowledge.db`):**正文、版本、血缘的唯一存储**。
3
- *
4
- * ## 为什么正文也进库(PRD v2 §0.1)
5
- *
6
- * v1 让正文留在 `.md` 文件、只有历史进库,用「DB 当写前日志 + 启动对账」兜底两个
7
- * 存储之间的一致性。那道税是**永久的**:任何时刻都可能半截(文件写了、事务没提交),
8
- * 每次启动都要对账,而且新增一份数据要同时维护两条写路径。
9
- *
10
- * 这个模块让那道税消失:正文、版本、血缘、资产引用在**同一个事务**里提交。
11
- * 事务的边界就是**操作的边界**(见 {@link KnowledgeDb.transact}),不是写入的边界 ——
12
- * 一次编译写 40 张卡是**一个**操作、**一行** `tree`、正文真变了的卡片各一行 `revision`。
13
- *
14
- * ## 这个模块知道什么、不知道什么
15
- *
16
- * 它**不解析 front matter**。调用方把 front matter 解析好、序列化成 JSON 交给它
17
- * (`putSource` / `putCard` 的 `frontmatter` 参数),读的时候原样取回。理由是 front
18
- * matter 的形状属于来源内容本身(OKF 键与通用 metadata),
19
- * 让它变一次就要改一次存储层是错的。要查询的键才提升成列(`title` /
20
- * `entity_type` / `status` / `external_id`)。
21
- *
22
- * ## 为什么历史正文按内容寻址
23
- *
24
- * `blob.hash` 是 sha256(正文)。重编一次 40 张卡里常常只有 3 张正文变了,另外 37 张的
25
- * 新版本行**指向同一个 blob**,不占额外空间。实测(PRD §3.2):3 次写入 → 2 个 blob。
26
- *
27
- * @module
28
- */
1
+ import { type SourceIdentity } from '../source-identity.js';
29
2
  import type { SqliteDatabase, SqliteStatement } from '../fts.js';
30
3
  import { KNOWLEDGE_DB_FILE } from '../layout.js';
31
4
  import { type KnowledgeCard, type SourceRaw } from '../types.js';
@@ -46,7 +19,7 @@ export declare const KNOWLEDGE_DB_APPLICATION_ID = 1414218308;
46
19
  * 旧库会在打开时做一次**事务化就地迁移**。知识库是用户数据,不能因为存储层增加了
47
20
  * 一列或调整了主键就要求用户重新导入;只有比当前版本更新的库才拒绝打开。
48
21
  */
49
- export declare const KNOWLEDGE_DB_SCHEMA = 7;
22
+ export declare const KNOWLEDGE_DB_SCHEMA = 9;
50
23
  /** 实体种类。`knowledge` 与轴注册表不走这张表(它们各有自己的表,见 §3.2)。 */
51
24
  export type EntityKind = 'source' | 'card';
52
25
  /** 谁改的。与 `oplog.ts` 的 `actor` 同一套词。 */
@@ -202,6 +175,7 @@ export declare class KnowledgeTx {
202
175
  * 让省略意味着「保留」,会让「主动清掉底稿」这件事无法表达。
203
176
  */
204
177
  putSource(record: SourceRaw, frontmatter: Record<string, unknown>, journal: Journal, original?: SourceOriginal): WriteOutcome;
178
+ bindSourceIdentity(identity: SourceIdentity, sourceId: string): void;
205
179
  /**
206
180
  * 写一张卡片。判据同样是正文哈希。
207
181
  *
@@ -322,6 +296,8 @@ export declare class KnowledgeDb {
322
296
  * 行为必须留着 —— 它的用处是「同名的两份来源不要互相覆盖」,与「文件叫什么」无关。
323
297
  */
324
298
  sourceIdByTitle(title: string): string | undefined;
299
+ sourceIdByIdentity(identity: SourceIdentity): string | undefined;
300
+ sourceIdentities(sourceId: string): SourceIdentity[];
325
301
  card(id: string): CardRecord | undefined;
326
302
  /**
327
303
  * 把实体读回记录。
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-db.d.ts","sourceRoot":"","sources":["../../../src/store/knowledge-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAgE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AAC9H,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,uDAAuD;AACvD,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,aAAa,CAAA;AAErD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,oDAAoD;AACpD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAA;AAE1C,uCAAuC;AACvC,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE7F;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAA;AAE3C,kDAAkD;AAClD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,oCAAoC;AACpC,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC;AAED,6CAA6C;AAC7C;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,CAAA;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAA;CACf;AAiBD,oCAAoC;AACpC,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,aAAa,GAAG,MAAM,CAAA;IAC7B,IAAI,EAAE,YAAY,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yCAAyC;IACzC,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,yCAAyC;IACzC,SAAS,EAAE,OAAO,CAAA;IAClB,mBAAmB;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,WAAW,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAErH,6BAA6B;AAC7B,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BlD;AA0ZD;;;;;GAKG;AACH,qBAAa,WAAW;IAIV,OAAO,CAAC,QAAQ,CAAC,EAAE;IAH/B,gDAAgD;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;gBAExB,EAAE,EAAE,WAAW;IAE5C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAEjC,8BAA8B;IAC9B,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,cAAc;IAMtB,gDAAgD;IAChD,OAAO,CAAC,SAAS;IAmBjB;;;;;OAKG;IACH;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,YAAY;IAkB7H;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,gBAAgB,EAAE,EAAE,mBAAmB,UAAQ,GAAG,YAAY;IAsChK;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAS7D,uCAAuC;IACvC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKpC;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAgDjB,gEAAgE;IAChE,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAYhD,4CAA4C;IAC5C,YAAY,IAAI,MAAM;CAGvB;AAED;;;;;GAKG;AACH,qBAAa,WAAW;IAIF,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAkB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAH9E,OAAO,CAAC,mBAAmB,CAAI;IAC/B,0BAA0B;IAC1B,OAAO,CAAC,gBAAgB,CAAI;IAC5B,OAAO;IAEP;;;;;;;;;;;;OAYG;WACU,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE,MAAM,KAAK,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IAoExG,KAAK,IAAI,IAAI;IAMb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAEjC,8EAA8E;IAC9E,UAAU,IAAI,cAAc;IAE5B;;;;;;;;;OASG;IACH,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,CAAC,GAAG,CAAC;IAoC5D;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,cAAc;IA0BtB,sCAAsC;IACtC,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,IAAI;IAK9E,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,WAAW,EAAE;IAcrD,8DAA8D;IAC9D,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAkBrF;;;;;;;OAOG;IACH,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWvE,sDAAsD;IACtD,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAKlD,OAAO,IAAI,YAAY,EAAE;IACzB,KAAK,IAAI,UAAU,EAAE;IAErB,2DAA2D;IAC3D,MAAM,IAAI,WAAW,EAAE;IAavB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAS1C,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAsCpC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAMjE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK7B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAKtC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO;IAU1D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5C;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKlD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIxC;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IA4DpB;;;;;OAKG;IACH,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAkB7C;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IA2BhE,0CAA0C;IAC1C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAQ7D;;;;;OAKG;IACH,gBAAgB,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE;IAQrE;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAWjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IAwG9F;;;;;;;;OAQG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAW7B;;;;;;;;OAQG;IACH,yBAAyB,IAAI,GAAG,CAAC,MAAM,CAAC;IAaxC,0BAA0B;IAC1B,OAAO,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAI/E"}
1
+ {"version":3,"file":"knowledge-db.d.ts","sourceRoot":"","sources":["../../../src/store/knowledge-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAiChF,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAgE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AAC9H,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,uDAAuD;AACvD,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,aAAa,CAAA;AAErD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,oDAAoD;AACpD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAA;AAE1C,uCAAuC;AACvC,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE7F;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAA;AAE3C,kDAAkD;AAClD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,oCAAoC;AACpC,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC;AAED,6CAA6C;AAC7C;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,CAAA;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAA;CACf;AAiBD,oCAAoC;AACpC,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,aAAa,GAAG,MAAM,CAAA;IAC7B,IAAI,EAAE,YAAY,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yCAAyC;IACzC,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,yCAAyC;IACzC,SAAS,EAAE,OAAO,CAAA;IAClB,mBAAmB;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,WAAW,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAErH,6BAA6B;AAC7B,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BlD;AAwbD;;;;;GAKG;AACH,qBAAa,WAAW;IAIV,OAAO,CAAC,QAAQ,CAAC,EAAE;IAH/B,gDAAgD;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;gBAExB,EAAE,EAAE,WAAW;IAE5C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAEjC,8BAA8B;IAC9B,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,cAAc;IAMtB,gDAAgD;IAChD,OAAO,CAAC,SAAS;IAmBjB;;;;;OAKG;IACH;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,YAAY;IAkB7H,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQpE;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,gBAAgB,EAAE,EAAE,mBAAmB,UAAQ,GAAG,YAAY;IAsChK;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAS7D,uCAAuC;IACvC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKpC;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAgDjB,gEAAgE;IAChE,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAchD,4CAA4C;IAC5C,YAAY,IAAI,MAAM;CAGvB;AAED;;;;;GAKG;AACH,qBAAa,WAAW;IAIF,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAkB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAH9E,OAAO,CAAC,mBAAmB,CAAI;IAC/B,0BAA0B;IAC1B,OAAO,CAAC,gBAAgB,CAAI;IAC5B,OAAO;IAEP;;;;;;;;;;;;OAYG;WACU,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE,MAAM,KAAK,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IAqExG,KAAK,IAAI,IAAI;IAMb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAEjC,8EAA8E;IAC9E,UAAU,IAAI,cAAc;IAE5B;;;;;;;;;OASG;IACH,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,CAAC,GAAG,CAAC;IAoC5D;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,cAAc;IA0BtB,sCAAsC;IACtC,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,IAAI;IAK9E,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,WAAW,EAAE;IAcrD,8DAA8D;IAC9D,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAkBrF;;;;;;;OAOG;IACH,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWvE,sDAAsD;IACtD,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAKlD,OAAO,IAAI,YAAY,EAAE;IACzB,KAAK,IAAI,UAAU,EAAE;IAErB,2DAA2D;IAC3D,MAAM,IAAI,WAAW,EAAE;IAavB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAS1C,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAsCpC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAMjE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK7B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAKtC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO;IAU1D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5C;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKlD,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAKhE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE;IAKpD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIxC;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IA4DpB;;;;;OAKG;IACH,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAkB7C;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IA2BhE,0CAA0C;IAC1C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAQ7D;;;;;OAKG;IACH,gBAAgB,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE;IAQrE;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAWjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IAwG9F;;;;;;;;OAQG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAW7B;;;;;;;;OAQG;IACH,yBAAyB,IAAI,GAAG,CAAC,MAAM,CAAC;IAaxC,0BAA0B;IAC1B,OAAO,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAI/E"}
@@ -1,3 +1,4 @@
1
+ import { SourceIdentityError } from '../source-identity.js';
1
2
  /**
2
3
  * 知识库文件(`<库 id>/knowledge.db`):**正文、版本、血缘的唯一存储**。
3
4
  *
@@ -48,7 +49,7 @@ export const KNOWLEDGE_DB_APPLICATION_ID = 0x544B4244;
48
49
  * 旧库会在打开时做一次**事务化就地迁移**。知识库是用户数据,不能因为存储层增加了
49
50
  * 一列或调整了主键就要求用户重新导入;只有比当前版本更新的库才拒绝打开。
50
51
  */
51
- export const KNOWLEDGE_DB_SCHEMA = 7;
52
+ export const KNOWLEDGE_DB_SCHEMA = 9;
52
53
  /**
53
54
  * 行上的坐标 → `CardCoordinate`。**三列全空返回 `undefined`**(这张卡还没有坐标)。
54
55
  *
@@ -137,6 +138,15 @@ CREATE TABLE IF NOT EXISTS card_event (
137
138
  );
138
139
  CREATE INDEX IF NOT EXISTS card_event_event_idx ON card_event(event_id);
139
140
  `;
141
+ const SOURCE_IDENTITY_SCHEMA_SQL = `
142
+ CREATE TABLE IF NOT EXISTS source_identity (
143
+ system TEXT NOT NULL, scope TEXT NOT NULL, document_type TEXT NOT NULL, document_id TEXT NOT NULL,
144
+ source_id TEXT NOT NULL, rule TEXT NOT NULL, url TEXT,
145
+ PRIMARY KEY(system, scope, document_type, document_id)
146
+ );
147
+ CREATE INDEX IF NOT EXISTS source_identity_source ON source_identity(source_id);
148
+ CREATE UNIQUE INDEX IF NOT EXISTS source_identity_primary ON source_identity(source_id) WHERE rule <> 'url-v1';
149
+ `;
140
150
  function schemaSql() {
141
151
  return `
142
152
  CREATE TABLE IF NOT EXISTS blob (
@@ -159,6 +169,8 @@ CREATE TABLE IF NOT EXISTS source (
159
169
  original_bytes INTEGER
160
170
  );
161
171
 
172
+ ${SOURCE_IDENTITY_SCHEMA_SQL}
173
+
162
174
  CREATE TABLE IF NOT EXISTS card (
163
175
  -- 坐标是卡片身份。entity_id 是旧接口、版本和关联表继续使用的稳定别名。
164
176
  coordinate_key TEXT PRIMARY KEY NOT NULL,
@@ -398,6 +410,12 @@ function migrateSchema(db, fromVersion) {
398
410
  return;
399
411
  db.exec('BEGIN IMMEDIATE');
400
412
  try {
413
+ if (fromVersion === 8) {
414
+ db.exec(SOURCE_IDENTITY_SCHEMA_SQL);
415
+ db.exec(`PRAGMA user_version = ${KNOWLEDGE_DB_SCHEMA}`);
416
+ db.exec('COMMIT');
417
+ return;
418
+ }
401
419
  addColumnIfMissing(db, 'blob', 'bytes', '"bytes" INTEGER NOT NULL DEFAULT 0');
402
420
  rebuildSourceTableForSchemaMigration(db);
403
421
  addColumnIfMissing(db, 'source', 'original_rel', '"original_rel" TEXT');
@@ -411,6 +429,20 @@ function migrateSchema(db, fromVersion) {
411
429
  addColumnIfMissing(db, 'card', 'scene_id', '"scene_id" TEXT NOT NULL DEFAULT \'\'');
412
430
  // 其他模块可能已经先建了自己的表;schemaSql 使用 IF NOT EXISTS,可安全补齐剩余结构和索引。
413
431
  db.exec(schemaSql());
432
+ // Rekey typed Wiki rows without changing entity IDs, content, reviews or revisions.
433
+ const wikiRows = db.prepare('SELECT entity_id,coordinate_key,object_id,action_id,scene_id,frontmatter FROM card').all();
434
+ for (const row of wikiRows) {
435
+ const metadata = parseFrontmatter(String(row.frontmatter)).metadata;
436
+ const kind = metadata?.wiki_kind;
437
+ const coordinate = coordinateOfRow(row);
438
+ if (!coordinate || (kind !== 'fact' && kind !== 'way'))
439
+ continue;
440
+ const key = cardCoordinateKey(coordinate, kind);
441
+ const holder = db.prepare('SELECT entity_id FROM card WHERE coordinate_key=?').get(key);
442
+ if (holder && holder.entity_id !== row.entity_id)
443
+ continue;
444
+ db.prepare('UPDATE card SET coordinate_key=? WHERE entity_id=?').run(key, String(row.entity_id));
445
+ }
414
446
  db.exec(`PRAGMA application_id = ${KNOWLEDGE_DB_APPLICATION_ID}`);
415
447
  db.exec(`PRAGMA user_version = ${KNOWLEDGE_DB_SCHEMA}`);
416
448
  db.exec('COMMIT');
@@ -534,6 +566,15 @@ export class KnowledgeTx {
534
566
  .run(record.sourceId, record.title, record.externalId ?? null, JSON.stringify(frontmatter), 0, record.createdAt, record.updatedAt, original?.rel ?? null, original?.sha256 ?? null, original?.bytes ?? null);
535
567
  });
536
568
  }
569
+ bindSourceIdentity(identity, sourceId) {
570
+ if (!this.db.source(sourceId))
571
+ throw new SourceIdentityError('SOURCE_ORIGIN_UNAVAILABLE', '身份绑定的来源必须存在。', [sourceId]);
572
+ const owner = this.db.sourceIdByIdentity(identity);
573
+ if (owner && owner !== sourceId)
574
+ throw new SourceIdentityError('SOURCE_ORIGIN_CONFLICT', '来源身份已绑定另一份文档。', [owner, sourceId]);
575
+ this.raw('INSERT INTO source_identity(system,scope,document_type,document_id,source_id,rule,url) VALUES (?,?,?,?,?,?,?) ON CONFLICT(system,scope,document_type,document_id) DO NOTHING')
576
+ .run(identity.system, identity.scope, identity.documentType, identity.documentId, sourceId, identity.rule, identity.url ?? null);
577
+ }
537
578
  /**
538
579
  * 写一张卡片。判据同样是正文哈希。
539
580
  *
@@ -551,7 +592,7 @@ export class KnowledgeTx {
551
592
  const storedCoordinate = card.coordinate ?? (existing === undefined ? undefined : coordinateOfRow(existing));
552
593
  const coordinateKey = storedCoordinate === undefined
553
594
  ? legacyCardStorageKey(card.entityId)
554
- : cardCoordinateKey(storedCoordinate);
595
+ : cardCoordinateKey(storedCoordinate, card.metadata.wiki_kind === 'fact' || card.metadata.wiki_kind === 'way' ? card.metadata.wiki_kind : undefined);
555
596
  const oldKey = typeof existing?.coordinate_key === 'string' ? existing.coordinate_key : undefined;
556
597
  if (existing !== undefined) {
557
598
  if (!allowCoordinateMove && oldKey !== undefined && oldKey !== coordinateKey && !oldKey.startsWith('legacy:')) {
@@ -636,6 +677,10 @@ export class KnowledgeTx {
636
677
  /** 删实体本体。**`revision` 行与 `blob` 不动** —— 删除即灭史是 0062 之前的缺陷 5。 */
637
678
  removeEntity(kind, id) {
638
679
  this.raw(`DELETE FROM ${kind === 'source' ? 'source' : 'card'} WHERE entity_id = ?`).run(id);
680
+ if (kind === 'source')
681
+ this.raw('DELETE FROM source_identity WHERE source_id=?').run(id);
682
+ if (kind === 'source' && tableExists(this.db.connection(), 'pipeline_chunks'))
683
+ this.raw('DELETE FROM pipeline_chunks WHERE source_id=?').run(id);
639
684
  this.raw('DELETE FROM entity_asset WHERE entity_kind = ? AND entity_id = ?').run(kind, id);
640
685
  /*
641
686
  * 卡片的知识落位跟着走(0069)。这里没有外键,所以它是**代码责任** —— 漏掉的话,
@@ -690,6 +735,7 @@ export class KnowledgeDb {
690
735
  let db;
691
736
  try {
692
737
  db = new DatabaseSync(file);
738
+ db.exec('PRAGMA busy_timeout = 5000');
693
739
  }
694
740
  catch (cause) {
695
741
  return { ok: false, code: 'OPEN_FAILED', message: `打开失败:${cause instanceof Error ? cause.message : String(cause)}` };
@@ -1027,6 +1073,15 @@ export class KnowledgeDb {
1027
1073
  const row = this.raw('SELECT entity_id FROM source WHERE title = ? LIMIT 1').get(title);
1028
1074
  return typeof row?.entity_id === 'string' ? row.entity_id : undefined;
1029
1075
  }
1076
+ sourceIdByIdentity(identity) {
1077
+ const row = this.raw('SELECT source_id FROM source_identity WHERE system=? AND scope=? AND document_type=? AND document_id=?')
1078
+ .get(identity.system, identity.scope, identity.documentType, identity.documentId);
1079
+ return row?.source_id;
1080
+ }
1081
+ sourceIdentities(sourceId) {
1082
+ const rows = this.raw('SELECT * FROM source_identity WHERE source_id=? ORDER BY system,scope,document_type,document_id').all(sourceId);
1083
+ return rows.map(row => ({ system: row.system, scope: row.scope, documentType: row.document_type, documentId: row.document_id, rule: row.rule, ...(row.url ? { url: row.url } : {}) }));
1084
+ }
1030
1085
  card(id) {
1031
1086
  return this.readEntities('card', id)[0];
1032
1087
  }