@dikolab/kbdb 0.4.3 → 0.6.0

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 (224) hide show
  1. package/CLA.md +68 -0
  2. package/LICENSE +676 -12
  3. package/LICENSING.md +58 -0
  4. package/README.md +50 -27
  5. package/README.md.bak +320 -0
  6. package/dist/README.md +320 -0
  7. package/dist/{chunk-BJXEVALU.mjs → chunk-QLJ33C74.mjs} +44 -44
  8. package/dist/chunk-QLJ33C74.mjs.map +7 -0
  9. package/dist/cli.cjs +550 -232
  10. package/dist/cli.cjs.map +4 -4
  11. package/dist/cli.d.ts +0 -8
  12. package/dist/cli.mjs +483 -154
  13. package/dist/cli.mjs.map +4 -4
  14. package/dist/kbdb-worker.cjs +36 -5
  15. package/dist/kbdb-worker.cjs.map +3 -3
  16. package/dist/mod.cjs +89 -30
  17. package/dist/mod.cjs.map +4 -4
  18. package/dist/mod.mjs +88 -30
  19. package/dist/mod.mjs.map +4 -4
  20. package/dist/src/cli.d.ts +0 -8
  21. package/dist/src/shared/cli/constants/defaults.constant.d.ts +1 -1
  22. package/dist/src/shared/cli/constants/recfile-command-field-map.constant.d.ts +8 -0
  23. package/dist/src/shared/cli/constants/recfile-field-maps.constant.d.ts +21 -0
  24. package/dist/src/shared/cli/functions/compute-directory-level.function.d.ts +14 -0
  25. package/dist/src/shared/cli/functions/dispatch-command.function.d.ts +2 -28
  26. package/dist/src/shared/cli/functions/format-command-output.function.d.ts +14 -0
  27. package/dist/src/shared/cli/functions/format-db-not-found.function.d.ts +20 -0
  28. package/dist/src/shared/cli/functions/format-output.function.d.ts +1 -0
  29. package/dist/src/shared/cli/functions/format-recfile-output.function.d.ts +11 -0
  30. package/dist/src/shared/cli/functions/render-recfile-value.function.d.ts +11 -0
  31. package/dist/src/shared/cli/functions/resolve-db-dir.function.d.ts +24 -0
  32. package/dist/src/shared/cli/functions/resolve-recfile-key.function.d.ts +9 -0
  33. package/dist/src/shared/cli/functions/run-db-path.function.d.ts +10 -0
  34. package/dist/src/shared/cli/functions/run-export.function.d.ts +8 -4
  35. package/dist/src/shared/cli/functions/run-import.function.d.ts +4 -0
  36. package/dist/src/shared/cli/functions/run-learn.function.d.ts +12 -0
  37. package/dist/src/shared/cli/index.d.ts +4 -1
  38. package/dist/src/shared/cli/typings/cli-options.interface.d.ts +9 -2
  39. package/dist/src/shared/cli/typings/db-resolution.interface.d.ts +9 -0
  40. package/dist/src/shared/cli/typings/recfile-field-map.type.d.ts +10 -0
  41. package/dist/src/shared/version/constants/version.constant.d.ts +1 -1
  42. package/dist/src/shared/wasm-codec/functions/decode-option-u8.function.d.ts +9 -0
  43. package/dist/src/shared/wasm-codec/functions/decode-section-records.function.d.ts +4 -0
  44. package/dist/src/shared/wasm-codec/functions/encode-add-section-params.function.d.ts +2 -45
  45. package/dist/src/shared/wasm-codec/functions/encode-update-section-params.function.d.ts +10 -1
  46. package/dist/src/shared/wasm-codec/index.d.ts +1 -1
  47. package/dist/src/shared/wasm-codec/typings/add-section-input.model.d.ts +6 -0
  48. package/dist/src/shared/wasm-codec/typings/section-record-trailing.model.d.ts +5 -0
  49. package/dist/src/shared/wasm-codec/typings/section-record.model.d.ts +5 -0
  50. package/dist/src/shared/worker-client/functions/build-deno-permissions.function.d.ts +11 -0
  51. package/dist/src/shared/worker-client/functions/read-crash-reason.function.d.ts +9 -0
  52. package/dist/src/shared/worker-client/functions/resolve-spawn-script.function.d.ts +6 -0
  53. package/dist/src/shared/worker-client/functions/spawn-daemon.function.d.ts +1 -1
  54. package/dist/src/shared/worker-client/typings/section.model.d.ts +5 -0
  55. package/dist/src/shared/worker-client/typings/worker-client-options.interface.d.ts +0 -6
  56. package/dist/src/shared/worker-daemon/functions/count-files.function.d.ts +12 -0
  57. package/dist/src/shared/worker-daemon/functions/handle-import.function.d.ts +2 -0
  58. package/dist/src/shared/worker-daemon/functions/handle-read-ops.function.d.ts +8 -0
  59. package/dist/src/shared/worker-daemon/functions/validate-daemon-path.function.d.ts +15 -0
  60. package/dist/src/worker.d.ts +0 -7
  61. package/dist/wasm/default-embedding/kbdb_default_embedding_bg.wasm +0 -0
  62. package/dist/wasm/default-embedding/package.json +1 -1
  63. package/dist/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
  64. package/dist/wasm/fs-database/package.json +1 -1
  65. package/dist/wasm/fs-migration/kbdb_fs_migration_bg.wasm +0 -0
  66. package/dist/wasm/fs-migration/package.json +1 -1
  67. package/dist/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
  68. package/dist/wasm/kb-worker/package.json +1 -1
  69. package/dist/wasm/query-parser/kbdb_query_parser_bg.wasm +0 -0
  70. package/dist/wasm/query-parser/package.json +1 -1
  71. package/dist/worker.d.ts +0 -7
  72. package/dist/worker.mjs +37 -6
  73. package/dist/worker.mjs.map +3 -3
  74. package/package.json +13 -12
  75. package/dist/chunk-BJXEVALU.mjs.map +0 -7
  76. package/dist/src/shared/cli/functions/resolve-raw-db-path.function.d.ts +0 -10
  77. package/docs/details/README.md +0 -30
  78. package/docs/details/agent-tooling.md +0 -132
  79. package/docs/details/cli.md +0 -777
  80. package/docs/details/knowledge-base.md +0 -180
  81. package/docs/details/library-api.md +0 -495
  82. package/docs/details/mcp-server.md +0 -482
  83. package/docs/details/search-and-ranking.md +0 -575
  84. package/docs/details/storage.md +0 -531
  85. package/docs/goals/agents.md +0 -751
  86. package/docs/goals/architecture.svg +0 -198
  87. package/docs/goals/auto-capture.md +0 -378
  88. package/docs/goals/benchmarking.md +0 -296
  89. package/docs/goals/cli.md +0 -2654
  90. package/docs/goals/concurrency.md +0 -259
  91. package/docs/goals/content-composer.md +0 -609
  92. package/docs/goals/content-parser.md +0 -279
  93. package/docs/goals/database.md +0 -1679
  94. package/docs/goals/document.md +0 -368
  95. package/docs/goals/hybrid-search.md +0 -465
  96. package/docs/goals/mcp.md +0 -1541
  97. package/docs/goals/overview.md +0 -124
  98. package/docs/goals/query-parser.md +0 -373
  99. package/docs/goals/query-result.md +0 -860
  100. package/docs/goals/semantic-dedup.md +0 -233
  101. package/docs/goals/skills.md +0 -810
  102. package/docs/goals/sync.md +0 -217
  103. package/docs/goals/worker-client.md +0 -1005
  104. package/docs/goals/worker-daemon.md +0 -1547
  105. package/docs/modules/overview.md +0 -319
  106. package/docs/modules/rust/embedding/module.md +0 -91
  107. package/docs/modules/rust/fs-database/functions/document.md +0 -48
  108. package/docs/modules/rust/fs-database/functions/integrity.md +0 -79
  109. package/docs/modules/rust/fs-database/functions/io.md +0 -87
  110. package/docs/modules/rust/fs-database/functions/module.md +0 -22
  111. package/docs/modules/rust/fs-database/functions/query-exec.md +0 -44
  112. package/docs/modules/rust/fs-database/functions/section.md +0 -76
  113. package/docs/modules/rust/fs-database/indexes/btree.md +0 -35
  114. package/docs/modules/rust/fs-database/indexes/corpus.md +0 -61
  115. package/docs/modules/rust/fs-database/indexes/inverted.md +0 -60
  116. package/docs/modules/rust/fs-database/indexes/module.md +0 -64
  117. package/docs/modules/rust/fs-database/indexes/positional.md +0 -39
  118. package/docs/modules/rust/fs-database/indexes/vectors.md +0 -110
  119. package/docs/modules/rust/fs-database/module.md +0 -150
  120. package/docs/modules/rust/fs-database/types/catalog.md +0 -53
  121. package/docs/modules/rust/fs-database/types/module.md +0 -12
  122. package/docs/modules/rust/fs-database/types/section.md +0 -127
  123. package/docs/modules/rust/kb-worker/functions/compose.md +0 -57
  124. package/docs/modules/rust/kb-worker/functions/module.md +0 -20
  125. package/docs/modules/rust/kb-worker/functions/retrieve.md +0 -194
  126. package/docs/modules/rust/kb-worker/functions/search.md +0 -173
  127. package/docs/modules/rust/kb-worker/functions/write.md +0 -172
  128. package/docs/modules/rust/kb-worker/module.md +0 -171
  129. package/docs/modules/rust/kb-worker/types/cache.md +0 -90
  130. package/docs/modules/rust/kb-worker/types/context.md +0 -26
  131. package/docs/modules/rust/kb-worker/types/module.md +0 -16
  132. package/docs/modules/rust/kb-worker/types/status.md +0 -29
  133. package/docs/modules/rust/kb-worker/types/token.md +0 -50
  134. package/docs/modules/rust/overview.md +0 -531
  135. package/docs/modules/rust/query-parser/functions/extract.md +0 -56
  136. package/docs/modules/rust/query-parser/functions/module.md +0 -18
  137. package/docs/modules/rust/query-parser/functions/parse.md +0 -33
  138. package/docs/modules/rust/query-parser/functions/pipeline.md +0 -9
  139. package/docs/modules/rust/query-parser/functions/rank.md +0 -85
  140. package/docs/modules/rust/query-parser/module.md +0 -131
  141. package/docs/modules/rust/query-parser/types/cache.md +0 -39
  142. package/docs/modules/rust/query-parser/types/keyphrase.md +0 -71
  143. package/docs/modules/rust/query-parser/types/module.md +0 -18
  144. package/docs/modules/rust/query-parser/types/token.md +0 -46
  145. package/docs/modules/rust/shared/content-composer/functions.md +0 -114
  146. package/docs/modules/rust/shared/content-composer/module.md +0 -147
  147. package/docs/modules/rust/shared/content-composer/types.md +0 -93
  148. package/docs/modules/rust/shared/content-parser/functions.md +0 -72
  149. package/docs/modules/rust/shared/content-parser/module.md +0 -99
  150. package/docs/modules/rust/shared/content-parser/types.md +0 -71
  151. package/docs/modules/rust/shared/corpus/module.md +0 -24
  152. package/docs/modules/rust/shared/corpus/types.md +0 -141
  153. package/docs/modules/rust/shared/document/module.md +0 -25
  154. package/docs/modules/rust/shared/document/types.md +0 -154
  155. package/docs/modules/rust/shared/encode/module.md +0 -22
  156. package/docs/modules/rust/shared/encode/traits.md +0 -304
  157. package/docs/modules/rust/shared/error/module.md +0 -28
  158. package/docs/modules/rust/shared/error/types.md +0 -302
  159. package/docs/modules/rust/shared/kbid/module.md +0 -24
  160. package/docs/modules/rust/shared/kbid/types.md +0 -147
  161. package/docs/modules/rust/shared/memory/functions.md +0 -209
  162. package/docs/modules/rust/shared/memory/module.md +0 -24
  163. package/docs/modules/rust/shared/module.md +0 -196
  164. package/docs/modules/rust/shared/pipeline/functions.md +0 -141
  165. package/docs/modules/rust/shared/pipeline/module.md +0 -62
  166. package/docs/modules/rust/shared/pipeline/types.md +0 -43
  167. package/docs/modules/rust/shared/query/module.md +0 -27
  168. package/docs/modules/rust/shared/query/types.md +0 -236
  169. package/docs/modules/rust/shared/section/module.md +0 -25
  170. package/docs/modules/rust/shared/section/types.md +0 -294
  171. package/docs/modules/rust/shared/term/module.md +0 -25
  172. package/docs/modules/rust/shared/term/types.md +0 -139
  173. package/docs/modules/typescript/cli.md +0 -131
  174. package/docs/modules/typescript/kbdb-worker.md +0 -150
  175. package/docs/modules/typescript/overview.md +0 -400
  176. package/docs/modules/typescript/shared/auto-capture/module.md +0 -73
  177. package/docs/modules/typescript/shared/cli/constants.md +0 -23
  178. package/docs/modules/typescript/shared/cli/functions.md +0 -809
  179. package/docs/modules/typescript/shared/cli/module.md +0 -138
  180. package/docs/modules/typescript/shared/cli/typings.md +0 -197
  181. package/docs/modules/typescript/shared/embedding/functions.md +0 -200
  182. package/docs/modules/typescript/shared/embedding/module.md +0 -77
  183. package/docs/modules/typescript/shared/embedding/typings.md +0 -124
  184. package/docs/modules/typescript/shared/hash/functions.md +0 -20
  185. package/docs/modules/typescript/shared/hash/module.md +0 -21
  186. package/docs/modules/typescript/shared/log/constants.md +0 -82
  187. package/docs/modules/typescript/shared/log/functions.md +0 -131
  188. package/docs/modules/typescript/shared/log/module.md +0 -153
  189. package/docs/modules/typescript/shared/log/typings.md +0 -82
  190. package/docs/modules/typescript/shared/mcp/classes.md +0 -179
  191. package/docs/modules/typescript/shared/mcp/functions.md +0 -386
  192. package/docs/modules/typescript/shared/mcp/module.md +0 -160
  193. package/docs/modules/typescript/shared/mcp/typings.md +0 -529
  194. package/docs/modules/typescript/shared/module.md +0 -110
  195. package/docs/modules/typescript/shared/platform/functions.md +0 -42
  196. package/docs/modules/typescript/shared/platform/module.md +0 -25
  197. package/docs/modules/typescript/shared/runtime/functions.md +0 -26
  198. package/docs/modules/typescript/shared/runtime/module.md +0 -27
  199. package/docs/modules/typescript/shared/runtime/typings.md +0 -13
  200. package/docs/modules/typescript/shared/version/module.md +0 -27
  201. package/docs/modules/typescript/shared/wasm-codec/functions.md +0 -391
  202. package/docs/modules/typescript/shared/wasm-codec/module.md +0 -98
  203. package/docs/modules/typescript/shared/worker-client/classes.md +0 -264
  204. package/docs/modules/typescript/shared/worker-client/functions.md +0 -175
  205. package/docs/modules/typescript/shared/worker-client/module.md +0 -92
  206. package/docs/modules/typescript/shared/worker-client/typings.md +0 -511
  207. package/docs/modules/typescript/shared/worker-daemon/classes.md +0 -239
  208. package/docs/modules/typescript/shared/worker-daemon/constants.md +0 -37
  209. package/docs/modules/typescript/shared/worker-daemon/functions.md +0 -234
  210. package/docs/modules/typescript/shared/worker-daemon/module.md +0 -118
  211. package/docs/modules/typescript/shared/worker-daemon/typings.md +0 -132
  212. package/docs/overview.md +0 -191
  213. package/docs/release-notes/0.1.0.md +0 -189
  214. package/docs/release-notes/0.1.1.md +0 -46
  215. package/docs/release-notes/0.1.2.md +0 -38
  216. package/docs/release-notes/0.1.3.md +0 -42
  217. package/docs/release-notes/0.2.0.md +0 -147
  218. package/docs/release-notes/0.3.0.md +0 -89
  219. package/docs/release-notes/0.3.1.md +0 -121
  220. package/docs/release-notes/0.3.2.md +0 -64
  221. package/docs/release-notes/0.4.0.md +0 -80
  222. package/docs/release-notes/0.4.1.md +0 -149
  223. package/docs/release-notes/0.4.3.md +0 -60
  224. package/docs/release-notes/README.md +0 -13
@@ -1,279 +0,0 @@
1
- # Content Parser -- Marker Extraction
2
-
3
- *A format-agnostic parser that extracts embedding
4
- and link markers from section content, producing
5
- structured reference lists for result set
6
- resolution.*
7
-
8
- ## Goal
9
-
10
- The content parser scans any text-based content for
11
- `$(type: value)` markers and returns a structured
12
- list of extracted references. It is the engine
13
- behind the `references` field in retrieval and
14
- search result sets -- given a section's content, it
15
- identifies every embedded or linked section and
16
- document so the caller can resolve them.
17
-
18
- The parser is **format-agnostic**. It recognizes the
19
- `$(type: value)` escape sequence regardless of the
20
- surrounding text format -- markdown, source code,
21
- plain text, or any other UTF-8 content. The marker
22
- syntax is independent of the host format.
23
-
24
- See [Document](document.md) for marker syntax and
25
- semantics (what each marker type means, how it
26
- renders). This document specifies the **extraction
27
- mechanism** -- how markers are found in text and
28
- returned as structured data.
29
-
30
- ## Input
31
-
32
- The parser accepts any **UTF-8 string**. This
33
- includes:
34
-
35
- - **Text section content** -- markdown body text
36
- (the primary use case).
37
- - **Code section content** -- raw source code. Code
38
- sections may contain markers in comments or string
39
- literals (though uncommon).
40
- - **Plain text** -- any unstructured text.
41
-
42
- Image sections (`image/*`) contain base64-encoded
43
- binary data and cannot contain markers. The caller
44
- should skip image sections -- the parser would find
45
- no markers in base64 content.
46
-
47
- ## Output
48
-
49
- The parser returns an ordered list of extracted
50
- markers. Each marker is a structured record:
51
-
52
- ```rust
53
- pub struct ExtractedContentMarker {
54
- /// The marker category (Image, Code, Text, etc).
55
- pub marker_type: ContentMarkerType,
56
- /// The value inside the marker (kb-id or doc-id).
57
- pub value: String,
58
- /// Byte offset of the marker start (`$`) in the
59
- /// original text.
60
- pub offset: usize,
61
- /// Byte length of the entire marker, including
62
- /// the `$(` and `)` delimiters.
63
- pub length: usize,
64
- }
65
-
66
- pub enum ContentMarkerType {
67
- /// `$(image: {kbid})` -- image section embedding.
68
- Image,
69
- /// `$(code: {kbid})` -- code section embedding.
70
- Code,
71
- /// `$(text: {kbid})` -- text section embedding.
72
- Text,
73
- /// `$(document: {docid})` -- document embedding.
74
- Document,
75
- /// `$(link: {kbid})` -- section cross-reference.
76
- Link,
77
- /// `$(doc-link: {docid})` -- document
78
- /// cross-reference.
79
- DocLink,
80
- }
81
- ```
82
-
83
- Markers are returned in **document order** -- the
84
- order they appear in the input text, from lowest to
85
- highest byte offset.
86
-
87
- ## Extraction Rules
88
-
89
- The parser uses the same syntax rules defined in
90
- [Document](document.md):
91
-
92
- 1. A marker starts with `$(` and ends with the next
93
- `)`.
94
- 2. The type identifier is matched against the six
95
- recognized prefixes:
96
- - `$(image:` -> `ContentMarkerType::Image`
97
- - `$(code:` -> `ContentMarkerType::Code`
98
- - `$(text:` -> `ContentMarkerType::Text`
99
- - `$(document:` -> `ContentMarkerType::Document`
100
- - `$(link:` -> `ContentMarkerType::Link`
101
- - `$(doc-link:` -> `ContentMarkerType::DocLink`
102
- 3. Unrecognized prefixes (e.g. `$(formula:`) are
103
- **skipped** -- no `ExtractedContentMarker` is produced.
104
- 4. Unclosed markers (no closing `)` before end of
105
- input) are **skipped**.
106
- 5. The value is the text between the colon-space
107
- and the closing `)`, trimmed of leading and
108
- trailing whitespace.
109
-
110
- The parser performs a single left-to-right scan
111
- of the input. It does not modify the input text.
112
-
113
- ## API
114
-
115
- Two public functions in the `kbdb-shared` crate:
116
-
117
- ### `extract_content_markers`
118
-
119
- ```rust
120
- pub fn extract_content_markers(text: &str)
121
- -> Vec<ExtractedContentMarker>
122
- ```
123
-
124
- Scans the input text and returns all recognized
125
- markers in document order. Does not modify the
126
- input. Returns an empty `Vec` if no markers are
127
- found.
128
-
129
- ### `strip_content_markers`
130
-
131
- ```rust
132
- pub fn strip_content_markers(text: &str) -> String
133
- ```
134
-
135
- Returns a new string with all recognized markers
136
- removed. Whitespace left by marker removal is
137
- preserved; the caller should normalise whitespace
138
- if needed.
139
-
140
- This function replaces the current implementation
141
- in `shared/src/pipeline/markers.rs`. The
142
- existing `strip_content_markers()` recognizes only
143
- `$(image:)` and `$(code:)`. The shared version
144
- recognizes all six marker types.
145
-
146
- Both functions share the same scanning logic
147
- internally. `strip_content_markers` is equivalent to
148
- removing every character range identified by
149
- `extract_content_markers`.
150
-
151
- ## Recursive Resolution
152
-
153
- The parser itself is **non-recursive**. It performs
154
- a single-pass extraction on one text string and
155
- returns the markers found in that string. It does
156
- not follow references or read other sections.
157
-
158
- **Recursive reference resolution** -- following
159
- `$(text: {kbid})` and `$(document: {docid})`
160
- markers into their content to collect transitive
161
- references -- is the responsibility of the
162
- **caller**. The typical caller is the `kb-worker`
163
- orchestration crate, which:
164
-
165
- 1. Receives a section's content.
166
- 2. Calls `extract_content_markers()` to find direct
167
- references.
168
- 3. Fetches each referenced section or document.
169
- 4. For `$(text:)` and `$(document:)` references,
170
- calls `extract_content_markers()` on the referenced
171
- content (recursing).
172
- 5. Collects all unique references into a flat
173
- `references` array.
174
- 6. Uses a **visited set** to detect and break
175
- circular references (see
176
- [Document -- Recursion](document.md#recursion-and-circular-references)).
177
-
178
- The parser provides the building block; the
179
- orchestration layer provides the recursion.
180
-
181
- ## Integration Points
182
-
183
- ### Query Parser
184
-
185
- The `query-parser` crate imports `strip_content_markers()`
186
- from `kbdb-shared` for tokenization Pipeline
187
- Stage 1. This replaces the crate's earlier
188
- `strip_content_markers()` in `pipeline/markers.rs`, which
189
- recognized only `$(image:)` and `$(code:)`. The
190
- shared version recognizes all six marker types.
191
-
192
- See [Query Parser](query-parser.md) for the full
193
- tokenization pipeline.
194
-
195
- ### Filesystem Database
196
-
197
- The `fs-database` crate imports
198
- `extract_content_markers()` from `kbdb-shared` for
199
- **integrity checking**. When validating a section's
200
- content, the integrity checker extracts all markers
201
- and verifies that each referenced kb-id or doc-id
202
- exists and has the expected type.
203
-
204
- See [Database -- Integrity](database.md) for the
205
- full integrity specification.
206
-
207
- ### Worker Orchestration
208
-
209
- The `kb-worker` crate imports `extract_content_markers()`
210
- from `kbdb-shared` to build the `references` array
211
- in result sets. When a search or retrieval request
212
- returns sections, `kb-worker`:
213
-
214
- 1. Scans each returned section's content with
215
- `extract_content_markers()`.
216
- 2. Collects unique kb-ids and doc-ids.
217
- 3. Fetches the referenced sections and documents.
218
- 4. Recurses into `$(text:)` and `$(document:)`
219
- references to collect transitive references.
220
- 5. Deduplicates and returns the flat `references`
221
- array alongside the primary result data.
222
-
223
- ## Crate Placement
224
-
225
- The parser lives in the `kbdb-shared` rlib crate
226
- as a `content_parser` module:
227
-
228
- ```
229
- engine/crates/shared/src/
230
- content-parser/
231
- mod.rs -- re-exports
232
- types.rs -- ContentMarkerType, ExtractedContentMarker
233
- extract.rs -- extract_content_markers()
234
- strip.rs -- strip_content_markers()
235
- ```
236
-
237
- Added to `lib.rs` as `pub mod content_parser` alongside the
238
- existing modules (memory, encode, kbid, term,
239
- section, document, query, corpus, error).
240
-
241
- The `kbdb-shared` crate is an rlib (not a cdylib),
242
- so it produces no WASM artifact of its own. Its code
243
- is compiled into whichever cdylib crate imports it
244
- (`query-parser`, `fs-database`, `kb-worker`), with
245
- unused code eliminated per-consumer.
246
-
247
- ## Testing
248
-
249
- Unit tests for `extract_content_markers()`:
250
-
251
- - Empty input returns empty vec.
252
- - Single `$(image: {kbid})` returns one marker with
253
- correct type, value, offset, and length.
254
- - All six marker types recognized individually.
255
- - Multiple markers in sequence, returned in
256
- document order.
257
- - Adjacent markers with no space between them.
258
- - Unrecognized `$(formula: ...)` produces no marker.
259
- - Unclosed marker (no `)`) produces no marker.
260
- - Unicode text surrounding markers -- offsets are
261
- byte-accurate.
262
- - Marker-only input (no surrounding text).
263
- - Whitespace variations inside markers (e.g.
264
- extra spaces after colon).
265
-
266
- Unit tests for `strip_content_markers()`:
267
-
268
- - Empty input returns empty string.
269
- - Plain text with no markers returns unchanged.
270
- - All six marker types stripped.
271
- - Multiple markers stripped in one pass.
272
- - Unrecognized markers left untouched.
273
- - Unclosed markers left untouched.
274
- - Unicode text preserved around stripped markers.
275
-
276
- Tests live in the `kbdb-shared` crate:
277
- `engine/crates/shared/src/content-parser/extract.rs` and
278
- `engine/crates/shared/src/content-parser/strip.rs` (inline
279
- `#[cfg(test)]` modules).