daftari 1.30.0 → 1.31.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 (282) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +139 -4
  3. package/dist/access/rbac.d.ts +1 -0
  4. package/dist/access/rbac.d.ts.map +1 -1
  5. package/dist/access/rbac.js +7 -0
  6. package/dist/access/rbac.js.map +1 -1
  7. package/dist/audit/checks/broken_refs.d.ts +1 -1
  8. package/dist/audit/checks/broken_refs.d.ts.map +1 -1
  9. package/dist/audit/checks/broken_refs.js +77 -22
  10. package/dist/audit/checks/broken_refs.js.map +1 -1
  11. package/dist/audit/collect.d.ts +1 -0
  12. package/dist/audit/collect.d.ts.map +1 -1
  13. package/dist/audit/collect.js +22 -2
  14. package/dist/audit/collect.js.map +1 -1
  15. package/dist/audit/index.d.ts.map +1 -1
  16. package/dist/audit/index.js +9 -3
  17. package/dist/audit/index.js.map +1 -1
  18. package/dist/audit/links.d.ts.map +1 -1
  19. package/dist/audit/links.js +9 -3
  20. package/dist/audit/links.js.map +1 -1
  21. package/dist/audit/report.d.ts.map +1 -1
  22. package/dist/audit/report.js +2 -0
  23. package/dist/audit/report.js.map +1 -1
  24. package/dist/audit/types.d.ts +4 -1
  25. package/dist/audit/types.d.ts.map +1 -1
  26. package/dist/audit/types.js.map +1 -1
  27. package/dist/backfill/derive.d.ts.map +1 -1
  28. package/dist/backfill/derive.js +1 -0
  29. package/dist/backfill/derive.js.map +1 -1
  30. package/dist/cli.d.ts.map +1 -1
  31. package/dist/cli.js +18 -0
  32. package/dist/cli.js.map +1 -1
  33. package/dist/court/precedent.d.ts.map +1 -1
  34. package/dist/court/precedent.js +6 -1
  35. package/dist/court/precedent.js.map +1 -1
  36. package/dist/curation/consumes.d.ts +24 -0
  37. package/dist/curation/consumes.d.ts.map +1 -0
  38. package/dist/curation/consumes.js +122 -0
  39. package/dist/curation/consumes.js.map +1 -0
  40. package/dist/curation/edge-staleness.d.ts +47 -0
  41. package/dist/curation/edge-staleness.d.ts.map +1 -0
  42. package/dist/curation/edge-staleness.js +258 -0
  43. package/dist/curation/edge-staleness.js.map +1 -0
  44. package/dist/curation/edges.d.ts.map +1 -1
  45. package/dist/curation/edges.js +164 -10
  46. package/dist/curation/edges.js.map +1 -1
  47. package/dist/curation/lint.d.ts +4 -1
  48. package/dist/curation/lint.d.ts.map +1 -1
  49. package/dist/curation/lint.js +61 -6
  50. package/dist/curation/lint.js.map +1 -1
  51. package/dist/curation/provenance.d.ts +2 -0
  52. package/dist/curation/provenance.d.ts.map +1 -1
  53. package/dist/curation/provenance.js +2 -0
  54. package/dist/curation/provenance.js.map +1 -1
  55. package/dist/curation/read-log.d.ts +19 -0
  56. package/dist/curation/read-log.d.ts.map +1 -0
  57. package/dist/curation/read-log.js +120 -0
  58. package/dist/curation/read-log.js.map +1 -0
  59. package/dist/curation/review-throughput.d.ts +24 -0
  60. package/dist/curation/review-throughput.d.ts.map +1 -0
  61. package/dist/curation/review-throughput.js +102 -0
  62. package/dist/curation/review-throughput.js.map +1 -0
  63. package/dist/curation/staged-actions.d.ts +11 -1
  64. package/dist/curation/staged-actions.d.ts.map +1 -1
  65. package/dist/curation/staged-actions.js +102 -24
  66. package/dist/curation/staged-actions.js.map +1 -1
  67. package/dist/curation/structural.d.ts +16 -0
  68. package/dist/curation/structural.d.ts.map +1 -0
  69. package/dist/curation/structural.js +64 -0
  70. package/dist/curation/structural.js.map +1 -0
  71. package/dist/curation/tension-blast.d.ts +4 -0
  72. package/dist/curation/tension-blast.d.ts.map +1 -1
  73. package/dist/curation/tension-blast.js +9 -0
  74. package/dist/curation/tension-blast.js.map +1 -1
  75. package/dist/curation/tension.d.ts +5 -2
  76. package/dist/curation/tension.d.ts.map +1 -1
  77. package/dist/curation/tension.js +68 -25
  78. package/dist/curation/tension.js.map +1 -1
  79. package/dist/curation/tier0.d.ts +27 -0
  80. package/dist/curation/tier0.d.ts.map +1 -0
  81. package/dist/curation/tier0.js +196 -0
  82. package/dist/curation/tier0.js.map +1 -0
  83. package/dist/curation/tier1.d.ts +30 -0
  84. package/dist/curation/tier1.d.ts.map +1 -0
  85. package/dist/curation/tier1.js +142 -0
  86. package/dist/curation/tier1.js.map +1 -0
  87. package/dist/curation/tier2.d.ts +43 -0
  88. package/dist/curation/tier2.d.ts.map +1 -0
  89. package/dist/curation/tier2.js +182 -0
  90. package/dist/curation/tier2.js.map +1 -0
  91. package/dist/curation/vault-docs.d.ts +5 -1
  92. package/dist/curation/vault-docs.d.ts.map +1 -1
  93. package/dist/curation/vault-docs.js +14 -0
  94. package/dist/curation/vault-docs.js.map +1 -1
  95. package/dist/eval/generate.js +22 -5
  96. package/dist/eval/generate.js.map +1 -1
  97. package/dist/eval/index.d.ts.map +1 -1
  98. package/dist/eval/index.js +173 -25
  99. package/dist/eval/index.js.map +1 -1
  100. package/dist/eval/llm.js +1 -1
  101. package/dist/eval/llm.js.map +1 -1
  102. package/dist/eval/prune.d.ts +24 -0
  103. package/dist/eval/prune.d.ts.map +1 -0
  104. package/dist/eval/prune.js +83 -0
  105. package/dist/eval/prune.js.map +1 -0
  106. package/dist/eval/storage.d.ts +3 -0
  107. package/dist/eval/storage.d.ts.map +1 -1
  108. package/dist/eval/storage.js +14 -0
  109. package/dist/eval/storage.js.map +1 -1
  110. package/dist/frontmatter/schema.d.ts.map +1 -1
  111. package/dist/frontmatter/schema.js +19 -1
  112. package/dist/frontmatter/schema.js.map +1 -1
  113. package/dist/frontmatter/types.d.ts +4 -1
  114. package/dist/frontmatter/types.d.ts.map +1 -1
  115. package/dist/frontmatter/types.js +8 -0
  116. package/dist/frontmatter/types.js.map +1 -1
  117. package/dist/import/index.d.ts.map +1 -1
  118. package/dist/import/index.js +44 -9
  119. package/dist/import/index.js.map +1 -1
  120. package/dist/import/langgraph-store.d.ts +53 -0
  121. package/dist/import/langgraph-store.d.ts.map +1 -0
  122. package/dist/import/langgraph-store.js +292 -0
  123. package/dist/import/langgraph-store.js.map +1 -0
  124. package/dist/index.d.ts +5 -0
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +56 -18
  127. package/dist/index.js.map +1 -1
  128. package/dist/lifecycle/lock.d.ts +9 -1
  129. package/dist/lifecycle/lock.d.ts.map +1 -1
  130. package/dist/lifecycle/lock.js +34 -9
  131. package/dist/lifecycle/lock.js.map +1 -1
  132. package/dist/okf/export.d.ts +12 -0
  133. package/dist/okf/export.d.ts.map +1 -0
  134. package/dist/okf/export.js +115 -0
  135. package/dist/okf/export.js.map +1 -0
  136. package/dist/okf/import.d.ts +24 -0
  137. package/dist/okf/import.d.ts.map +1 -0
  138. package/dist/okf/import.js +107 -0
  139. package/dist/okf/import.js.map +1 -0
  140. package/dist/okf/index.d.ts +2 -0
  141. package/dist/okf/index.d.ts.map +1 -0
  142. package/dist/okf/index.js +147 -0
  143. package/dist/okf/index.js.map +1 -0
  144. package/dist/okf/map.d.ts +16 -0
  145. package/dist/okf/map.d.ts.map +1 -0
  146. package/dist/okf/map.js +149 -0
  147. package/dist/okf/map.js.map +1 -0
  148. package/dist/okf/types.d.ts +9 -0
  149. package/dist/okf/types.d.ts.map +1 -0
  150. package/dist/okf/types.js +48 -0
  151. package/dist/okf/types.js.map +1 -0
  152. package/dist/search/coverage.d.ts.map +1 -1
  153. package/dist/search/coverage.js +1 -1
  154. package/dist/search/coverage.js.map +1 -1
  155. package/dist/search/hybrid.d.ts +19 -0
  156. package/dist/search/hybrid.d.ts.map +1 -1
  157. package/dist/search/hybrid.js +58 -10
  158. package/dist/search/hybrid.js.map +1 -1
  159. package/dist/search/reindex.d.ts +1 -0
  160. package/dist/search/reindex.d.ts.map +1 -1
  161. package/dist/search/reindex.js +41 -11
  162. package/dist/search/reindex.js.map +1 -1
  163. package/dist/search/watcher.d.ts +2 -0
  164. package/dist/search/watcher.d.ts.map +1 -1
  165. package/dist/search/watcher.js +21 -10
  166. package/dist/search/watcher.js.map +1 -1
  167. package/dist/serve/index.d.ts +36 -0
  168. package/dist/serve/index.d.ts.map +1 -0
  169. package/dist/serve/index.js +507 -0
  170. package/dist/serve/index.js.map +1 -0
  171. package/dist/server.d.ts +10 -1
  172. package/dist/server.d.ts.map +1 -1
  173. package/dist/server.js +89 -14
  174. package/dist/server.js.map +1 -1
  175. package/dist/sleep/index.d.ts +2 -0
  176. package/dist/sleep/index.d.ts.map +1 -1
  177. package/dist/sleep/index.js +212 -21
  178. package/dist/sleep/index.js.map +1 -1
  179. package/dist/sleep/report.d.ts +3 -0
  180. package/dist/sleep/report.d.ts.map +1 -1
  181. package/dist/sleep/report.js +52 -0
  182. package/dist/sleep/report.js.map +1 -1
  183. package/dist/sleep/tension-scan-state.d.ts +19 -0
  184. package/dist/sleep/tension-scan-state.d.ts.map +1 -0
  185. package/dist/sleep/tension-scan-state.js +0 -0
  186. package/dist/sleep/tension-scan-state.js.map +1 -0
  187. package/dist/sleep/tension-scan.d.ts +44 -0
  188. package/dist/sleep/tension-scan.d.ts.map +1 -0
  189. package/dist/sleep/tension-scan.js +0 -0
  190. package/dist/sleep/tension-scan.js.map +1 -0
  191. package/dist/storage/backend.d.ts +12 -0
  192. package/dist/storage/backend.d.ts.map +1 -0
  193. package/dist/storage/backend.js +231 -0
  194. package/dist/storage/backend.js.map +1 -0
  195. package/dist/storage/backends/fs.d.ts +4 -0
  196. package/dist/storage/backends/fs.d.ts.map +1 -0
  197. package/dist/storage/backends/fs.js +99 -0
  198. package/dist/storage/backends/fs.js.map +1 -0
  199. package/dist/storage/fs-walk.d.ts +5 -0
  200. package/dist/storage/fs-walk.d.ts.map +1 -0
  201. package/dist/storage/fs-walk.js +28 -0
  202. package/dist/storage/fs-walk.js.map +1 -0
  203. package/dist/storage/index-db.d.ts +16 -0
  204. package/dist/storage/index-db.d.ts.map +1 -1
  205. package/dist/storage/index-db.js +94 -5
  206. package/dist/storage/index-db.js.map +1 -1
  207. package/dist/storage/local.d.ts +1 -0
  208. package/dist/storage/local.d.ts.map +1 -1
  209. package/dist/storage/local.js +12 -0
  210. package/dist/storage/local.js.map +1 -1
  211. package/dist/storage/sync.d.ts +25 -0
  212. package/dist/storage/sync.d.ts.map +1 -0
  213. package/dist/storage/sync.js +308 -0
  214. package/dist/storage/sync.js.map +1 -0
  215. package/dist/sync/index.d.ts +2 -0
  216. package/dist/sync/index.d.ts.map +1 -0
  217. package/dist/sync/index.js +136 -0
  218. package/dist/sync/index.js.map +1 -0
  219. package/dist/themes/clustering.d.ts +6 -11
  220. package/dist/themes/clustering.d.ts.map +1 -1
  221. package/dist/themes/clustering.js +76 -84
  222. package/dist/themes/clustering.js.map +1 -1
  223. package/dist/tools/consumes.d.ts +14 -0
  224. package/dist/tools/consumes.d.ts.map +1 -0
  225. package/dist/tools/consumes.js +99 -0
  226. package/dist/tools/consumes.js.map +1 -0
  227. package/dist/tools/curation.d.ts +2 -0
  228. package/dist/tools/curation.d.ts.map +1 -1
  229. package/dist/tools/curation.js +53 -15
  230. package/dist/tools/curation.js.map +1 -1
  231. package/dist/tools/edge-staleness.d.ts +28 -0
  232. package/dist/tools/edge-staleness.d.ts.map +1 -0
  233. package/dist/tools/edge-staleness.js +205 -0
  234. package/dist/tools/edge-staleness.js.map +1 -0
  235. package/dist/tools/edges.d.ts.map +1 -1
  236. package/dist/tools/edges.js +27 -21
  237. package/dist/tools/edges.js.map +1 -1
  238. package/dist/tools/read.d.ts +15 -1
  239. package/dist/tools/read.d.ts.map +1 -1
  240. package/dist/tools/read.js +142 -29
  241. package/dist/tools/read.js.map +1 -1
  242. package/dist/tools/receipt.d.ts.map +1 -1
  243. package/dist/tools/receipt.js +16 -7
  244. package/dist/tools/receipt.js.map +1 -1
  245. package/dist/tools/search.d.ts +1 -0
  246. package/dist/tools/search.d.ts.map +1 -1
  247. package/dist/tools/search.js +147 -5
  248. package/dist/tools/search.js.map +1 -1
  249. package/dist/tools/staged-actions.d.ts +3 -0
  250. package/dist/tools/staged-actions.d.ts.map +1 -1
  251. package/dist/tools/staged-actions.js +227 -22
  252. package/dist/tools/staged-actions.js.map +1 -1
  253. package/dist/tools/themes.d.ts +8 -0
  254. package/dist/tools/themes.d.ts.map +1 -1
  255. package/dist/tools/themes.js +208 -122
  256. package/dist/tools/themes.js.map +1 -1
  257. package/dist/tools/tier1.d.ts +14 -0
  258. package/dist/tools/tier1.d.ts.map +1 -0
  259. package/dist/tools/tier1.js +169 -0
  260. package/dist/tools/tier1.js.map +1 -0
  261. package/dist/tools/tier2.d.ts +27 -0
  262. package/dist/tools/tier2.d.ts.map +1 -0
  263. package/dist/tools/tier2.js +344 -0
  264. package/dist/tools/tier2.js.map +1 -0
  265. package/dist/tools/write.d.ts +9 -1
  266. package/dist/tools/write.d.ts.map +1 -1
  267. package/dist/tools/write.js +492 -6
  268. package/dist/tools/write.js.map +1 -1
  269. package/dist/utils/config.d.ts +52 -0
  270. package/dist/utils/config.d.ts.map +1 -1
  271. package/dist/utils/config.js +372 -2
  272. package/dist/utils/config.js.map +1 -1
  273. package/dist/utils/run-id.d.ts +3 -0
  274. package/dist/utils/run-id.d.ts.map +1 -0
  275. package/dist/utils/run-id.js +19 -0
  276. package/dist/utils/run-id.js.map +1 -0
  277. package/dist/utils/vault-gitignore.d.ts +1 -1
  278. package/dist/utils/vault-gitignore.d.ts.map +1 -1
  279. package/dist/utils/vault-gitignore.js +4 -1
  280. package/dist/utils/vault-gitignore.js.map +1 -1
  281. package/package.json +21 -1
  282. package/templates/config.yaml +8 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/okf/index.ts"],"names":[],"mappings":"AAsJA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB5D"}
@@ -0,0 +1,147 @@
1
+ // src/okf/index.ts
2
+ //
3
+ // `daftari okf <export|import> ...` — bridge a Daftari vault and Google Cloud's
4
+ // Open Knowledge Format (OKF) bundle. Export renders the vault as a portable OKF
5
+ // bundle any OKF consumer can read; import adopts an OKF bundle into a vault.
6
+ // The command owns arg parsing, existence checks, and human output; the actual
7
+ // translation lives in export.ts / import.ts.
8
+ import { resolve } from "node:path";
9
+ import { directoryExists } from "../storage/local.js";
10
+ import { exportBundle } from "./export.js";
11
+ import { importBundle } from "./import.js";
12
+ import { OKF_VERSION } from "./types.js";
13
+ const SUBCOMMANDS = ["export", "import"];
14
+ const HELP = `daftari okf — bridge a Daftari vault and the Open Knowledge Format (OKF v${OKF_VERSION}).
15
+
16
+ OKF is Google Cloud's vendor-neutral spec for the LLM-wiki pattern: a directory
17
+ of markdown files with YAML frontmatter that any producer can emit and any
18
+ consumer can read without translation.
19
+
20
+ Usage:
21
+ daftari okf export <vault> --out <dir> [--collection <name>]
22
+ daftari okf import <bundle> --into <vault> [--dry-run] [--agent <id>]
23
+
24
+ export — write the vault as an OKF bundle (never mutates the vault):
25
+ --out <dir> Output directory for the bundle (required).
26
+ --collection <name> Export only this collection (top-level folder).
27
+
28
+ Each doc becomes an OKF concept doc (core fields + a verbatim 'daftari'
29
+ sidecar for lossless round-trip) plus generated index.md and log.md.
30
+
31
+ import — adopt an OKF bundle into a vault (auto-commits + reindexes):
32
+ --into <vault> Target Daftari vault (required).
33
+ --dry-run Report the plan; write, commit, and index nothing.
34
+ --agent <id> Acting identity for authorship + commit (default agent:okf-import).
35
+
36
+ A bundle from 'daftari okf export' round-trips exactly; a foreign bundle is
37
+ mapped conservatively (docs land as drafts in the accumulation domain).
38
+
39
+ --help, -h Show this help.
40
+ `;
41
+ function readStringArg(argv, flag) {
42
+ const raw = argv.find((a) => a === flag || a.startsWith(`${flag}=`));
43
+ if (raw === undefined)
44
+ return undefined;
45
+ const idx = argv.indexOf(raw);
46
+ return raw.includes("=") ? raw.slice(raw.indexOf("=") + 1) : argv[idx + 1];
47
+ }
48
+ // First non-flag argument (the positional vault/bundle path), or a default.
49
+ function readPositional(argv, fallback) {
50
+ for (let i = 0; i < argv.length; i++) {
51
+ const a = argv[i];
52
+ if (a.startsWith("-")) {
53
+ // Skip the value of a value-taking flag so it is not mistaken for the
54
+ // positional. --dry-run takes no value; everything else here does.
55
+ if (!a.includes("=") && a !== "--dry-run")
56
+ i++;
57
+ continue;
58
+ }
59
+ return a;
60
+ }
61
+ return fallback;
62
+ }
63
+ async function runExport(argv) {
64
+ const vault = readPositional(argv, ".");
65
+ const out = readStringArg(argv, "--out");
66
+ const collection = readStringArg(argv, "--collection");
67
+ if (!out) {
68
+ process.stderr.write("daftari okf export: --out <dir> is required\n");
69
+ return 1;
70
+ }
71
+ const resolvedVault = resolve(vault);
72
+ if (!(await directoryExists(resolvedVault))) {
73
+ process.stderr.write(`daftari okf export: vault directory not found: ${vault}\n`);
74
+ return 1;
75
+ }
76
+ const result = await exportBundle(resolvedVault, resolve(out), { collection });
77
+ if (!result.ok) {
78
+ process.stderr.write(`daftari okf export: ${result.error.message}\n`);
79
+ return 1;
80
+ }
81
+ for (const w of result.value.warnings) {
82
+ process.stderr.write(`daftari okf export: warning: ${w}\n`);
83
+ }
84
+ process.stdout.write(`Exported ${result.value.documentCount} document(s) as an OKF v${OKF_VERSION} bundle to ${result.value.outDir}\n` +
85
+ (result.value.skipped > 0 ? ` skipped: ${result.value.skipped} unparseable file(s)\n` : ""));
86
+ return 0;
87
+ }
88
+ async function runImportCmd(argv) {
89
+ const bundle = readPositional(argv, ".");
90
+ const into = readStringArg(argv, "--into");
91
+ const agent = readStringArg(argv, "--agent");
92
+ const dryRun = argv.includes("--dry-run");
93
+ if (!into) {
94
+ process.stderr.write("daftari okf import: --into <vault> is required\n");
95
+ return 1;
96
+ }
97
+ const resolvedBundle = resolve(bundle);
98
+ if (!(await directoryExists(resolvedBundle))) {
99
+ process.stderr.write(`daftari okf import: bundle directory not found: ${bundle}\n`);
100
+ return 1;
101
+ }
102
+ const resolvedVault = resolve(into);
103
+ if (!(await directoryExists(resolvedVault))) {
104
+ process.stderr.write(`daftari okf import: target vault not found: ${into}\n`);
105
+ return 1;
106
+ }
107
+ const result = await importBundle(resolvedBundle, resolvedVault, { agent, dryRun });
108
+ if (!result.ok) {
109
+ process.stderr.write(`daftari okf import: ${result.error.message}\n`);
110
+ return 1;
111
+ }
112
+ for (const w of result.value.warnings) {
113
+ process.stderr.write(`daftari okf import: warning: ${w}\n`);
114
+ }
115
+ const r = result.value;
116
+ if (r.dryRun) {
117
+ process.stdout.write(`Dry run — would import ${r.imported} document(s) into ${r.vaultRoot}:\n`);
118
+ for (const item of r.plan) {
119
+ const tag = item.roundTrip ? " (round-trip)" : "";
120
+ process.stdout.write(` ${item.relPath} → collection '${item.collection}'${tag}\n`);
121
+ }
122
+ return 0;
123
+ }
124
+ process.stdout.write(`Imported ${r.imported} document(s) into ${r.vaultRoot}` +
125
+ (r.commit ? ` (commit ${r.commit})` : "") +
126
+ (r.reindexed ? ", reindexed" : "") +
127
+ "\n" +
128
+ (r.skipped > 0 ? ` skipped: ${r.skipped} file(s)\n` : ""));
129
+ return 0;
130
+ }
131
+ export async function runOkf(argv) {
132
+ if (argv.length === 0) {
133
+ process.stderr.write(HELP);
134
+ return 1;
135
+ }
136
+ if (argv.includes("--help") || argv.includes("-h")) {
137
+ process.stdout.write(HELP);
138
+ return 0;
139
+ }
140
+ const sub = argv[0];
141
+ if (!SUBCOMMANDS.includes(sub)) {
142
+ process.stderr.write(`daftari okf: unknown subcommand '${sub}' — expected: ${SUBCOMMANDS.join(", ")}\n`);
143
+ return 1;
144
+ }
145
+ return sub === "export" ? runExport(argv.slice(1)) : runImportCmd(argv.slice(1));
146
+ }
147
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/okf/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Frontmatter } from "../frontmatter/types.js";
2
+ export declare function isUri(s: string): boolean;
3
+ export declare function deriveDescription(fm: Frontmatter, body: string): string | undefined;
4
+ export declare function toIsoTimestamp(date: string): string | undefined;
5
+ export declare function daftariToOkf(raw: Record<string, unknown>, fm: Frontmatter, body: string): Record<string, unknown>;
6
+ export declare function titleFromPath(relPath: string): string;
7
+ export declare function collectionFromPath(relPath: string): string | null;
8
+ export declare function slugify(s: string): string | null;
9
+ export declare function dateFromTimestamp(value: unknown): string | undefined;
10
+ export interface OkfImportContext {
11
+ relPath: string;
12
+ today: string;
13
+ updatedBy: string;
14
+ }
15
+ export declare function okfToDaftari(okfRaw: Record<string, unknown>, ctx: OkfImportContext): Record<string, unknown>;
16
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/okf/map.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAO3D,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAExC;AAMD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYnF;AAKD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/D;AAOD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyBzB;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrD;AAID,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAID,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhD;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQpE;AAOD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,gBAAgB,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4CzB"}
@@ -0,0 +1,149 @@
1
+ // Pure frontmatter mappers between Daftari and OKF. No filesystem, no I/O — the
2
+ // export/import modules own that. Keeping the field translation here makes it
3
+ // unit-testable in isolation and keeps the two directions symmetric.
4
+ import { normalizeIsoDate } from "../utils/dates.js";
5
+ import { DAFTARI_SIDECAR_KEY, DEFAULT_IMPORT_COLLECTION, DEFAULT_OKF_TYPE } from "./types.js";
6
+ // True when `s` looks like an absolute URI (has a scheme + "://"). Daftari
7
+ // `sources` are often bare ids ("aurora-product-page"); only URI-shaped ones map
8
+ // to OKF's `resource`, which is defined as a URI identifying the asset.
9
+ export function isUri(s) {
10
+ return /^[a-z][a-z0-9+.-]*:\/\//i.test(s);
11
+ }
12
+ // A single-sentence summary for OKF's `description`. Prefers the first
13
+ // non-heading, non-list paragraph of the body (cut at the first sentence
14
+ // boundary); falls back to the doc's first `questions_answered` entry. Returns
15
+ // undefined when there is nothing usable, so the field is simply omitted.
16
+ export function deriveDescription(fm, body) {
17
+ for (const rawLine of body.split("\n")) {
18
+ const line = rawLine.trim();
19
+ if (line === "")
20
+ continue;
21
+ if (line.startsWith("#"))
22
+ continue; // heading
23
+ if (/^([-*+]|\d+\.)\s/.test(line))
24
+ continue; // list item
25
+ const sentence = /^(.*?[.!?])(\s|$)/.exec(line);
26
+ const text = (sentence ? sentence[1] : line).trim();
27
+ return text.length > 280 ? `${text.slice(0, 277)}...` : text;
28
+ }
29
+ if (fm.questions_answered.length > 0)
30
+ return fm.questions_answered[0];
31
+ return undefined;
32
+ }
33
+ // Daftari `YYYY-MM-DD` → OKF ISO 8601 datetime. Returns undefined for anything
34
+ // that isn't a real calendar date so an invalid `updated` never emits a bogus
35
+ // timestamp.
36
+ export function toIsoTimestamp(date) {
37
+ const norm = normalizeIsoDate(date);
38
+ return norm === null ? undefined : `${norm}T00:00:00Z`;
39
+ }
40
+ // Daftari document → OKF concept-doc frontmatter. `raw` is the document's
41
+ // original frontmatter verbatim; it is stashed under the `daftari` key so an
42
+ // `okf import` of this bundle can reconstruct the source exactly rather than
43
+ // re-deriving it from the lossy OKF core fields. `body` is unchanged by export;
44
+ // it is passed only to derive the description.
45
+ export function daftariToOkf(raw, fm, body) {
46
+ const out = {};
47
+ // `type` is the only required OKF field. Daftari's `collection` is the closest
48
+ // notion of a document kind; fall back to a generic type when it is empty.
49
+ out.type = fm.collection.trim() || DEFAULT_OKF_TYPE;
50
+ if (fm.title.trim() !== "")
51
+ out.title = fm.title;
52
+ const description = deriveDescription(fm, body);
53
+ if (description !== undefined)
54
+ out.description = description;
55
+ const resource = fm.sources.find(isUri);
56
+ if (resource !== undefined)
57
+ out.resource = resource;
58
+ if (fm.tags.length > 0)
59
+ out.tags = fm.tags;
60
+ const timestamp = toIsoTimestamp(fm.updated);
61
+ if (timestamp !== undefined)
62
+ out.timestamp = timestamp;
63
+ // Lossless round-trip channel. Never overwritten by the derived fields above
64
+ // because it lives under its own key.
65
+ out[DAFTARI_SIDECAR_KEY] = raw;
66
+ return out;
67
+ }
68
+ // Basename without extension, humanized, as a fallback title for a foreign OKF
69
+ // doc that omitted `title` (OKF says title is derived from the filename then).
70
+ export function titleFromPath(relPath) {
71
+ const base = relPath.split("/").pop() ?? relPath;
72
+ return base.replace(/\.md$/i, "").replace(/[-_]+/g, " ").trim();
73
+ }
74
+ // Top-level bundle directory of a doc, used as the Daftari collection so a
75
+ // bundle's folder structure survives import. Null for a doc at the bundle root.
76
+ export function collectionFromPath(relPath) {
77
+ const parts = relPath.split("/").filter((p) => p !== "");
78
+ return parts.length > 1 ? parts[0] : null;
79
+ }
80
+ // Lowercase kebab slug of an arbitrary OKF `type` string, for use as a Daftari
81
+ // collection when the doc has no directory. Returns null if nothing survives.
82
+ export function slugify(s) {
83
+ const slug = s
84
+ .toLowerCase()
85
+ .replace(/[^a-z0-9]+/g, "-")
86
+ .replace(/^-+|-+$/g, "");
87
+ return slug === "" ? null : slug;
88
+ }
89
+ // OKF `timestamp` → Daftari `YYYY-MM-DD`. Accepts a js-yaml Date (unquoted ISO
90
+ // datetimes parse to Date), an ISO string, or a bare date; returns undefined
91
+ // when it cannot recover a real calendar date.
92
+ export function dateFromTimestamp(value) {
93
+ if (value instanceof Date && !Number.isNaN(value.getTime())) {
94
+ return value.toISOString().slice(0, 10);
95
+ }
96
+ if (typeof value === "string") {
97
+ return normalizeIsoDate(value.slice(0, 10)) ?? undefined;
98
+ }
99
+ return undefined;
100
+ }
101
+ function asStringArray(value) {
102
+ if (!Array.isArray(value))
103
+ return [];
104
+ return value.filter((v) => typeof v === "string");
105
+ }
106
+ // OKF concept-doc frontmatter → Daftari frontmatter (as a raw record ready for
107
+ // serializeDocument). When the doc carries a `daftari` sidecar (it came from
108
+ // `daftari okf export`), that verbatim frontmatter is used directly for an exact
109
+ // round-trip. Otherwise a Daftari frontmatter is synthesized from the OKF core
110
+ // fields, conservatively: imported knowledge lands as a `draft` in the
111
+ // `accumulation` domain, and the original OKF `type` is preserved in an
112
+ // `okf_type` field so nothing is silently lost.
113
+ export function okfToDaftari(okfRaw, ctx) {
114
+ const sidecar = okfRaw[DAFTARI_SIDECAR_KEY];
115
+ if (sidecar !== null && typeof sidecar === "object" && !Array.isArray(sidecar)) {
116
+ return { ...sidecar };
117
+ }
118
+ const title = typeof okfRaw.title === "string" && okfRaw.title.trim() !== ""
119
+ ? okfRaw.title
120
+ : titleFromPath(ctx.relPath);
121
+ const okfType = typeof okfRaw.type === "string" ? okfRaw.type : "";
122
+ const collection = collectionFromPath(ctx.relPath) ?? slugify(okfType) ?? DEFAULT_IMPORT_COLLECTION;
123
+ const date = dateFromTimestamp(okfRaw.timestamp) ?? ctx.today;
124
+ const sources = typeof okfRaw.resource === "string" && okfRaw.resource.trim() !== "" ? [okfRaw.resource] : [];
125
+ const out = {
126
+ title,
127
+ domain: "accumulation",
128
+ collection,
129
+ status: "draft",
130
+ confidence: "medium",
131
+ created: date,
132
+ updated: date,
133
+ updated_by: ctx.updatedBy,
134
+ provenance: "direct",
135
+ sources,
136
+ superseded_by: null,
137
+ ttl_days: null,
138
+ tags: asStringArray(okfRaw.tags),
139
+ describes: [],
140
+ questions_answered: [],
141
+ questions_raised: [],
142
+ };
143
+ // Preserve the OKF kind so the import is not lossy. serializeDocument writes
144
+ // unknown fields through untouched.
145
+ if (okfType.trim() !== "")
146
+ out.okf_type = okfType;
147
+ return out;
148
+ }
149
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/okf/map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const OKF_VERSION = "0.1";
2
+ export declare const OKF_INDEX_FILE = "index.md";
3
+ export declare const OKF_LOG_FILE = "log.md";
4
+ export declare const OKF_RESERVED_FILES: readonly ["index.md", "log.md"];
5
+ export declare const DAFTARI_SIDECAR_KEY = "daftari";
6
+ export declare const DEFAULT_OKF_TYPE = "note";
7
+ export declare const DEFAULT_IMPORT_COLLECTION = "imported";
8
+ export declare const OKF_CORE_FIELDS: readonly ["type", "title", "description", "resource", "tags", "timestamp"];
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/okf/types.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,WAAW,QAAQ,CAAC;AAIjC,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,kBAAkB,iCAA0C,CAAC;AAO1E,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAM7C,eAAO,MAAM,gBAAgB,SAAS,CAAC;AAIvC,eAAO,MAAM,yBAAyB,aAAa,CAAC;AAIpD,eAAO,MAAM,eAAe,4EAOlB,CAAC"}
@@ -0,0 +1,48 @@
1
+ // Open Knowledge Format (OKF) — shared constants and types.
2
+ //
3
+ // OKF is Google Cloud's vendor-neutral specification (v0.1) for the LLM-wiki
4
+ // pattern: a directory of markdown files with YAML frontmatter that any
5
+ // producer can emit and any consumer can read without translation. Daftari's
6
+ // vault *is* this pattern, so `daftari okf export|import` bridges the two.
7
+ //
8
+ // Spec essentials that this module implements:
9
+ // - A concept doc is any non-reserved `.md` file with a frontmatter block.
10
+ // - The single required frontmatter field is `type` (a free-form kind string).
11
+ // - Recommended fields: title, description, resource, tags, timestamp.
12
+ // - Reserved filenames: index.md (progressive-disclosure listing) and log.md
13
+ // (chronological change history, newest first).
14
+ // - Consumers must tolerate unknown fields and unknown `type` values.
15
+ // The OKF spec version this producer targets and this consumer understands.
16
+ // Written into the exported bundle's root index.md frontmatter (the spec's
17
+ // place for a bundle to declare its target version).
18
+ export const OKF_VERSION = "0.1";
19
+ // Reserved filenames with defined structural meaning. They are NOT concept
20
+ // docs: export generates them, import skips them.
21
+ export const OKF_INDEX_FILE = "index.md";
22
+ export const OKF_LOG_FILE = "log.md";
23
+ export const OKF_RESERVED_FILES = [OKF_INDEX_FILE, OKF_LOG_FILE];
24
+ // The frontmatter key under which export stashes the document's original,
25
+ // verbatim Daftari frontmatter. It is an ordinary producer-defined field as far
26
+ // as OKF is concerned (consumers preserve it), but it lets `okf import` of a
27
+ // Daftari-produced bundle reconstruct the source frontmatter exactly rather than
28
+ // re-synthesizing it from the lossy OKF core fields. Absent on foreign bundles.
29
+ export const DAFTARI_SIDECAR_KEY = "daftari";
30
+ // The `type` value assigned to a concept doc that has no natural kind to map
31
+ // from (an untitled/uncollected doc on export, a foreign doc with no directory
32
+ // on import). OKF requires a non-empty `type`; this keeps every emitted doc
33
+ // conformant without inventing a false-specific kind.
34
+ export const DEFAULT_OKF_TYPE = "note";
35
+ // The Daftari collection assigned to a foreign OKF concept doc that carries no
36
+ // directory and no usable `type` to derive one from.
37
+ export const DEFAULT_IMPORT_COLLECTION = "imported";
38
+ // The canonical OKF frontmatter fields, in the order export writes them. `type`
39
+ // is the only required one; the rest are recommended and omitted when empty.
40
+ export const OKF_CORE_FIELDS = [
41
+ "type",
42
+ "title",
43
+ "description",
44
+ "resource",
45
+ "tags",
46
+ "timestamp",
47
+ ];
48
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/okf/types.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,6EAA6E;AAC7E,wEAAwE;AACxE,6EAA6E;AAC7E,2EAA2E;AAC3E,EAAE;AACF,+CAA+C;AAC/C,6EAA6E;AAC7E,iFAAiF;AACjF,yEAAyE;AACzE,+EAA+E;AAC/E,oDAAoD;AACpD,wEAAwE;AAExE,4EAA4E;AAC5E,2EAA2E;AAC3E,qDAAqD;AACrD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AAEjC,2EAA2E;AAC3E,kDAAkD;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AACzC,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,cAAc,EAAE,YAAY,CAAU,CAAC;AAE1E,0EAA0E;AAC1E,gFAAgF;AAChF,6EAA6E;AAC7E,iFAAiF;AACjF,gFAAgF;AAChF,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAE7C,6EAA6E;AAC7E,+EAA+E;AAC/E,4EAA4E;AAC5E,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,+EAA+E;AAC/E,qDAAqD;AACrD,MAAM,CAAC,MAAM,yBAAyB,GAAG,UAAU,CAAC;AAEpD,gFAAgF;AAChF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM;IACN,OAAO;IACP,aAAa;IACb,UAAU;IACV,MAAM;IACN,WAAW;CACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/search/coverage.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,OAAO,EAEb,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,wBAAwB,EAAE,eAOtC,CAAC;AAMF,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgB/F;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAuBD,wBAAgB,aAAa,CAC3B,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,SAAS,EAAE,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,GACpB,UAAU,GAAG,IAAI,CAcnB;AA8CD,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,SAAS,EAAE,EACjB,IAAI,GAAE,eAA0C,GAC/C,SAAS,EAAE,CAUb;AAMD,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,eAAe,GAAG,SAAS,EAAE,CAwBrF"}
1
+ {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/search/coverage.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,OAAO,EAEb,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,wBAAwB,EAAE,eAOtC,CAAC;AAMF,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgB/F;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAuBD,wBAAgB,aAAa,CAC3B,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,SAAS,EAAE,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,GACpB,UAAU,GAAG,IAAI,CAanB;AA8CD,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,SAAS,EAAE,EACjB,IAAI,GAAE,eAA0C,GAC/C,SAAS,EAAE,CAUb;AAMD,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,eAAe,GAAG,SAAS,EAAE,CAwBrF"}
@@ -59,7 +59,7 @@ export function computeWindow(db, hits, entity, opts) {
59
59
  const dates = [];
60
60
  for (const h of hits.slice(0, opts.seedK)) {
61
61
  const d = getDocument(db, h.path);
62
- if (d && d.tags.includes(entity) && d.created && isValidIsoDate(d.created))
62
+ if (d?.tags.includes(entity) && d.created && isValidIsoDate(d.created))
63
63
  dates.push(d.created);
64
64
  }
65
65
  if (dates.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/search/coverage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/search/coverage.ts"],"names":[],"mappings":"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"}
@@ -21,15 +21,34 @@ export interface HybridHit {
21
21
  currentSource?: CurrentSource;
22
22
  contested?: ContestedTension[];
23
23
  contestedCount?: number;
24
+ pendingBrokenUpstream?: "some" | "many";
25
+ hiddenPendingUpstream?: "some" | "many";
26
+ orphan?: boolean;
27
+ deprecatedStillLinked?: boolean;
24
28
  viaCoverage?: boolean;
25
29
  coverageReason?: "edge" | "entity-window";
26
30
  }
31
+ export interface RerankCandidate {
32
+ rank: number;
33
+ path: string;
34
+ title: string;
35
+ collection: string;
36
+ status: string;
37
+ score: number;
38
+ bm25Score: number;
39
+ vectorScore: number;
40
+ snippet: string;
41
+ }
27
42
  export interface HybridSearchResult {
28
43
  query: string;
29
44
  count: number;
30
45
  vectorUsed: boolean;
31
46
  weights: HybridWeights;
32
47
  hits: HybridHit[];
48
+ rerank?: {
49
+ instructions: string;
50
+ candidates: RerankCandidate[];
51
+ };
33
52
  }
34
53
  export interface HybridSearchOptions {
35
54
  weights?: HybridWeights;
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../src/search/hybrid.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAKL,KAAK,OAAO,EACb,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,eAAe,EAAE,aAA0C,CAAC;AAEzE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,SAAS,EAAE,CAAC;CACnB;AA0QD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAQ1C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAGD,wBAAsB,YAAY,CAChC,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAqC5C;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,SAAS,EAAE,CAAC;CACnB;AAOD,wBAAgB,aAAa,CAC3B,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,CA+CpC"}
1
+ {"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../src/search/hybrid.ts"],"names":[],"mappings":"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"}
@@ -151,23 +151,43 @@ function vecRanking(db, queryEmbedding, modelId) {
151
151
  }
152
152
  return result;
153
153
  }
154
+ // snippet() excerpt budget, in tokens. ~48 stemmed tokens lands near the
155
+ // ~280 chars the JS fallback (SNIPPET_RADIUS * 2) produces, so lexical and
156
+ // fallback snippets read at comparable length.
157
+ const FTS_SNIPPET_TOKENS = 48;
154
158
  // Chunk-level lexical ranking. Runs an FTS5 MATCH over `chunks_fts` (one row
155
159
  // per chunk), reads the inverse bm25 (flip to larger=better), joins back to
156
160
  // `chunks` on rowid to map onto document paths, and collapses to each
157
161
  // document's BEST chunk score (max) — mirroring vecRanking's best-per-doc.
158
162
  // A relevant topic's own chunk scores high even when its whole document is
159
- // long and multi-topic. Null query (no usable tokens) returns an empty map.
163
+ // long and multi-topic. Null query (no usable tokens) returns empty maps.
164
+ //
165
+ // The same pass captures each document's excerpt via FTS5 snippet() from its
166
+ // best-scoring chunk (#108): the inverted index centres the excerpt on the
167
+ // actual match — stemmed variants included, which the JS fallback's literal
168
+ // indexOf cannot see — and no full body is scanned in JS. snippet() is
169
+ // legal here because chunks_fts is EXTERNAL-CONTENT (content='chunks') with
170
+ // a matching column name; documents_fts declares content_body over a base
171
+ // column named content, so the document-granularity path deliberately keeps
172
+ // the JS fallback instead of a schema migration.
160
173
  function chunkFtsRanking(db, query) {
161
174
  if (query === null)
162
- return new Map();
175
+ return { scores: new Map(), snippets: new Map() };
163
176
  const rows = db
164
- .prepare(`SELECT c.path AS path, -bm25(chunks_fts) AS score
177
+ .prepare(`SELECT c.path AS path, chunks_fts.rowid AS crowid, -bm25(chunks_fts) AS score
165
178
  FROM chunks_fts
166
179
  JOIN chunks AS c ON c.rowid = chunks_fts.rowid
167
180
  WHERE chunks_fts MATCH ?
168
181
  ORDER BY bm25(chunks_fts)`)
169
182
  .all(query);
170
- const result = new Map();
183
+ const scores = new Map();
184
+ // The winning chunk's FTS rowid per path — the snippet pass below is
185
+ // restricted to exactly these rows, so snippet()'s tokenize/format cost is
186
+ // paid once per DOCUMENT, not once per matched chunk. (A ROW_NUMBER()
187
+ // window subquery would not help here: the projected snippet() is still
188
+ // evaluated per inner row before the window filter, and FTS5 auxiliary
189
+ // functions cannot move outside the MATCH cursor.)
190
+ const winners = new Map();
171
191
  for (const r of rows) {
172
192
  // Some rows may produce a non-positive flipped score if FTS5 returned a
173
193
  // positive bm25 (rare with prefix matches); drop them so the normalize
@@ -179,11 +199,31 @@ function chunkFtsRanking(db, query) {
179
199
  // their raw scores are never directly compared.
180
200
  if (r.score <= 0)
181
201
  continue;
182
- const prev = result.get(r.path) ?? -Infinity;
183
- if (r.score > prev)
184
- result.set(r.path, r.score);
202
+ const prev = scores.get(r.path) ?? -Infinity;
203
+ if (r.score > prev) {
204
+ scores.set(r.path, r.score);
205
+ // Keying on the max KEPT score guarantees the snippet always comes
206
+ // from the same chunk the document's score does.
207
+ winners.set(r.path, r.crowid);
208
+ }
185
209
  }
186
- return result;
210
+ const snippets = new Map();
211
+ if (winners.size > 0) {
212
+ const ids = [...winners.values()];
213
+ const placeholders = ids.map(() => "?").join(",");
214
+ const snips = db
215
+ .prepare(`SELECT c.path AS path, snippet(chunks_fts, 0, '', '', '…', ?) AS snip
216
+ FROM chunks_fts
217
+ JOIN chunks AS c ON c.rowid = chunks_fts.rowid
218
+ WHERE chunks_fts MATCH ? AND chunks_fts.rowid IN (${placeholders})`)
219
+ .all(FTS_SNIPPET_TOKENS, query, ...ids);
220
+ for (const s of snips) {
221
+ const collapsed = s.snip.replace(/\s+/g, " ").trim();
222
+ if (collapsed.length > 0)
223
+ snippets.set(s.path, collapsed);
224
+ }
225
+ }
226
+ return { scores, snippets };
187
227
  }
188
228
  // Core ranker shared by query search and related-document search.
189
229
  // `matchQuery` is the FTS5 MATCH string (already prefix-OR'd, or null);
@@ -193,13 +233,18 @@ function chunkFtsRanking(db, query) {
193
233
  // matching term — it doesn't drive ranking.
194
234
  function rankDocuments(db, matchQuery, queryEmbedding, queryTokensForSnippet, opts) {
195
235
  let bm25Norm;
236
+ // Best-chunk excerpts from the lexical pass (#108); empty for the
237
+ // document-granularity path, whose hits fall back to the JS scan.
238
+ let lexicalSnippets = new Map();
196
239
  if (opts.lexicalGranularity === "chunk") {
197
240
  // Body granularity (the dilution fix) TIERED with a clean title/tag signal
198
241
  // (the native-shape fix). Each is normalized to its own max to reconcile the
199
242
  // two FTS score scales; tieredLexical then ranks every body match above every
200
243
  // title-only match. The title/tag signal reuses ftsRanking with a column-
201
244
  // restricted query so it scores title+tags only (no body dilution).
202
- const chunkNorm = normalize(chunkFtsRanking(db, matchQuery));
245
+ const chunkRanked = chunkFtsRanking(db, matchQuery);
246
+ lexicalSnippets = chunkRanked.snippets;
247
+ const chunkNorm = normalize(chunkRanked.scores);
203
248
  const titleTagNorm = normalize(ftsRanking(db, columnRestrict(matchQuery, "{title tags}")));
204
249
  bm25Norm = tieredLexical(chunkNorm, titleTagNorm);
205
250
  }
@@ -246,7 +291,10 @@ function rankDocuments(db, matchQuery, queryEmbedding, queryTokensForSnippet, op
246
291
  score,
247
292
  bm25Score,
248
293
  vectorScore,
249
- snippet: makeSnippet(doc.content, queryTokensForSnippet),
294
+ // FTS5's excerpt for lexical hits (#108); the JS body scan remains the
295
+ // fallback for vector-only and title/tag-only hits, which have no
296
+ // matched body chunk to centre on.
297
+ snippet: lexicalSnippets.get(path) ?? makeSnippet(doc.content, queryTokensForSnippet),
250
298
  decay: computeDecay({
251
299
  status: doc.status,
252
300
  confidence: doc.confidence,