@dikolab/kbdb 0.5.0 → 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 +47 -24
  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/package.json +1 -1
  66. package/dist/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
  67. package/dist/wasm/kb-worker/package.json +1 -1
  68. package/dist/wasm/query-parser/kbdb_query_parser_bg.wasm +0 -0
  69. package/dist/wasm/query-parser/package.json +1 -1
  70. package/dist/worker.d.ts +0 -7
  71. package/dist/worker.mjs +37 -6
  72. package/dist/worker.mjs.map +3 -3
  73. package/package.json +10 -9
  74. package/dist/chunk-BJXEVALU.mjs.map +0 -7
  75. package/dist/src/shared/cli/functions/resolve-raw-db-path.function.d.ts +0 -10
  76. package/docs/details/README.md +0 -30
  77. package/docs/details/agent-tooling.md +0 -132
  78. package/docs/details/cli.md +0 -777
  79. package/docs/details/knowledge-base.md +0 -180
  80. package/docs/details/library-api.md +0 -495
  81. package/docs/details/mcp-server.md +0 -482
  82. package/docs/details/search-and-ranking.md +0 -575
  83. package/docs/details/storage.md +0 -531
  84. package/docs/goals/agents.md +0 -751
  85. package/docs/goals/architecture.svg +0 -198
  86. package/docs/goals/auto-capture.md +0 -378
  87. package/docs/goals/benchmarking.md +0 -296
  88. package/docs/goals/cli.md +0 -2654
  89. package/docs/goals/concurrency.md +0 -259
  90. package/docs/goals/content-composer.md +0 -609
  91. package/docs/goals/content-parser.md +0 -279
  92. package/docs/goals/database.md +0 -1679
  93. package/docs/goals/document.md +0 -368
  94. package/docs/goals/hybrid-search.md +0 -465
  95. package/docs/goals/mcp.md +0 -1541
  96. package/docs/goals/overview.md +0 -124
  97. package/docs/goals/query-parser.md +0 -373
  98. package/docs/goals/query-result.md +0 -860
  99. package/docs/goals/semantic-dedup.md +0 -233
  100. package/docs/goals/skills.md +0 -810
  101. package/docs/goals/sync.md +0 -217
  102. package/docs/goals/worker-client.md +0 -1005
  103. package/docs/goals/worker-daemon.md +0 -1547
  104. package/docs/modules/overview.md +0 -319
  105. package/docs/modules/rust/embedding/module.md +0 -91
  106. package/docs/modules/rust/fs-database/functions/document.md +0 -48
  107. package/docs/modules/rust/fs-database/functions/integrity.md +0 -79
  108. package/docs/modules/rust/fs-database/functions/io.md +0 -87
  109. package/docs/modules/rust/fs-database/functions/module.md +0 -22
  110. package/docs/modules/rust/fs-database/functions/query-exec.md +0 -44
  111. package/docs/modules/rust/fs-database/functions/section.md +0 -76
  112. package/docs/modules/rust/fs-database/indexes/btree.md +0 -35
  113. package/docs/modules/rust/fs-database/indexes/corpus.md +0 -61
  114. package/docs/modules/rust/fs-database/indexes/inverted.md +0 -60
  115. package/docs/modules/rust/fs-database/indexes/module.md +0 -64
  116. package/docs/modules/rust/fs-database/indexes/positional.md +0 -39
  117. package/docs/modules/rust/fs-database/indexes/vectors.md +0 -110
  118. package/docs/modules/rust/fs-database/module.md +0 -150
  119. package/docs/modules/rust/fs-database/types/catalog.md +0 -53
  120. package/docs/modules/rust/fs-database/types/module.md +0 -12
  121. package/docs/modules/rust/fs-database/types/section.md +0 -127
  122. package/docs/modules/rust/kb-worker/functions/compose.md +0 -57
  123. package/docs/modules/rust/kb-worker/functions/module.md +0 -20
  124. package/docs/modules/rust/kb-worker/functions/retrieve.md +0 -194
  125. package/docs/modules/rust/kb-worker/functions/search.md +0 -173
  126. package/docs/modules/rust/kb-worker/functions/write.md +0 -172
  127. package/docs/modules/rust/kb-worker/module.md +0 -171
  128. package/docs/modules/rust/kb-worker/types/cache.md +0 -90
  129. package/docs/modules/rust/kb-worker/types/context.md +0 -26
  130. package/docs/modules/rust/kb-worker/types/module.md +0 -16
  131. package/docs/modules/rust/kb-worker/types/status.md +0 -29
  132. package/docs/modules/rust/kb-worker/types/token.md +0 -50
  133. package/docs/modules/rust/overview.md +0 -531
  134. package/docs/modules/rust/query-parser/functions/extract.md +0 -56
  135. package/docs/modules/rust/query-parser/functions/module.md +0 -18
  136. package/docs/modules/rust/query-parser/functions/parse.md +0 -33
  137. package/docs/modules/rust/query-parser/functions/pipeline.md +0 -9
  138. package/docs/modules/rust/query-parser/functions/rank.md +0 -85
  139. package/docs/modules/rust/query-parser/module.md +0 -131
  140. package/docs/modules/rust/query-parser/types/cache.md +0 -39
  141. package/docs/modules/rust/query-parser/types/keyphrase.md +0 -71
  142. package/docs/modules/rust/query-parser/types/module.md +0 -18
  143. package/docs/modules/rust/query-parser/types/token.md +0 -46
  144. package/docs/modules/rust/shared/content-composer/functions.md +0 -114
  145. package/docs/modules/rust/shared/content-composer/module.md +0 -147
  146. package/docs/modules/rust/shared/content-composer/types.md +0 -93
  147. package/docs/modules/rust/shared/content-parser/functions.md +0 -72
  148. package/docs/modules/rust/shared/content-parser/module.md +0 -99
  149. package/docs/modules/rust/shared/content-parser/types.md +0 -71
  150. package/docs/modules/rust/shared/corpus/module.md +0 -24
  151. package/docs/modules/rust/shared/corpus/types.md +0 -141
  152. package/docs/modules/rust/shared/document/module.md +0 -25
  153. package/docs/modules/rust/shared/document/types.md +0 -154
  154. package/docs/modules/rust/shared/encode/module.md +0 -22
  155. package/docs/modules/rust/shared/encode/traits.md +0 -304
  156. package/docs/modules/rust/shared/error/module.md +0 -28
  157. package/docs/modules/rust/shared/error/types.md +0 -302
  158. package/docs/modules/rust/shared/kbid/module.md +0 -24
  159. package/docs/modules/rust/shared/kbid/types.md +0 -147
  160. package/docs/modules/rust/shared/memory/functions.md +0 -209
  161. package/docs/modules/rust/shared/memory/module.md +0 -24
  162. package/docs/modules/rust/shared/module.md +0 -196
  163. package/docs/modules/rust/shared/pipeline/functions.md +0 -141
  164. package/docs/modules/rust/shared/pipeline/module.md +0 -62
  165. package/docs/modules/rust/shared/pipeline/types.md +0 -43
  166. package/docs/modules/rust/shared/query/module.md +0 -27
  167. package/docs/modules/rust/shared/query/types.md +0 -236
  168. package/docs/modules/rust/shared/section/module.md +0 -25
  169. package/docs/modules/rust/shared/section/types.md +0 -294
  170. package/docs/modules/rust/shared/term/module.md +0 -25
  171. package/docs/modules/rust/shared/term/types.md +0 -139
  172. package/docs/modules/typescript/cli.md +0 -131
  173. package/docs/modules/typescript/kbdb-worker.md +0 -150
  174. package/docs/modules/typescript/overview.md +0 -400
  175. package/docs/modules/typescript/shared/auto-capture/module.md +0 -73
  176. package/docs/modules/typescript/shared/cli/constants.md +0 -23
  177. package/docs/modules/typescript/shared/cli/functions.md +0 -809
  178. package/docs/modules/typescript/shared/cli/module.md +0 -138
  179. package/docs/modules/typescript/shared/cli/typings.md +0 -197
  180. package/docs/modules/typescript/shared/embedding/functions.md +0 -200
  181. package/docs/modules/typescript/shared/embedding/module.md +0 -77
  182. package/docs/modules/typescript/shared/embedding/typings.md +0 -124
  183. package/docs/modules/typescript/shared/hash/functions.md +0 -20
  184. package/docs/modules/typescript/shared/hash/module.md +0 -21
  185. package/docs/modules/typescript/shared/log/constants.md +0 -82
  186. package/docs/modules/typescript/shared/log/functions.md +0 -131
  187. package/docs/modules/typescript/shared/log/module.md +0 -153
  188. package/docs/modules/typescript/shared/log/typings.md +0 -82
  189. package/docs/modules/typescript/shared/mcp/classes.md +0 -179
  190. package/docs/modules/typescript/shared/mcp/functions.md +0 -386
  191. package/docs/modules/typescript/shared/mcp/module.md +0 -160
  192. package/docs/modules/typescript/shared/mcp/typings.md +0 -529
  193. package/docs/modules/typescript/shared/module.md +0 -110
  194. package/docs/modules/typescript/shared/platform/functions.md +0 -42
  195. package/docs/modules/typescript/shared/platform/module.md +0 -25
  196. package/docs/modules/typescript/shared/runtime/functions.md +0 -26
  197. package/docs/modules/typescript/shared/runtime/module.md +0 -27
  198. package/docs/modules/typescript/shared/runtime/typings.md +0 -13
  199. package/docs/modules/typescript/shared/version/module.md +0 -27
  200. package/docs/modules/typescript/shared/wasm-codec/functions.md +0 -391
  201. package/docs/modules/typescript/shared/wasm-codec/module.md +0 -98
  202. package/docs/modules/typescript/shared/worker-client/classes.md +0 -264
  203. package/docs/modules/typescript/shared/worker-client/functions.md +0 -175
  204. package/docs/modules/typescript/shared/worker-client/module.md +0 -92
  205. package/docs/modules/typescript/shared/worker-client/typings.md +0 -511
  206. package/docs/modules/typescript/shared/worker-daemon/classes.md +0 -239
  207. package/docs/modules/typescript/shared/worker-daemon/constants.md +0 -37
  208. package/docs/modules/typescript/shared/worker-daemon/functions.md +0 -234
  209. package/docs/modules/typescript/shared/worker-daemon/module.md +0 -118
  210. package/docs/modules/typescript/shared/worker-daemon/typings.md +0 -132
  211. package/docs/overview.md +0 -191
  212. package/docs/release-notes/0.1.0.md +0 -189
  213. package/docs/release-notes/0.1.1.md +0 -46
  214. package/docs/release-notes/0.1.2.md +0 -38
  215. package/docs/release-notes/0.1.3.md +0 -42
  216. package/docs/release-notes/0.2.0.md +0 -147
  217. package/docs/release-notes/0.3.0.md +0 -89
  218. package/docs/release-notes/0.3.1.md +0 -121
  219. package/docs/release-notes/0.3.2.md +0 -64
  220. package/docs/release-notes/0.4.0.md +0 -80
  221. package/docs/release-notes/0.4.1.md +0 -149
  222. package/docs/release-notes/0.4.3.md +0 -60
  223. package/docs/release-notes/0.5.0.md +0 -41
  224. package/docs/release-notes/README.md +0 -16
@@ -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).