@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.
- package/CLA.md +68 -0
- package/LICENSE +676 -12
- package/LICENSING.md +58 -0
- package/README.md +50 -27
- package/README.md.bak +320 -0
- package/dist/README.md +320 -0
- package/dist/{chunk-BJXEVALU.mjs → chunk-QLJ33C74.mjs} +44 -44
- package/dist/chunk-QLJ33C74.mjs.map +7 -0
- package/dist/cli.cjs +550 -232
- package/dist/cli.cjs.map +4 -4
- package/dist/cli.d.ts +0 -8
- package/dist/cli.mjs +483 -154
- package/dist/cli.mjs.map +4 -4
- package/dist/kbdb-worker.cjs +36 -5
- package/dist/kbdb-worker.cjs.map +3 -3
- package/dist/mod.cjs +89 -30
- package/dist/mod.cjs.map +4 -4
- package/dist/mod.mjs +88 -30
- package/dist/mod.mjs.map +4 -4
- package/dist/src/cli.d.ts +0 -8
- package/dist/src/shared/cli/constants/defaults.constant.d.ts +1 -1
- package/dist/src/shared/cli/constants/recfile-command-field-map.constant.d.ts +8 -0
- package/dist/src/shared/cli/constants/recfile-field-maps.constant.d.ts +21 -0
- package/dist/src/shared/cli/functions/compute-directory-level.function.d.ts +14 -0
- package/dist/src/shared/cli/functions/dispatch-command.function.d.ts +2 -28
- package/dist/src/shared/cli/functions/format-command-output.function.d.ts +14 -0
- package/dist/src/shared/cli/functions/format-db-not-found.function.d.ts +20 -0
- package/dist/src/shared/cli/functions/format-output.function.d.ts +1 -0
- package/dist/src/shared/cli/functions/format-recfile-output.function.d.ts +11 -0
- package/dist/src/shared/cli/functions/render-recfile-value.function.d.ts +11 -0
- package/dist/src/shared/cli/functions/resolve-db-dir.function.d.ts +24 -0
- package/dist/src/shared/cli/functions/resolve-recfile-key.function.d.ts +9 -0
- package/dist/src/shared/cli/functions/run-db-path.function.d.ts +10 -0
- package/dist/src/shared/cli/functions/run-export.function.d.ts +8 -4
- package/dist/src/shared/cli/functions/run-import.function.d.ts +4 -0
- package/dist/src/shared/cli/functions/run-learn.function.d.ts +12 -0
- package/dist/src/shared/cli/index.d.ts +4 -1
- package/dist/src/shared/cli/typings/cli-options.interface.d.ts +9 -2
- package/dist/src/shared/cli/typings/db-resolution.interface.d.ts +9 -0
- package/dist/src/shared/cli/typings/recfile-field-map.type.d.ts +10 -0
- package/dist/src/shared/version/constants/version.constant.d.ts +1 -1
- package/dist/src/shared/wasm-codec/functions/decode-option-u8.function.d.ts +9 -0
- package/dist/src/shared/wasm-codec/functions/decode-section-records.function.d.ts +4 -0
- package/dist/src/shared/wasm-codec/functions/encode-add-section-params.function.d.ts +2 -45
- package/dist/src/shared/wasm-codec/functions/encode-update-section-params.function.d.ts +10 -1
- package/dist/src/shared/wasm-codec/index.d.ts +1 -1
- package/dist/src/shared/wasm-codec/typings/add-section-input.model.d.ts +6 -0
- package/dist/src/shared/wasm-codec/typings/section-record-trailing.model.d.ts +5 -0
- package/dist/src/shared/wasm-codec/typings/section-record.model.d.ts +5 -0
- package/dist/src/shared/worker-client/functions/build-deno-permissions.function.d.ts +11 -0
- package/dist/src/shared/worker-client/functions/read-crash-reason.function.d.ts +9 -0
- package/dist/src/shared/worker-client/functions/resolve-spawn-script.function.d.ts +6 -0
- package/dist/src/shared/worker-client/functions/spawn-daemon.function.d.ts +1 -1
- package/dist/src/shared/worker-client/typings/section.model.d.ts +5 -0
- package/dist/src/shared/worker-client/typings/worker-client-options.interface.d.ts +0 -6
- package/dist/src/shared/worker-daemon/functions/count-files.function.d.ts +12 -0
- package/dist/src/shared/worker-daemon/functions/handle-import.function.d.ts +2 -0
- package/dist/src/shared/worker-daemon/functions/handle-read-ops.function.d.ts +8 -0
- package/dist/src/shared/worker-daemon/functions/validate-daemon-path.function.d.ts +15 -0
- package/dist/src/worker.d.ts +0 -7
- package/dist/wasm/default-embedding/kbdb_default_embedding_bg.wasm +0 -0
- package/dist/wasm/default-embedding/package.json +1 -1
- package/dist/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
- package/dist/wasm/fs-database/package.json +1 -1
- package/dist/wasm/fs-migration/kbdb_fs_migration_bg.wasm +0 -0
- package/dist/wasm/fs-migration/package.json +1 -1
- package/dist/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
- package/dist/wasm/kb-worker/package.json +1 -1
- package/dist/wasm/query-parser/kbdb_query_parser_bg.wasm +0 -0
- package/dist/wasm/query-parser/package.json +1 -1
- package/dist/worker.d.ts +0 -7
- package/dist/worker.mjs +37 -6
- package/dist/worker.mjs.map +3 -3
- package/package.json +13 -12
- package/dist/chunk-BJXEVALU.mjs.map +0 -7
- package/dist/src/shared/cli/functions/resolve-raw-db-path.function.d.ts +0 -10
- package/docs/details/README.md +0 -30
- package/docs/details/agent-tooling.md +0 -132
- package/docs/details/cli.md +0 -777
- package/docs/details/knowledge-base.md +0 -180
- package/docs/details/library-api.md +0 -495
- package/docs/details/mcp-server.md +0 -482
- package/docs/details/search-and-ranking.md +0 -575
- package/docs/details/storage.md +0 -531
- package/docs/goals/agents.md +0 -751
- package/docs/goals/architecture.svg +0 -198
- package/docs/goals/auto-capture.md +0 -378
- package/docs/goals/benchmarking.md +0 -296
- package/docs/goals/cli.md +0 -2654
- package/docs/goals/concurrency.md +0 -259
- package/docs/goals/content-composer.md +0 -609
- package/docs/goals/content-parser.md +0 -279
- package/docs/goals/database.md +0 -1679
- package/docs/goals/document.md +0 -368
- package/docs/goals/hybrid-search.md +0 -465
- package/docs/goals/mcp.md +0 -1541
- package/docs/goals/overview.md +0 -124
- package/docs/goals/query-parser.md +0 -373
- package/docs/goals/query-result.md +0 -860
- package/docs/goals/semantic-dedup.md +0 -233
- package/docs/goals/skills.md +0 -810
- package/docs/goals/sync.md +0 -217
- package/docs/goals/worker-client.md +0 -1005
- package/docs/goals/worker-daemon.md +0 -1547
- package/docs/modules/overview.md +0 -319
- package/docs/modules/rust/embedding/module.md +0 -91
- package/docs/modules/rust/fs-database/functions/document.md +0 -48
- package/docs/modules/rust/fs-database/functions/integrity.md +0 -79
- package/docs/modules/rust/fs-database/functions/io.md +0 -87
- package/docs/modules/rust/fs-database/functions/module.md +0 -22
- package/docs/modules/rust/fs-database/functions/query-exec.md +0 -44
- package/docs/modules/rust/fs-database/functions/section.md +0 -76
- package/docs/modules/rust/fs-database/indexes/btree.md +0 -35
- package/docs/modules/rust/fs-database/indexes/corpus.md +0 -61
- package/docs/modules/rust/fs-database/indexes/inverted.md +0 -60
- package/docs/modules/rust/fs-database/indexes/module.md +0 -64
- package/docs/modules/rust/fs-database/indexes/positional.md +0 -39
- package/docs/modules/rust/fs-database/indexes/vectors.md +0 -110
- package/docs/modules/rust/fs-database/module.md +0 -150
- package/docs/modules/rust/fs-database/types/catalog.md +0 -53
- package/docs/modules/rust/fs-database/types/module.md +0 -12
- package/docs/modules/rust/fs-database/types/section.md +0 -127
- package/docs/modules/rust/kb-worker/functions/compose.md +0 -57
- package/docs/modules/rust/kb-worker/functions/module.md +0 -20
- package/docs/modules/rust/kb-worker/functions/retrieve.md +0 -194
- package/docs/modules/rust/kb-worker/functions/search.md +0 -173
- package/docs/modules/rust/kb-worker/functions/write.md +0 -172
- package/docs/modules/rust/kb-worker/module.md +0 -171
- package/docs/modules/rust/kb-worker/types/cache.md +0 -90
- package/docs/modules/rust/kb-worker/types/context.md +0 -26
- package/docs/modules/rust/kb-worker/types/module.md +0 -16
- package/docs/modules/rust/kb-worker/types/status.md +0 -29
- package/docs/modules/rust/kb-worker/types/token.md +0 -50
- package/docs/modules/rust/overview.md +0 -531
- package/docs/modules/rust/query-parser/functions/extract.md +0 -56
- package/docs/modules/rust/query-parser/functions/module.md +0 -18
- package/docs/modules/rust/query-parser/functions/parse.md +0 -33
- package/docs/modules/rust/query-parser/functions/pipeline.md +0 -9
- package/docs/modules/rust/query-parser/functions/rank.md +0 -85
- package/docs/modules/rust/query-parser/module.md +0 -131
- package/docs/modules/rust/query-parser/types/cache.md +0 -39
- package/docs/modules/rust/query-parser/types/keyphrase.md +0 -71
- package/docs/modules/rust/query-parser/types/module.md +0 -18
- package/docs/modules/rust/query-parser/types/token.md +0 -46
- package/docs/modules/rust/shared/content-composer/functions.md +0 -114
- package/docs/modules/rust/shared/content-composer/module.md +0 -147
- package/docs/modules/rust/shared/content-composer/types.md +0 -93
- package/docs/modules/rust/shared/content-parser/functions.md +0 -72
- package/docs/modules/rust/shared/content-parser/module.md +0 -99
- package/docs/modules/rust/shared/content-parser/types.md +0 -71
- package/docs/modules/rust/shared/corpus/module.md +0 -24
- package/docs/modules/rust/shared/corpus/types.md +0 -141
- package/docs/modules/rust/shared/document/module.md +0 -25
- package/docs/modules/rust/shared/document/types.md +0 -154
- package/docs/modules/rust/shared/encode/module.md +0 -22
- package/docs/modules/rust/shared/encode/traits.md +0 -304
- package/docs/modules/rust/shared/error/module.md +0 -28
- package/docs/modules/rust/shared/error/types.md +0 -302
- package/docs/modules/rust/shared/kbid/module.md +0 -24
- package/docs/modules/rust/shared/kbid/types.md +0 -147
- package/docs/modules/rust/shared/memory/functions.md +0 -209
- package/docs/modules/rust/shared/memory/module.md +0 -24
- package/docs/modules/rust/shared/module.md +0 -196
- package/docs/modules/rust/shared/pipeline/functions.md +0 -141
- package/docs/modules/rust/shared/pipeline/module.md +0 -62
- package/docs/modules/rust/shared/pipeline/types.md +0 -43
- package/docs/modules/rust/shared/query/module.md +0 -27
- package/docs/modules/rust/shared/query/types.md +0 -236
- package/docs/modules/rust/shared/section/module.md +0 -25
- package/docs/modules/rust/shared/section/types.md +0 -294
- package/docs/modules/rust/shared/term/module.md +0 -25
- package/docs/modules/rust/shared/term/types.md +0 -139
- package/docs/modules/typescript/cli.md +0 -131
- package/docs/modules/typescript/kbdb-worker.md +0 -150
- package/docs/modules/typescript/overview.md +0 -400
- package/docs/modules/typescript/shared/auto-capture/module.md +0 -73
- package/docs/modules/typescript/shared/cli/constants.md +0 -23
- package/docs/modules/typescript/shared/cli/functions.md +0 -809
- package/docs/modules/typescript/shared/cli/module.md +0 -138
- package/docs/modules/typescript/shared/cli/typings.md +0 -197
- package/docs/modules/typescript/shared/embedding/functions.md +0 -200
- package/docs/modules/typescript/shared/embedding/module.md +0 -77
- package/docs/modules/typescript/shared/embedding/typings.md +0 -124
- package/docs/modules/typescript/shared/hash/functions.md +0 -20
- package/docs/modules/typescript/shared/hash/module.md +0 -21
- package/docs/modules/typescript/shared/log/constants.md +0 -82
- package/docs/modules/typescript/shared/log/functions.md +0 -131
- package/docs/modules/typescript/shared/log/module.md +0 -153
- package/docs/modules/typescript/shared/log/typings.md +0 -82
- package/docs/modules/typescript/shared/mcp/classes.md +0 -179
- package/docs/modules/typescript/shared/mcp/functions.md +0 -386
- package/docs/modules/typescript/shared/mcp/module.md +0 -160
- package/docs/modules/typescript/shared/mcp/typings.md +0 -529
- package/docs/modules/typescript/shared/module.md +0 -110
- package/docs/modules/typescript/shared/platform/functions.md +0 -42
- package/docs/modules/typescript/shared/platform/module.md +0 -25
- package/docs/modules/typescript/shared/runtime/functions.md +0 -26
- package/docs/modules/typescript/shared/runtime/module.md +0 -27
- package/docs/modules/typescript/shared/runtime/typings.md +0 -13
- package/docs/modules/typescript/shared/version/module.md +0 -27
- package/docs/modules/typescript/shared/wasm-codec/functions.md +0 -391
- package/docs/modules/typescript/shared/wasm-codec/module.md +0 -98
- package/docs/modules/typescript/shared/worker-client/classes.md +0 -264
- package/docs/modules/typescript/shared/worker-client/functions.md +0 -175
- package/docs/modules/typescript/shared/worker-client/module.md +0 -92
- package/docs/modules/typescript/shared/worker-client/typings.md +0 -511
- package/docs/modules/typescript/shared/worker-daemon/classes.md +0 -239
- package/docs/modules/typescript/shared/worker-daemon/constants.md +0 -37
- package/docs/modules/typescript/shared/worker-daemon/functions.md +0 -234
- package/docs/modules/typescript/shared/worker-daemon/module.md +0 -118
- package/docs/modules/typescript/shared/worker-daemon/typings.md +0 -132
- package/docs/overview.md +0 -191
- package/docs/release-notes/0.1.0.md +0 -189
- package/docs/release-notes/0.1.1.md +0 -46
- package/docs/release-notes/0.1.2.md +0 -38
- package/docs/release-notes/0.1.3.md +0 -42
- package/docs/release-notes/0.2.0.md +0 -147
- package/docs/release-notes/0.3.0.md +0 -89
- package/docs/release-notes/0.3.1.md +0 -121
- package/docs/release-notes/0.3.2.md +0 -64
- package/docs/release-notes/0.4.0.md +0 -80
- package/docs/release-notes/0.4.1.md +0 -149
- package/docs/release-notes/0.4.3.md +0 -60
- 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).
|