@dikolab/kbdb 0.3.2 → 0.4.1

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 (523) hide show
  1. package/README.md +92 -90
  2. package/dist/chunk-BJXEVALU.mjs +337 -0
  3. package/dist/chunk-BJXEVALU.mjs.map +7 -0
  4. package/dist/cli.cjs +1398 -378
  5. package/dist/cli.cjs.map +4 -4
  6. package/dist/cli.d.ts +9 -0
  7. package/dist/cli.mjs +1138 -342
  8. package/dist/cli.mjs.map +4 -4
  9. package/dist/kbdb-worker.cjs +1115 -135
  10. package/dist/kbdb-worker.cjs.map +4 -4
  11. package/dist/mod.cjs +351 -69
  12. package/dist/mod.cjs.map +4 -4
  13. package/dist/mod.d.ts +23 -2
  14. package/dist/mod.mjs +349 -68
  15. package/dist/mod.mjs.map +4 -4
  16. package/dist/src/shared/cli/functions/dispatch-command.function.d.ts +2 -1
  17. package/dist/src/shared/cli/functions/find-db.function.d.ts +7 -8
  18. package/dist/src/shared/cli/functions/handle-mcp.function.d.ts +1 -1
  19. package/dist/src/shared/cli/functions/parse-args.function.d.ts +4 -3
  20. package/dist/src/shared/cli/functions/resolve-kbid-prefix.function.d.ts +27 -0
  21. package/dist/src/shared/cli/functions/resolve-raw-db-path.function.d.ts +10 -0
  22. package/dist/src/shared/cli/functions/run-cli.function.d.ts +3 -1
  23. package/dist/src/shared/cli/functions/run-content.function.d.ts +8 -3
  24. package/dist/src/shared/cli/functions/run-import.function.d.ts +27 -0
  25. package/dist/src/shared/cli/functions/run-recall.function.d.ts +10 -4
  26. package/dist/src/shared/cli/functions/run-search.function.d.ts +7 -0
  27. package/dist/src/shared/cli/functions/run-unlearn.function.d.ts +9 -4
  28. package/dist/src/shared/cli/functions/run-worker-restart.function.d.ts +11 -0
  29. package/dist/src/shared/cli/functions/run-worker-stop.function.d.ts +11 -0
  30. package/dist/src/shared/cli/index.d.ts +2 -0
  31. package/dist/src/shared/cli/typings/cli-deps.interface.d.ts +4 -1
  32. package/dist/src/shared/cli/typings/cli-options.interface.d.ts +22 -0
  33. package/dist/src/shared/cli/typings/dispatch-client.type.d.ts +2 -1
  34. package/dist/src/shared/cli/typings/search-display.model.d.ts +6 -0
  35. package/dist/src/shared/embedding/classes/api-embedding-provider.class.d.ts +33 -0
  36. package/dist/src/shared/embedding/classes/onnx-embedding-provider.class.d.ts +33 -0
  37. package/dist/src/shared/embedding/classes/tfidf-embedding-provider.class.d.ts +28 -0
  38. package/dist/src/shared/embedding/constants/tfidf-defaults.constant.d.ts +4 -0
  39. package/dist/src/shared/embedding/functions/append-vector-entry.function.d.ts +14 -0
  40. package/dist/src/shared/embedding/functions/create-embedding-provider.function.d.ts +15 -0
  41. package/dist/src/shared/embedding/functions/detect-stale-vectors.function.d.ts +16 -0
  42. package/dist/src/shared/embedding/functions/parse-api-embedding-response.function.d.ts +11 -0
  43. package/dist/src/shared/embedding/functions/rebuild-vectors.function.d.ts +15 -0
  44. package/dist/src/shared/embedding/functions/scan-semantic-contradictions.function.d.ts +13 -0
  45. package/dist/src/shared/embedding/index.d.ts +9 -0
  46. package/dist/src/shared/embedding/typings/semantic-contradiction.model.d.ts +21 -0
  47. package/dist/src/shared/embedding/typings/stale-vectors-report.model.d.ts +16 -0
  48. package/dist/src/shared/log/constants/log-colors.constant.d.ts +5 -0
  49. package/dist/src/shared/log/constants/log-defaults.constant.d.ts +3 -0
  50. package/dist/src/shared/log/constants/log-icons.constant.d.ts +3 -0
  51. package/dist/src/shared/log/functions/configure-log.function.d.ts +12 -0
  52. package/dist/src/shared/log/functions/log.function.d.ts +28 -0
  53. package/dist/src/shared/log/functions/parse-log-level.function.d.ts +10 -0
  54. package/dist/src/shared/log/functions/resolve-log-level.function.d.ts +12 -0
  55. package/dist/src/shared/log/functions/write-stderr.function.d.ts +10 -0
  56. package/dist/src/shared/log/index.d.ts +10 -0
  57. package/dist/src/shared/log/typings/log-config.interface.d.ts +7 -0
  58. package/dist/src/shared/log/typings/log-level.type.d.ts +7 -0
  59. package/dist/src/shared/log/typings/log-output.interface.d.ts +4 -0
  60. package/dist/src/shared/mcp/classes/mcp-server.class.d.ts +22 -2
  61. package/dist/src/shared/mcp/functions/create-mcp-server.function.d.ts +6 -1
  62. package/dist/src/shared/mcp/functions/has-sampling-capability.function.d.ts +8 -0
  63. package/dist/src/shared/mcp/functions/run-auto-capture.function.d.ts +26 -0
  64. package/dist/src/shared/mcp/typings/mcp-client.interface.d.ts +2 -0
  65. package/dist/src/shared/mcp/typings/mcp-integrity-check-result.model.d.ts +24 -0
  66. package/dist/src/shared/mcp/typings/mcp-worker-client.interface.d.ts +3 -1
  67. package/dist/src/shared/version/constants/version.constant.d.ts +1 -1
  68. package/dist/src/shared/wasm-codec/typings/paged-search-result.model.d.ts +2 -0
  69. package/dist/src/shared/worker-client/classes/worker-client.class.d.ts +38 -1
  70. package/dist/src/shared/worker-client/constants/request-timeout.constant.d.ts +2 -0
  71. package/dist/src/shared/worker-client/constants/retry-defaults.constant.d.ts +2 -0
  72. package/dist/src/shared/worker-client/functions/get-or-create-client.function.d.ts +20 -0
  73. package/dist/src/shared/worker-client/functions/retry-on-timeout.function.d.ts +18 -0
  74. package/dist/src/shared/worker-client/index.d.ts +4 -1
  75. package/dist/src/shared/worker-client/typings/import-result.model.d.ts +16 -0
  76. package/dist/src/shared/worker-client/typings/integrity-check-result.model.d.ts +24 -0
  77. package/dist/src/shared/worker-client/typings/search-params.model.d.ts +4 -0
  78. package/dist/src/shared/worker-client/typings/search-result.model.d.ts +6 -0
  79. package/dist/src/shared/worker-client/typings/worker-client-options.interface.d.ts +7 -0
  80. package/dist/src/shared/worker-daemon/classes/worker-daemon.class.d.ts +6 -0
  81. package/dist/src/shared/worker-daemon/functions/create-ipc-server.function.d.ts +11 -11
  82. package/dist/src/shared/worker-daemon/functions/embed-after-learn.function.d.ts +13 -0
  83. package/dist/src/shared/worker-daemon/functions/handle-hybrid-search.function.d.ts +44 -0
  84. package/dist/src/shared/worker-daemon/functions/handle-import.function.d.ts +14 -0
  85. package/dist/src/shared/worker-daemon/functions/handle-read-ops.function.d.ts +7 -1
  86. package/dist/src/shared/worker-daemon/functions/handle-write-ops.function.d.ts +9 -4
  87. package/dist/src/shared/worker-daemon/functions/run-worker.function.d.ts +6 -1
  88. package/dist/src/shared/worker-daemon/typings/handler-context.interface.d.ts +3 -0
  89. package/dist/src/shared/worker-daemon/typings/wasm-modules.interface.d.ts +5 -0
  90. package/dist/wasm/default-embedding/kbdb_default_embedding.d.ts +55 -0
  91. package/dist/wasm/default-embedding/kbdb_default_embedding.js +156 -0
  92. package/{src/wasm/query-parser/kbdb_query_parser_bg.wasm → dist/wasm/default-embedding/kbdb_default_embedding_bg.wasm} +0 -0
  93. package/dist/wasm/default-embedding/kbdb_default_embedding_bg.wasm.d.ts +12 -0
  94. package/dist/wasm/default-embedding/package.json +13 -0
  95. package/dist/wasm/fs-database/kbdb_fs_database.d.ts +16 -85
  96. package/dist/wasm/fs-database/kbdb_fs_database.js +16 -85
  97. package/dist/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
  98. package/dist/wasm/fs-migration/kbdb_fs_migration.d.ts +38 -0
  99. package/dist/wasm/fs-migration/kbdb_fs_migration.js +130 -0
  100. package/dist/wasm/fs-migration/kbdb_fs_migration_bg.wasm +0 -0
  101. package/dist/wasm/fs-migration/kbdb_fs_migration_bg.wasm.d.ts +9 -0
  102. package/dist/wasm/fs-migration/package.json +13 -0
  103. package/dist/wasm/kb-worker/kbdb_worker.d.ts +20 -115
  104. package/dist/wasm/kb-worker/kbdb_worker.js +20 -115
  105. package/dist/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
  106. package/dist/wasm/query-parser/kbdb_query_parser_bg.wasm +0 -0
  107. package/dist/worker.d.ts +8 -0
  108. package/dist/worker.mjs +899 -143
  109. package/dist/worker.mjs.map +4 -4
  110. package/docs/details/README.md +4 -0
  111. package/docs/details/agent-tooling.md +132 -0
  112. package/docs/details/cli.md +91 -18
  113. package/docs/details/knowledge-base.md +180 -0
  114. package/docs/details/library-api.md +42 -2
  115. package/docs/details/mcp-server.md +53 -7
  116. package/docs/details/search-and-ranking.md +16 -11
  117. package/docs/goals/cli.md +142 -37
  118. package/docs/goals/content-parser.md +1 -1
  119. package/docs/goals/hybrid-search.md +71 -42
  120. package/docs/goals/mcp.md +24 -19
  121. package/docs/goals/overview.md +1 -1
  122. package/docs/goals/query-parser.md +8 -0
  123. package/docs/goals/semantic-dedup.md +7 -3
  124. package/docs/goals/worker-client.md +62 -1
  125. package/docs/goals/worker-daemon.md +83 -30
  126. package/docs/modules/overview.md +43 -22
  127. package/docs/modules/rust/embedding/module.md +91 -0
  128. package/docs/modules/rust/overview.md +56 -21
  129. package/docs/modules/rust/query-parser/functions/module.md +7 -5
  130. package/docs/modules/rust/query-parser/functions/pipeline.md +6 -138
  131. package/docs/modules/rust/query-parser/module.md +16 -22
  132. package/docs/modules/rust/query-parser/types/module.md +5 -4
  133. package/docs/modules/rust/query-parser/types/token.md +5 -1
  134. package/docs/modules/rust/shared/content-parser/functions.md +1 -1
  135. package/docs/modules/rust/shared/memory/module.md +1 -1
  136. package/docs/modules/rust/shared/module.md +33 -5
  137. package/docs/modules/rust/shared/pipeline/functions.md +141 -0
  138. package/docs/modules/rust/shared/pipeline/module.md +62 -0
  139. package/docs/modules/rust/shared/pipeline/types.md +43 -0
  140. package/docs/modules/rust/shared/section/module.md +1 -1
  141. package/docs/modules/rust/shared/section/types.md +1 -1
  142. package/docs/modules/typescript/cli.md +5 -3
  143. package/docs/modules/typescript/kbdb-worker.md +20 -5
  144. package/docs/modules/typescript/overview.md +28 -6
  145. package/docs/modules/typescript/shared/cli/functions.md +131 -17
  146. package/docs/modules/typescript/shared/cli/module.md +33 -20
  147. package/docs/modules/typescript/shared/cli/typings.md +25 -0
  148. package/docs/modules/typescript/shared/embedding/functions.md +125 -19
  149. package/docs/modules/typescript/shared/embedding/module.md +10 -4
  150. package/docs/modules/typescript/shared/embedding/typings.md +7 -5
  151. package/docs/modules/typescript/shared/log/constants.md +82 -0
  152. package/docs/modules/typescript/shared/log/functions.md +131 -0
  153. package/docs/modules/typescript/shared/log/module.md +153 -0
  154. package/docs/modules/typescript/shared/log/typings.md +82 -0
  155. package/docs/modules/typescript/shared/mcp/module.md +1 -1
  156. package/docs/modules/typescript/shared/mcp/typings.md +8 -1
  157. package/docs/modules/typescript/shared/module.md +22 -6
  158. package/docs/modules/typescript/shared/worker-client/module.md +9 -1
  159. package/docs/modules/typescript/shared/worker-client/typings.md +3 -0
  160. package/docs/modules/typescript/shared/worker-daemon/functions.md +19 -6
  161. package/docs/modules/typescript/shared/worker-daemon/module.md +11 -5
  162. package/docs/modules/typescript/shared/worker-daemon/typings.md +13 -7
  163. package/docs/overview.md +1 -2
  164. package/docs/release-notes/0.4.0.md +80 -0
  165. package/docs/release-notes/0.4.1.md +149 -0
  166. package/docs/release-notes/README.md +1 -0
  167. package/mod.ts +33 -15
  168. package/package.json +12 -11
  169. package/dist/chunk-JG2UCKLI.mjs +0 -95
  170. package/dist/chunk-JG2UCKLI.mjs.map +0 -7
  171. package/src/cli.ts +0 -71
  172. package/src/shared/auto-capture/classes/auto-capture-controller.class.ts +0 -62
  173. package/src/shared/auto-capture/constants/auto-capture-defaults.constant.ts +0 -15
  174. package/src/shared/auto-capture/functions/build-capture-prompt.function.ts +0 -27
  175. package/src/shared/auto-capture/functions/evaluate-trigger.function.ts +0 -50
  176. package/src/shared/auto-capture/index.ts +0 -7
  177. package/src/shared/auto-capture/typings/auto-capture-config.interface.ts +0 -13
  178. package/src/shared/auto-capture/typings/auto-capture-state.interface.ts +0 -13
  179. package/src/shared/auto-capture/typings/auto-capture-trigger.interface.ts +0 -7
  180. package/src/shared/cli/constants/defaults.constant.ts +0 -19
  181. package/src/shared/cli/constants/global-help.constant.ts +0 -73
  182. package/src/shared/cli/constants/help-text.constant.ts +0 -4
  183. package/src/shared/cli/constants/leaf-help.constant.ts +0 -219
  184. package/src/shared/cli/constants/memory-protocol-body.constant.ts +0 -39
  185. package/src/shared/cli/constants/query-guidance-body.constant.ts +0 -37
  186. package/src/shared/cli/constants/subcommand-help.constant.ts +0 -195
  187. package/src/shared/cli/functions/collect-files.function.ts +0 -55
  188. package/src/shared/cli/functions/compute-section-kbid.function.ts +0 -49
  189. package/src/shared/cli/functions/dispatch-command.function.ts +0 -390
  190. package/src/shared/cli/functions/ensure-db.function.ts +0 -21
  191. package/src/shared/cli/functions/error-to-message.function.ts +0 -9
  192. package/src/shared/cli/functions/find-db.function.ts +0 -20
  193. package/src/shared/cli/functions/format-mcp-output.function.ts +0 -41
  194. package/src/shared/cli/functions/format-output.function.ts +0 -95
  195. package/src/shared/cli/functions/format-text-output.function.ts +0 -42
  196. package/src/shared/cli/functions/generate-group-help.function.ts +0 -41
  197. package/src/shared/cli/functions/generate-help.function.ts +0 -654
  198. package/src/shared/cli/functions/handle-data-command.function.ts +0 -67
  199. package/src/shared/cli/functions/handle-mcp.function.ts +0 -56
  200. package/src/shared/cli/functions/handle-migrate.function.ts +0 -64
  201. package/src/shared/cli/functions/hydrate-search-previews.function.ts +0 -29
  202. package/src/shared/cli/functions/install-default-skills.function.ts +0 -296
  203. package/src/shared/cli/functions/is-stdin-tty.function.ts +0 -12
  204. package/src/shared/cli/functions/parse-args.function.ts +0 -156
  205. package/src/shared/cli/functions/prompt-user.function.ts +0 -36
  206. package/src/shared/cli/functions/resolve-skill-names.function.ts +0 -43
  207. package/src/shared/cli/functions/run-agent-create.function.ts +0 -114
  208. package/src/shared/cli/functions/run-agent-delete.function.ts +0 -47
  209. package/src/shared/cli/functions/run-agent-get.function.ts +0 -166
  210. package/src/shared/cli/functions/run-agent-list.function.ts +0 -58
  211. package/src/shared/cli/functions/run-check.function.ts +0 -159
  212. package/src/shared/cli/functions/run-cli.function.ts +0 -299
  213. package/src/shared/cli/functions/run-content.function.ts +0 -47
  214. package/src/shared/cli/functions/run-db-init.function.ts +0 -44
  215. package/src/shared/cli/functions/run-db-migrate.function.ts +0 -40
  216. package/src/shared/cli/functions/run-export.function.ts +0 -40
  217. package/src/shared/cli/functions/run-gc.function.ts +0 -51
  218. package/src/shared/cli/functions/run-init.function.ts +0 -93
  219. package/src/shared/cli/functions/run-learn.function.ts +0 -223
  220. package/src/shared/cli/functions/run-migrate.function.ts +0 -85
  221. package/src/shared/cli/functions/run-rebuild.function.ts +0 -47
  222. package/src/shared/cli/functions/run-recall.function.ts +0 -66
  223. package/src/shared/cli/functions/run-search.function.ts +0 -133
  224. package/src/shared/cli/functions/run-skill-delete.function.ts +0 -47
  225. package/src/shared/cli/functions/run-skill-get.function.ts +0 -90
  226. package/src/shared/cli/functions/run-skill-learn.function.ts +0 -70
  227. package/src/shared/cli/functions/run-skill-list.function.ts +0 -74
  228. package/src/shared/cli/functions/run-status.function.ts +0 -29
  229. package/src/shared/cli/functions/run-unlearn.function.ts +0 -58
  230. package/src/shared/cli/functions/version-gate.function.ts +0 -44
  231. package/src/shared/cli/functions/wrap-command.function.ts +0 -34
  232. package/src/shared/cli/index.ts +0 -55
  233. package/src/shared/cli/typings/agent-create-client.interface.ts +0 -47
  234. package/src/shared/cli/typings/agent-get-client.interface.ts +0 -39
  235. package/src/shared/cli/typings/check-client.interface.ts +0 -66
  236. package/src/shared/cli/typings/cli-deps.interface.ts +0 -54
  237. package/src/shared/cli/typings/cli-options.interface.ts +0 -72
  238. package/src/shared/cli/typings/command-result.model.ts +0 -15
  239. package/src/shared/cli/typings/disconnectable-client.interface.ts +0 -29
  240. package/src/shared/cli/typings/dispatch-client.type.ts +0 -46
  241. package/src/shared/cli/typings/learn-client.interface.ts +0 -53
  242. package/src/shared/cli/typings/learn-io.interface.ts +0 -5
  243. package/src/shared/cli/typings/learn-result.model.ts +0 -27
  244. package/src/shared/cli/typings/search-client.interface.ts +0 -73
  245. package/src/shared/cli/typings/search-display.model.ts +0 -54
  246. package/src/shared/dir-resolver/functions/join-path.function.ts +0 -13
  247. package/src/shared/dir-resolver/functions/resolve-base-dir.function.ts +0 -25
  248. package/src/shared/dir-resolver/functions/resolve-wasm-dir.function.ts +0 -5
  249. package/src/shared/dir-resolver/functions/resolve-worker-script.function.ts +0 -13
  250. package/src/shared/dir-resolver/index.ts +0 -11
  251. package/src/shared/dir-resolver/typings/base-dir.interface.ts +0 -4
  252. package/src/shared/embedding/classes/null-embedding-provider.class.ts +0 -29
  253. package/src/shared/embedding/constants/near-duplicate-thresholds.constant.ts +0 -17
  254. package/src/shared/embedding/functions/build-vector-index.function.ts +0 -79
  255. package/src/shared/embedding/functions/cosine-similarity.function.ts +0 -31
  256. package/src/shared/embedding/functions/detect-near-duplicates.function.ts +0 -69
  257. package/src/shared/embedding/functions/jaccard-coefficient.function.ts +0 -26
  258. package/src/shared/embedding/functions/read-vector-index-meta.function.ts +0 -44
  259. package/src/shared/embedding/functions/rrf-fuse.function.ts +0 -33
  260. package/src/shared/embedding/functions/search-vectors.function.ts +0 -59
  261. package/src/shared/embedding/index.ts +0 -20
  262. package/src/shared/embedding/typings/embedding-config.interface.ts +0 -23
  263. package/src/shared/embedding/typings/embedding-provider.interface.ts +0 -25
  264. package/src/shared/embedding/typings/near-duplicate-candidate.model.ts +0 -25
  265. package/src/shared/embedding/typings/near-duplicate-result.model.ts +0 -26
  266. package/src/shared/embedding/typings/vector-index-entry.model.ts +0 -13
  267. package/src/shared/embedding/typings/vector-index-meta.model.ts +0 -14
  268. package/src/shared/embedding/typings/vector-search-result.model.ts +0 -8
  269. package/src/shared/hash/functions/compute-sha256.ts +0 -17
  270. package/src/shared/hash/index.ts +0 -1
  271. package/src/shared/mcp/classes/mcp-server.class.ts +0 -480
  272. package/src/shared/mcp/constants/mcp-error-codes.constant.ts +0 -30
  273. package/src/shared/mcp/constants/tool-agent-create.constant.ts +0 -39
  274. package/src/shared/mcp/constants/tool-agent-delete.constant.ts +0 -26
  275. package/src/shared/mcp/constants/tool-agent-get.constant.ts +0 -24
  276. package/src/shared/mcp/constants/tool-agent-list.constant.ts +0 -18
  277. package/src/shared/mcp/constants/tool-auto-capture-review.constant.ts +0 -32
  278. package/src/shared/mcp/constants/tool-check.constant.ts +0 -21
  279. package/src/shared/mcp/constants/tool-content.constant.ts +0 -29
  280. package/src/shared/mcp/constants/tool-export.constant.ts +0 -27
  281. package/src/shared/mcp/constants/tool-gc.constant.ts +0 -21
  282. package/src/shared/mcp/constants/tool-learn.constant.ts +0 -58
  283. package/src/shared/mcp/constants/tool-rebuild.constant.ts +0 -21
  284. package/src/shared/mcp/constants/tool-recall.constant.ts +0 -36
  285. package/src/shared/mcp/constants/tool-retrieve.constant.ts +0 -31
  286. package/src/shared/mcp/constants/tool-search.constant.ts +0 -51
  287. package/src/shared/mcp/constants/tool-skill-delete.constant.ts +0 -24
  288. package/src/shared/mcp/constants/tool-skill-get.constant.ts +0 -27
  289. package/src/shared/mcp/constants/tool-skill-learn.constant.ts +0 -37
  290. package/src/shared/mcp/constants/tool-skill-list.constant.ts +0 -18
  291. package/src/shared/mcp/constants/tool-status.constant.ts +0 -20
  292. package/src/shared/mcp/constants/tool-unlearn.constant.ts +0 -25
  293. package/src/shared/mcp/functions/as-boolean-or-undefined.function.ts +0 -11
  294. package/src/shared/mcp/functions/as-string-array-or-undefined.function.ts +0 -17
  295. package/src/shared/mcp/functions/as-string-array.function.ts +0 -15
  296. package/src/shared/mcp/functions/as-string.function.ts +0 -10
  297. package/src/shared/mcp/functions/build-skills-text.function.ts +0 -43
  298. package/src/shared/mcp/functions/create-mcp-server.function.ts +0 -14
  299. package/src/shared/mcp/functions/create-prompt-definitions.function.ts +0 -102
  300. package/src/shared/mcp/functions/create-resource-templates.function.ts +0 -23
  301. package/src/shared/mcp/functions/create-tool-definitions.function.ts +0 -530
  302. package/src/shared/mcp/functions/extract-skill-arguments.function.ts +0 -27
  303. package/src/shared/mcp/functions/handle-agent-create.function.ts +0 -116
  304. package/src/shared/mcp/functions/handle-agent-delete.function.ts +0 -50
  305. package/src/shared/mcp/functions/handle-agent-get.function.ts +0 -160
  306. package/src/shared/mcp/functions/handle-agent-list.function.ts +0 -50
  307. package/src/shared/mcp/functions/handle-agent-prompt.function.ts +0 -68
  308. package/src/shared/mcp/functions/handle-completion.function.ts +0 -114
  309. package/src/shared/mcp/functions/handle-mcp-request.function.ts +0 -202
  310. package/src/shared/mcp/functions/handle-prompt-get.function.ts +0 -220
  311. package/src/shared/mcp/functions/handle-recall.function.ts +0 -66
  312. package/src/shared/mcp/functions/handle-resource-read.function.ts +0 -56
  313. package/src/shared/mcp/functions/handle-roots-list.function.ts +0 -29
  314. package/src/shared/mcp/functions/handle-skill-prompt.function.ts +0 -44
  315. package/src/shared/mcp/functions/handle-tool-auto-capture-review.function.ts +0 -24
  316. package/src/shared/mcp/functions/handle-tool-call.function.ts +0 -560
  317. package/src/shared/mcp/functions/handle-tool-check.function.ts +0 -21
  318. package/src/shared/mcp/functions/handle-tool-content.function.ts +0 -23
  319. package/src/shared/mcp/functions/handle-tool-export.function.ts +0 -25
  320. package/src/shared/mcp/functions/handle-tool-gc.function.ts +0 -21
  321. package/src/shared/mcp/functions/handle-tool-learn.function.ts +0 -69
  322. package/src/shared/mcp/functions/handle-tool-rebuild.function.ts +0 -21
  323. package/src/shared/mcp/functions/handle-tool-retrieve.function.ts +0 -40
  324. package/src/shared/mcp/functions/handle-tool-search.function.ts +0 -47
  325. package/src/shared/mcp/functions/handle-tool-skill-delete.function.ts +0 -34
  326. package/src/shared/mcp/functions/handle-tool-skill-get.function.ts +0 -59
  327. package/src/shared/mcp/functions/handle-tool-skill-learn.function.ts +0 -61
  328. package/src/shared/mcp/functions/handle-tool-skill-list.function.ts +0 -39
  329. package/src/shared/mcp/functions/handle-tool-status.function.ts +0 -21
  330. package/src/shared/mcp/functions/handle-tool-unlearn.function.ts +0 -24
  331. package/src/shared/mcp/functions/parse-agent-meta.function.ts +0 -27
  332. package/src/shared/mcp/functions/parse-skill-arguments.function.ts +0 -36
  333. package/src/shared/mcp/functions/parse-skill-content.function.ts +0 -38
  334. package/src/shared/mcp/functions/read-agent-meta.function.ts +0 -41
  335. package/src/shared/mcp/functions/resolve-skill-refs.function.ts +0 -50
  336. package/src/shared/mcp/functions/run-startup-health-check.function.ts +0 -34
  337. package/src/shared/mcp/functions/serialize-skill-content.function.ts +0 -12
  338. package/src/shared/mcp/functions/should-emit-log.function.ts +0 -38
  339. package/src/shared/mcp/index.ts +0 -28
  340. package/src/shared/mcp/typings/agent-types.interface.ts +0 -39
  341. package/src/shared/mcp/typings/log-types.interface.ts +0 -26
  342. package/src/shared/mcp/typings/mcp-capabilities.interface.ts +0 -16
  343. package/src/shared/mcp/typings/mcp-client.interface.ts +0 -317
  344. package/src/shared/mcp/typings/mcp-completion.interface.ts +0 -45
  345. package/src/shared/mcp/typings/mcp-content-result.model.ts +0 -9
  346. package/src/shared/mcp/typings/mcp-export-result.model.ts +0 -11
  347. package/src/shared/mcp/typings/mcp-gc-result.model.ts +0 -15
  348. package/src/shared/mcp/typings/mcp-integrity-check-result.model.ts +0 -17
  349. package/src/shared/mcp/typings/mcp-integrity-error.model.ts +0 -15
  350. package/src/shared/mcp/typings/mcp-notification.interface.ts +0 -9
  351. package/src/shared/mcp/typings/mcp-rebuild-result.model.ts +0 -9
  352. package/src/shared/mcp/typings/mcp-request.interface.ts +0 -11
  353. package/src/shared/mcp/typings/mcp-resource-result.interface.ts +0 -12
  354. package/src/shared/mcp/typings/mcp-resource-template.interface.ts +0 -11
  355. package/src/shared/mcp/typings/mcp-response.interface.ts +0 -18
  356. package/src/shared/mcp/typings/mcp-server-info.interface.ts +0 -7
  357. package/src/shared/mcp/typings/mcp-server-state.interface.ts +0 -17
  358. package/src/shared/mcp/typings/mcp-tool-annotations.interface.ts +0 -32
  359. package/src/shared/mcp/typings/mcp-tool-definition.interface.ts +0 -16
  360. package/src/shared/mcp/typings/mcp-tool-result.interface.ts +0 -19
  361. package/src/shared/mcp/typings/mcp-types.interface.ts +0 -158
  362. package/src/shared/mcp/typings/mcp-worker-client.interface.ts +0 -243
  363. package/src/shared/mcp/typings/prompt-types.interface.ts +0 -39
  364. package/src/shared/mcp/typings/remove-section-result.model.ts +0 -10
  365. package/src/shared/mcp/typings/sampling-types.interface.ts +0 -48
  366. package/src/shared/mcp/typings/skill-types.interface.ts +0 -29
  367. package/src/shared/mcp/typings/tool-call-result.model.ts +0 -18
  368. package/src/shared/mod.ts +0 -1
  369. package/src/shared/platform/functions/get-ipc-path.function.ts +0 -19
  370. package/src/shared/platform/functions/get-tmpdir.function.ts +0 -8
  371. package/src/shared/platform/functions/is-process-alive.function.ts +0 -17
  372. package/src/shared/platform/index.ts +0 -3
  373. package/src/shared/runtime/functions/detect-runtime.ts +0 -14
  374. package/src/shared/runtime/functions/get-args.ts +0 -16
  375. package/src/shared/runtime/index.ts +0 -3
  376. package/src/shared/runtime/typings/runtime.ts +0 -2
  377. package/src/shared/sync/functions/build-import-report.function.ts +0 -40
  378. package/src/shared/sync/functions/parse-export-entry.function.ts +0 -45
  379. package/src/shared/sync/functions/resolve-conflict.function.ts +0 -31
  380. package/src/shared/sync/functions/serialize-export-entry.function.ts +0 -18
  381. package/src/shared/sync/index.ts +0 -9
  382. package/src/shared/sync/typings/conflict-resolution.type.ts +0 -8
  383. package/src/shared/sync/typings/export-entry.interface.ts +0 -13
  384. package/src/shared/sync/typings/export-options.interface.ts +0 -9
  385. package/src/shared/sync/typings/import-options.interface.ts +0 -7
  386. package/src/shared/sync/typings/import-report.interface.ts +0 -15
  387. package/src/shared/version/constants/version.constant.ts +0 -2
  388. package/src/shared/version/index.ts +0 -1
  389. package/src/shared/wasm-codec/functions/decode-add-section-result.function.ts +0 -112
  390. package/src/shared/wasm-codec/functions/decode-compose-output.function.ts +0 -16
  391. package/src/shared/wasm-codec/functions/decode-document-manifest-list.function.ts +0 -70
  392. package/src/shared/wasm-codec/functions/decode-document-manifest.function.ts +0 -87
  393. package/src/shared/wasm-codec/functions/decode-f32.function.ts +0 -16
  394. package/src/shared/wasm-codec/functions/decode-key-value-text.function.ts +0 -15
  395. package/src/shared/wasm-codec/functions/decode-one-recall-result.function.ts +0 -86
  396. package/src/shared/wasm-codec/functions/decode-option-string.function.ts +0 -24
  397. package/src/shared/wasm-codec/functions/decode-recall-document.function.ts +0 -59
  398. package/src/shared/wasm-codec/functions/decode-recall-reference.function.ts +0 -52
  399. package/src/shared/wasm-codec/functions/decode-recall-result.function.ts +0 -267
  400. package/src/shared/wasm-codec/functions/decode-recall-sibling.function.ts +0 -43
  401. package/src/shared/wasm-codec/functions/decode-remove-flag.function.ts +0 -3
  402. package/src/shared/wasm-codec/functions/decode-scored-results.function.ts +0 -194
  403. package/src/shared/wasm-codec/functions/decode-section-match.function.ts +0 -80
  404. package/src/shared/wasm-codec/functions/decode-section-record-list.function.ts +0 -20
  405. package/src/shared/wasm-codec/functions/decode-section-record-trailing.function.ts +0 -75
  406. package/src/shared/wasm-codec/functions/decode-section-record.function.ts +0 -85
  407. package/src/shared/wasm-codec/functions/decode-section-records.function.ts +0 -249
  408. package/src/shared/wasm-codec/functions/decode-section-type.function.ts +0 -30
  409. package/src/shared/wasm-codec/functions/decode-string.function.ts +0 -22
  410. package/src/shared/wasm-codec/functions/decode-u32.function.ts +0 -16
  411. package/src/shared/wasm-codec/functions/decode-u64.function.ts +0 -16
  412. package/src/shared/wasm-codec/functions/decode-wasm-list.function.ts +0 -31
  413. package/src/shared/wasm-codec/functions/encode-add-section-params.function.ts +0 -102
  414. package/src/shared/wasm-codec/functions/encode-group-params.function.ts +0 -28
  415. package/src/shared/wasm-codec/functions/encode-identifier-list.function.ts +0 -17
  416. package/src/shared/wasm-codec/functions/encode-kbid-list.function.ts +0 -17
  417. package/src/shared/wasm-codec/functions/encode-option-string.function.ts +0 -14
  418. package/src/shared/wasm-codec/functions/encode-recall-params.function.ts +0 -68
  419. package/src/shared/wasm-codec/functions/encode-search-params.function.ts +0 -12
  420. package/src/shared/wasm-codec/functions/encode-section-type.function.ts +0 -18
  421. package/src/shared/wasm-codec/functions/encode-string.function.ts +0 -9
  422. package/src/shared/wasm-codec/functions/encode-type-filter-param.function.ts +0 -13
  423. package/src/shared/wasm-codec/functions/encode-u32.function.ts +0 -5
  424. package/src/shared/wasm-codec/functions/encode-update-section-params.function.ts +0 -16
  425. package/src/shared/wasm-codec/index.ts +0 -49
  426. package/src/shared/wasm-codec/typings/add-section-input.model.ts +0 -45
  427. package/src/shared/wasm-codec/typings/add-section-result.model.ts +0 -28
  428. package/src/shared/wasm-codec/typings/document-manifest.model.ts +0 -20
  429. package/src/shared/wasm-codec/typings/document-section.model.ts +0 -12
  430. package/src/shared/wasm-codec/typings/item-decoder.type.ts +0 -10
  431. package/src/shared/wasm-codec/typings/near-duplicate.model.ts +0 -16
  432. package/src/shared/wasm-codec/typings/paged-search-result.model.ts +0 -22
  433. package/src/shared/wasm-codec/typings/section-match.model.ts +0 -31
  434. package/src/shared/wasm-codec/typings/section-record-trailing.model.ts +0 -38
  435. package/src/shared/wasm-codec/typings/section-record.model.ts +0 -66
  436. package/src/shared/wasm-codec/typings/section-type-result.model.ts +0 -12
  437. package/src/shared/worker-client/classes/worker-client.class.ts +0 -466
  438. package/src/shared/worker-client/functions/compute-context-id.function.ts +0 -18
  439. package/src/shared/worker-client/functions/create-worker-client.function.ts +0 -70
  440. package/src/shared/worker-client/functions/discover-daemon.function.ts +0 -47
  441. package/src/shared/worker-client/functions/handle-ipc-data.function.ts +0 -49
  442. package/src/shared/worker-client/functions/resolve-db-path.function.ts +0 -21
  443. package/src/shared/worker-client/functions/send-ipc-request.function.ts +0 -39
  444. package/src/shared/worker-client/functions/spawn-daemon.function.ts +0 -35
  445. package/src/shared/worker-client/functions/wait-for-daemon.function.ts +0 -34
  446. package/src/shared/worker-client/index.ts +0 -44
  447. package/src/shared/worker-client/typings/add-section-result.model.ts +0 -39
  448. package/src/shared/worker-client/typings/content-result.model.ts +0 -12
  449. package/src/shared/worker-client/typings/daemon-info.model.ts +0 -7
  450. package/src/shared/worker-client/typings/export-result.model.ts +0 -14
  451. package/src/shared/worker-client/typings/gc-result.model.ts +0 -18
  452. package/src/shared/worker-client/typings/integrity-check-result.model.ts +0 -43
  453. package/src/shared/worker-client/typings/json-rpc-response.interface.ts +0 -17
  454. package/src/shared/worker-client/typings/migrate-result.model.ts +0 -11
  455. package/src/shared/worker-client/typings/pending-call.interface.ts +0 -7
  456. package/src/shared/worker-client/typings/rebuild-result.model.ts +0 -12
  457. package/src/shared/worker-client/typings/recall-document.model.ts +0 -16
  458. package/src/shared/worker-client/typings/recall-params.model.ts +0 -15
  459. package/src/shared/worker-client/typings/recall-reference.model.ts +0 -32
  460. package/src/shared/worker-client/typings/recall-result.model.ts +0 -98
  461. package/src/shared/worker-client/typings/recall-sibling.model.ts +0 -11
  462. package/src/shared/worker-client/typings/recall-single-result.model.ts +0 -41
  463. package/src/shared/worker-client/typings/remove-section-result.model.ts +0 -7
  464. package/src/shared/worker-client/typings/search-params.model.ts +0 -14
  465. package/src/shared/worker-client/typings/search-result.model.ts +0 -43
  466. package/src/shared/worker-client/typings/section.model.ts +0 -43
  467. package/src/shared/worker-client/typings/status-result.model.ts +0 -14
  468. package/src/shared/worker-client/typings/version-status.model.ts +0 -28
  469. package/src/shared/worker-client/typings/worker-client-error.interface.ts +0 -8
  470. package/src/shared/worker-client/typings/worker-client-options.interface.ts +0 -30
  471. package/src/shared/worker-daemon/classes/ipc-error.class.ts +0 -22
  472. package/src/shared/worker-daemon/classes/worker-daemon.class.ts +0 -1291
  473. package/src/shared/worker-daemon/constants/daemon-defaults.constant.ts +0 -29
  474. package/src/shared/worker-daemon/constants/wasm-method-map.constant.ts +0 -69
  475. package/src/shared/worker-daemon/functions/build-ipc-error-response.function.ts +0 -16
  476. package/src/shared/worker-daemon/functions/check-catalog-version.function.ts +0 -54
  477. package/src/shared/worker-daemon/functions/check-preconditions.function.ts +0 -28
  478. package/src/shared/worker-daemon/functions/create-host-imports.function.ts +0 -328
  479. package/src/shared/worker-daemon/functions/create-ipc-server.function.ts +0 -87
  480. package/src/shared/worker-daemon/functions/detect-stale-pid.function.ts +0 -33
  481. package/src/shared/worker-daemon/functions/dispatch-request.function.ts +0 -190
  482. package/src/shared/worker-daemon/functions/handle-check-version.function.ts +0 -74
  483. package/src/shared/worker-daemon/functions/handle-config-method.function.ts +0 -27
  484. package/src/shared/worker-daemon/functions/handle-read-ops.function.ts +0 -236
  485. package/src/shared/worker-daemon/functions/handle-write-ops.function.ts +0 -257
  486. package/src/shared/worker-daemon/functions/load-wasm-modules.function.ts +0 -95
  487. package/src/shared/worker-daemon/functions/parse-auto-capture-section.function.ts +0 -51
  488. package/src/shared/worker-daemon/functions/parse-catalog-version.function.ts +0 -20
  489. package/src/shared/worker-daemon/functions/parse-embedding-section.function.ts +0 -38
  490. package/src/shared/worker-daemon/functions/parse-worker-toml.function.ts +0 -104
  491. package/src/shared/worker-daemon/functions/read-config.function.ts +0 -83
  492. package/src/shared/worker-daemon/functions/run-startup-integrity-check.function.ts +0 -55
  493. package/src/shared/worker-daemon/functions/run-worker.function.ts +0 -57
  494. package/src/shared/worker-daemon/functions/scan-near-duplicates.function.ts +0 -92
  495. package/src/shared/worker-daemon/functions/start-daemon.function.ts +0 -74
  496. package/src/shared/worker-daemon/functions/wasm-bridge.function.ts +0 -144
  497. package/src/shared/worker-daemon/functions/wasm-memory-helpers.function.ts +0 -41
  498. package/src/shared/worker-daemon/functions/write-lock.function.ts +0 -49
  499. package/src/shared/worker-daemon/index.ts +0 -16
  500. package/src/shared/worker-daemon/typings/allocator-ref.interface.ts +0 -16
  501. package/src/shared/worker-daemon/typings/daemon-config.interface.ts +0 -20
  502. package/src/shared/worker-daemon/typings/fs-adapter.interface.ts +0 -22
  503. package/src/shared/worker-daemon/typings/handler-context.interface.ts +0 -19
  504. package/src/shared/worker-daemon/typings/ipc-handler.interface.ts +0 -39
  505. package/src/shared/worker-daemon/typings/memory-ref.interface.ts +0 -13
  506. package/src/shared/worker-daemon/typings/wasm-fn.type.ts +0 -2
  507. package/src/shared/worker-daemon/typings/wasm-modules.interface.ts +0 -7
  508. package/src/shared/worker-daemon/typings/write-lock.interface.ts +0 -13
  509. package/src/wasm/fs-database/kbdb_fs_database.d.ts +0 -259
  510. package/src/wasm/fs-database/kbdb_fs_database.js +0 -515
  511. package/src/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
  512. package/src/wasm/fs-database/kbdb_fs_database_bg.wasm.d.ts +0 -35
  513. package/src/wasm/fs-database/package.json +0 -13
  514. package/src/wasm/kb-worker/kbdb_worker.d.ts +0 -650
  515. package/src/wasm/kb-worker/kbdb_worker.js +0 -1181
  516. package/src/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
  517. package/src/wasm/kb-worker/kbdb_worker_bg.wasm.d.ts +0 -77
  518. package/src/wasm/kb-worker/package.json +0 -13
  519. package/src/wasm/query-parser/kbdb_query_parser.d.ts +0 -195
  520. package/src/wasm/query-parser/kbdb_query_parser.js +0 -403
  521. package/src/wasm/query-parser/kbdb_query_parser_bg.wasm.d.ts +0 -25
  522. package/src/wasm/query-parser/package.json +0 -13
  523. package/src/worker.ts +0 -42
package/dist/worker.mjs CHANGED
@@ -1,29 +1,30 @@
1
1
  import {
2
+ DB_FORMAT_VERSION,
3
+ DEFAULT_INDEX_LIMIT,
4
+ DEFAULT_ITEM_LIMIT,
5
+ DEFAULT_ITEM_TTL_MS,
6
+ DEFAULT_TIMEOUT_MS,
7
+ WORKER_TOML_FILENAME,
2
8
  computeSha256,
9
+ configureLog,
3
10
  getArgs,
4
11
  getIpcPath,
5
12
  isRemoteUrl,
6
13
  joinPath,
14
+ log,
15
+ parseLogLevel,
16
+ parseWorkerToml,
7
17
  resolveBaseDir,
18
+ resolveLogLevel,
8
19
  resolveWasmDir
9
- } from "./chunk-JG2UCKLI.mjs";
20
+ } from "./chunk-BJXEVALU.mjs";
10
21
 
11
22
  // src/worker.ts
12
- import { existsSync as existsSync3 } from "node:fs";
23
+ import { existsSync as existsSync5 } from "node:fs";
13
24
 
14
25
  // src/shared/worker-daemon/functions/read-config.function.ts
15
26
  import { readFileSync } from "node:fs";
16
27
  import { join } from "node:path";
17
-
18
- // src/shared/worker-daemon/constants/daemon-defaults.constant.ts
19
- var DEFAULT_ITEM_LIMIT = 1e3;
20
- var DEFAULT_INDEX_LIMIT = 100;
21
- var DEFAULT_TIMEOUT_MS = 3e5;
22
- var DEFAULT_ITEM_TTL_MS = 6e4;
23
- var WORKER_TOML_FILENAME = "worker.toml";
24
- var DB_FORMAT_VERSION = 1;
25
-
26
- // src/shared/worker-daemon/functions/read-config.function.ts
27
28
  function readConfig(contextPath) {
28
29
  const configPath = join(contextPath, WORKER_TOML_FILENAME);
29
30
  try {
@@ -39,59 +40,23 @@ function readConfig(contextPath) {
39
40
  };
40
41
  }
41
42
  }
42
- function parseWorkerToml(text, contextPath) {
43
- const config = {
44
- contextPath,
45
- itemLimit: DEFAULT_ITEM_LIMIT,
46
- indexLimit: DEFAULT_INDEX_LIMIT,
47
- timeoutMs: DEFAULT_TIMEOUT_MS,
48
- itemTtlMs: DEFAULT_ITEM_TTL_MS
49
- };
50
- const result = { ...config };
51
- for (const line of text.split("\n")) {
52
- const trimmed = line.trim();
53
- if (trimmed.startsWith("#") || !trimmed.includes("=")) {
54
- continue;
55
- }
56
- const eqIdx = trimmed.indexOf("=");
57
- const key = trimmed.slice(0, eqIdx).trim();
58
- const value = trimmed.slice(eqIdx + 1).trim();
59
- switch (key) {
60
- case "item_limit":
61
- result.itemLimit = parseInt(value, 10) || DEFAULT_ITEM_LIMIT;
62
- break;
63
- case "index_limit":
64
- result.indexLimit = parseInt(value, 10) || DEFAULT_INDEX_LIMIT;
65
- break;
66
- case "timeout_ms":
67
- result.timeoutMs = parseInt(value, 10) || DEFAULT_TIMEOUT_MS;
68
- break;
69
- case "item_ttl_ms":
70
- result.itemTtlMs = parseInt(value, 10) || DEFAULT_ITEM_TTL_MS;
71
- break;
72
- default:
73
- break;
74
- }
75
- }
76
- return result;
77
- }
78
43
 
79
44
  // src/shared/worker-daemon/functions/start-daemon.function.ts
80
- import { writeFileSync as writeFileSync3 } from "node:fs";
81
- import { join as join4 } from "node:path";
45
+ import { writeFileSync as writeFileSync4 } from "node:fs";
46
+ import { join as join7 } from "node:path";
82
47
  import { tmpdir as tmpdir2 } from "node:os";
83
48
 
84
49
  // src/shared/worker-daemon/classes/worker-daemon.class.ts
85
50
  import {
86
- existsSync as existsSync2,
87
- readFileSync as readFileSync4,
88
- readdirSync as readdirSync2,
51
+ existsSync as existsSync4,
52
+ readFileSync as readFileSync6,
53
+ readdirSync as readdirSync3,
89
54
  accessSync,
90
- writeFileSync as writeFileSync2,
55
+ writeFileSync as writeFileSync3,
91
56
  unlinkSync as unlinkSync2,
92
57
  constants
93
58
  } from "node:fs";
94
- import { join as join3 } from "node:path";
59
+ import { join as join6 } from "node:path";
95
60
  import { tmpdir } from "node:os";
96
61
 
97
62
  // src/shared/worker-daemon/functions/load-wasm-modules.function.ts
@@ -130,6 +95,7 @@ var nullAllocator = { alloc: null };
130
95
  function createHostImports(contextPath, memoryRef = nullMemory, fs = nodeFsAdapter, allocator = nullAllocator) {
131
96
  function getBuffer() {
132
97
  if (!memoryRef.memory) {
98
+ log("WASM memory not initialized", 3 /* ERROR */);
133
99
  throw new Error("WASM memory not initialized");
134
100
  }
135
101
  return memoryRef.memory.buffer;
@@ -298,6 +264,7 @@ async function loadWasmModules(config, wasmDir2) {
298
264
  void 0,
299
265
  allocator
300
266
  );
267
+ log("loading WASM module: kb-worker", 0 /* DEBUG */);
301
268
  const wkPath = joinPath(wasmDir2, "kb-worker", "kbdb_worker_bg.wasm");
302
269
  const wkBytes = await readWasmFile(wkPath, "kb-worker");
303
270
  let wkModule;
@@ -321,7 +288,20 @@ async function loadWasmModules(config, wasmDir2) {
321
288
  if (typeof fn_ !== "function") return 0;
322
289
  return fn_(size);
323
290
  };
324
- return { memory, kbWorker };
291
+ const embPath = joinPath(
292
+ wasmDir2,
293
+ "default-embedding",
294
+ "kbdb_default_embedding_bg.wasm"
295
+ );
296
+ let embedding;
297
+ try {
298
+ const embBytes = await readWasmFile(embPath, "default-embedding");
299
+ const embModule = await WebAssembly.compile(embBytes);
300
+ embedding = await WebAssembly.instantiate(embModule, {});
301
+ } catch {
302
+ }
303
+ log("all WASM modules loaded", 1 /* INFO */);
304
+ return { memory, kbWorker, embedding };
325
305
  }
326
306
  async function readWasmFile(path, label) {
327
307
  try {
@@ -347,17 +327,25 @@ function rethrow(stage, label, err, path) {
347
327
  const detail = err instanceof Error ? err.message : String(err);
348
328
  const suffix = path ? ` (path: ${path})` : "";
349
329
  const message = `failed to ${stage} ${label} WASM: ${detail}${suffix}`;
350
- console.error(`kbdb-worker: ${message}`);
330
+ log(`kbdb-worker: ${message}`, 3 /* ERROR */);
351
331
  throw new Error(message, { cause: err });
352
332
  }
353
333
 
354
334
  // src/shared/worker-daemon/functions/create-ipc-server.function.ts
355
335
  import { createServer } from "node:net";
336
+ var LISTEN_BACKLOG = 256;
337
+ var KEEPALIVE_MS = 3e4;
356
338
  function createIpcServer(socketPath, handler) {
357
339
  const server = createServer((socket) => {
340
+ socket.setKeepAlive(true, KEEPALIVE_MS);
341
+ log("ipc: connection accepted", 0 /* DEBUG */);
358
342
  let buffer = "";
359
343
  let processingQueue = Promise.resolve();
360
344
  socket.on("data", (chunk) => {
345
+ log(
346
+ "ipc: data received bytes=" + String(chunk.length),
347
+ 0 /* DEBUG */
348
+ );
361
349
  buffer += chunk.toString();
362
350
  const lines = buffer.split("\n");
363
351
  buffer = lines.pop() ?? "";
@@ -369,16 +357,28 @@ function createIpcServer(socketPath, handler) {
369
357
  }
370
358
  });
371
359
  socket.on("error", (err) => {
372
- console.error(
373
- `kbdb-worker: ipc connection error: ${err.message}`
360
+ log(
361
+ `kbdb-worker: ipc connection error: ${err.message}`,
362
+ 2 /* WARNING */
374
363
  );
375
364
  });
376
365
  });
377
- server.on("error", (err) => {
378
- console.error(`kbdb-worker: ipc server error: ${err.message}`);
366
+ return new Promise((resolve2, reject) => {
367
+ server.once("error", reject);
368
+ server.listen(
369
+ { path: socketPath, backlog: LISTEN_BACKLOG },
370
+ () => {
371
+ server.removeListener("error", reject);
372
+ server.on("error", (err) => {
373
+ log(
374
+ `kbdb-worker: ipc server error: ${err.message}`,
375
+ 3 /* ERROR */
376
+ );
377
+ });
378
+ resolve2(server);
379
+ }
380
+ );
379
381
  });
380
- server.listen(socketPath);
381
- return server;
382
382
  }
383
383
  function bigintReplacer(_key, value) {
384
384
  return typeof value === "bigint" ? Number(value) : value;
@@ -387,8 +387,13 @@ async function handleLine(line, handler, socket) {
387
387
  let response;
388
388
  try {
389
389
  const request = JSON.parse(line);
390
+ log(
391
+ "ipc: request parsed method=" + request.method + " id=" + String(request.id),
392
+ 0 /* DEBUG */
393
+ );
390
394
  response = await handler(request);
391
395
  } catch {
396
+ log("ipc: parse error on malformed request", 0 /* DEBUG */);
392
397
  response = {
393
398
  jsonrpc: "2.0",
394
399
  id: 0,
@@ -398,7 +403,541 @@ async function handleLine(line, handler, socket) {
398
403
  }
399
404
  };
400
405
  }
401
- socket.write(JSON.stringify(response, bigintReplacer) + "\n");
406
+ const encoded = JSON.stringify(response, bigintReplacer) + "\n";
407
+ log(
408
+ "ipc: response sent bytes=" + String(encoded.length),
409
+ 0 /* DEBUG */
410
+ );
411
+ socket.write(encoded);
412
+ }
413
+
414
+ // src/shared/embedding/classes/null-embedding-provider.class.ts
415
+ var NullEmbeddingProvider = class {
416
+ /**
417
+ * Returns an empty `Float32Array` for each input text.
418
+ *
419
+ * @param texts - input strings (contents are ignored)
420
+ */
421
+ embed(texts) {
422
+ return Promise.resolve(texts.map(() => new Float32Array(0)));
423
+ }
424
+ /** Always returns 0 -- no dimensions when disabled. */
425
+ dimensions() {
426
+ return 0;
427
+ }
428
+ /** Always returns `'none'`. */
429
+ modelName() {
430
+ return "none";
431
+ }
432
+ };
433
+
434
+ // src/shared/embedding/classes/onnx-embedding-provider.class.ts
435
+ var OnnxEmbeddingProvider = class {
436
+ /** Path to the ONNX model file. */
437
+ model;
438
+ /** Number of embedding dimensions the model produces. */
439
+ dims;
440
+ /**
441
+ * @param model - filesystem path to the ONNX model file
442
+ * @param dimensions - number of dimensions the model produces
443
+ */
444
+ constructor(model, dimensions) {
445
+ this.model = model;
446
+ this.dims = dimensions;
447
+ }
448
+ /**
449
+ * Not yet implemented.
450
+ *
451
+ * @throws {Error} always -- ONNX Runtime is an optional peer
452
+ * dependency not yet wired
453
+ */
454
+ embed(_texts) {
455
+ log("embed called on OnnxEmbeddingProvider", 0 /* DEBUG */);
456
+ return Promise.reject(
457
+ new Error(
458
+ "ONNX Runtime not available; install onnxruntime-node"
459
+ )
460
+ );
461
+ }
462
+ /** Returns the configured number of embedding dimensions. */
463
+ dimensions() {
464
+ return this.dims;
465
+ }
466
+ /** Returns the configured model file path. */
467
+ modelName() {
468
+ return this.model;
469
+ }
470
+ };
471
+
472
+ // src/shared/embedding/functions/parse-api-embedding-response.function.ts
473
+ function parseApiEmbeddingResponse(raw) {
474
+ if (!isEmbeddingApiResponse(raw)) {
475
+ log("Unexpected embedding API response shape", 3 /* ERROR */);
476
+ throw new Error("Unexpected embedding API response shape");
477
+ }
478
+ return raw.data.map((entry) => new Float32Array(entry.embedding));
479
+ }
480
+ function isEmbeddingApiResponse(value) {
481
+ if (typeof value !== "object" || value === null) {
482
+ return false;
483
+ }
484
+ const candidate = value;
485
+ if (!Array.isArray(candidate["data"])) {
486
+ return false;
487
+ }
488
+ return candidate["data"].every(isEmbeddingEntry);
489
+ }
490
+ function isEmbeddingEntry(value) {
491
+ if (typeof value !== "object" || value === null) {
492
+ return false;
493
+ }
494
+ const candidate = value;
495
+ return Array.isArray(candidate["embedding"]);
496
+ }
497
+
498
+ // src/shared/embedding/classes/api-embedding-provider.class.ts
499
+ var ApiEmbeddingProvider = class {
500
+ /** Remote endpoint URL for embedding requests. */
501
+ endpoint;
502
+ /** Number of dimensions in the returned vectors. */
503
+ dims;
504
+ /** Model name sent in the request body. */
505
+ model;
506
+ /**
507
+ * @param endpoint - URL to POST embedding requests to
508
+ * @param dimensions - number of vector dimensions expected
509
+ * @param model - optional model name; defaults to `'api'`
510
+ */
511
+ constructor(endpoint, dimensions, model) {
512
+ this.endpoint = endpoint;
513
+ this.dims = dimensions;
514
+ this.model = model ?? "api";
515
+ }
516
+ /**
517
+ * Posts texts to the endpoint and returns one `Float32Array`
518
+ * per input.
519
+ *
520
+ * @throws {Error} when the HTTP response status is not 2xx
521
+ */
522
+ async embed(texts) {
523
+ const response = await fetch(this.endpoint, {
524
+ method: "POST",
525
+ headers: { "Content-Type": "application/json" },
526
+ body: JSON.stringify({ input: texts, model: this.model })
527
+ });
528
+ if (!response.ok) {
529
+ const msg = `Embedding API error: ${String(response.status)}`;
530
+ log(msg, 3 /* ERROR */);
531
+ throw new Error(msg);
532
+ }
533
+ const json = await response.json();
534
+ return parseApiEmbeddingResponse(json);
535
+ }
536
+ /** Returns the configured number of embedding dimensions. */
537
+ dimensions() {
538
+ return this.dims;
539
+ }
540
+ /** Returns the configured model name, defaulting to `'api'`. */
541
+ modelName() {
542
+ return this.model;
543
+ }
544
+ };
545
+
546
+ // src/shared/embedding/constants/tfidf-defaults.constant.ts
547
+ var TFIDF_DIMENSIONS = 256;
548
+ var TFIDF_MODEL_NAME = "tfidf-v1";
549
+
550
+ // src/shared/embedding/classes/tfidf-embedding-provider.class.ts
551
+ var TfidfEmbeddingProvider = class {
552
+ _alloc;
553
+ _batch;
554
+ _retPtr;
555
+ _memory;
556
+ /** @param wasm - instantiated `kbdb-default-embedding` WASM module */
557
+ constructor(wasm) {
558
+ const ex = wasm.exports;
559
+ this._memory = ex["memory"];
560
+ this._alloc = ex["kbdb_alloc"];
561
+ this._batch = ex["embedding_tfidf_batch"];
562
+ this._retPtr = ex["get_return_ptr"];
563
+ }
564
+ /**
565
+ * Embeds a batch of texts using TF-IDF computation in WASM.
566
+ *
567
+ * @param texts - input strings to embed
568
+ * @returns one 256-dimension `Float32Array` per input text
569
+ */
570
+ embed(texts) {
571
+ log(
572
+ "embed called on TfidfEmbeddingProvider: " + texts.length.toString() + " texts",
573
+ 0 /* DEBUG */
574
+ );
575
+ const input = texts.join("\n");
576
+ const encoded = new TextEncoder().encode(input);
577
+ const ptr = this._alloc(encoded.byteLength);
578
+ const view = new Uint8Array(this._memory.buffer);
579
+ view.set(encoded, ptr);
580
+ this._batch(ptr, encoded.byteLength);
581
+ const outPtr = this._retPtr();
582
+ const dv = new DataView(this._memory.buffer);
583
+ const count = dv.getUint32(outPtr, true);
584
+ const results = [];
585
+ let offset = outPtr + 4;
586
+ for (let i = 0; i < count; i++) {
587
+ const vec = new Float32Array(TFIDF_DIMENSIONS);
588
+ for (let d = 0; d < TFIDF_DIMENSIONS; d++) {
589
+ vec[d] = dv.getFloat32(offset, true);
590
+ offset += 4;
591
+ }
592
+ results.push(vec);
593
+ }
594
+ return Promise.resolve(results);
595
+ }
596
+ /** Returns 256 -- the fixed dimension count for TF-IDF vectors. */
597
+ dimensions() {
598
+ return TFIDF_DIMENSIONS;
599
+ }
600
+ /** Returns `'tfidf-v1'`. */
601
+ modelName() {
602
+ return TFIDF_MODEL_NAME;
603
+ }
604
+ };
605
+
606
+ // src/shared/embedding/functions/create-embedding-provider.function.ts
607
+ function createEmbeddingProvider(config, wasmInstance) {
608
+ log("creating embedding provider", 0 /* DEBUG */);
609
+ if (!config) {
610
+ if (wasmInstance) {
611
+ log("using TfidfEmbeddingProvider", 0 /* DEBUG */);
612
+ return new TfidfEmbeddingProvider(wasmInstance);
613
+ }
614
+ log("using NullEmbeddingProvider", 0 /* DEBUG */);
615
+ return new NullEmbeddingProvider();
616
+ }
617
+ if (config.provider === "none") {
618
+ log("using NullEmbeddingProvider", 0 /* DEBUG */);
619
+ return new NullEmbeddingProvider();
620
+ }
621
+ if (config.provider === "onnx") {
622
+ log("using OnnxEmbeddingProvider", 0 /* DEBUG */);
623
+ return new OnnxEmbeddingProvider(
624
+ config.model ?? "",
625
+ config.dimensions ?? 0
626
+ );
627
+ }
628
+ log("using ApiEmbeddingProvider", 0 /* DEBUG */);
629
+ return new ApiEmbeddingProvider(
630
+ config.endpoint ?? "",
631
+ config.dimensions ?? 0,
632
+ config.model
633
+ );
634
+ }
635
+
636
+ // src/shared/worker-daemon/functions/handle-hybrid-search.function.ts
637
+ import { existsSync as existsSync2 } from "node:fs";
638
+ import { join as join3 } from "node:path";
639
+
640
+ // src/shared/embedding/functions/search-vectors.function.ts
641
+ import { readFileSync as readFileSync4 } from "node:fs";
642
+
643
+ // src/shared/embedding/functions/cosine-similarity.function.ts
644
+ function cosineSimilarity(a, b) {
645
+ let dot = 0;
646
+ let magA = 0;
647
+ let magB = 0;
648
+ for (let i = 0; i < a.length; i++) {
649
+ const ai = a[i] ?? 0;
650
+ const bi = b[i] ?? 0;
651
+ dot += ai * bi;
652
+ magA += ai * ai;
653
+ magB += bi * bi;
654
+ }
655
+ if (magA === 0 || magB === 0) {
656
+ return 0;
657
+ }
658
+ return dot / (Math.sqrt(magA) * Math.sqrt(magB));
659
+ }
660
+
661
+ // src/shared/embedding/functions/search-vectors.function.ts
662
+ var HEADER_SIZE = 32;
663
+ var KBID_WIDTH = 64;
664
+ function searchVectors(filePath, queryVector, topN) {
665
+ log("searching vectors", 0 /* DEBUG */);
666
+ const buf = readFileSync4(filePath);
667
+ if (buf.length < HEADER_SIZE) {
668
+ return [];
669
+ }
670
+ const dimensions = buf.readUInt32LE(8);
671
+ const count = buf.readUInt32LE(12);
672
+ const modelLen = buf.readUInt32LE(16);
673
+ const dataStart = HEADER_SIZE + modelLen;
674
+ const recordSize = KBID_WIDTH + dimensions * 4;
675
+ const results = [];
676
+ for (let i = 0; i < count; i++) {
677
+ const recOffset = dataStart + i * recordSize;
678
+ const kbid = buf.toString("utf-8", recOffset, recOffset + KBID_WIDTH).replace(/\0/g, "");
679
+ const vector = new Float32Array(dimensions);
680
+ for (let d = 0; d < dimensions; d++) {
681
+ vector[d] = buf.readFloatLE(recOffset + KBID_WIDTH + d * 4);
682
+ }
683
+ const score = cosineSimilarity(queryVector, vector);
684
+ results.push({ kbid, score });
685
+ }
686
+ results.sort((a, b) => b.score - a.score);
687
+ return results.slice(0, topN);
688
+ }
689
+
690
+ // src/shared/embedding/functions/rrf-fuse.function.ts
691
+ var DEFAULT_K = 60;
692
+ function rrfFuse(lexicalRanks, vectorRanks, k = DEFAULT_K) {
693
+ const scores = /* @__PURE__ */ new Map();
694
+ for (const [kbid, rank] of lexicalRanks) {
695
+ scores.set(kbid, (scores.get(kbid) ?? 0) + 1 / (k + rank));
696
+ }
697
+ for (const [kbid, rank] of vectorRanks) {
698
+ scores.set(kbid, (scores.get(kbid) ?? 0) + 1 / (k + rank));
699
+ }
700
+ return scores;
701
+ }
702
+
703
+ // src/shared/worker-daemon/classes/ipc-error.class.ts
704
+ var IpcError = class extends Error {
705
+ /** JSON-RPC error code. */
706
+ code;
707
+ /**
708
+ * @param code - JSON-RPC error code (e.g. `-32601` for
709
+ * method-not-found, `-32000` for application errors)
710
+ * @param message - human-readable error description
711
+ */
712
+ constructor(code, message) {
713
+ super(message);
714
+ this.code = code;
715
+ this.name = "IpcError";
716
+ }
717
+ };
718
+
719
+ // src/shared/worker-daemon/functions/handle-hybrid-search.function.ts
720
+ async function fuseSearchResults(lexical, algo, query, provider, targetDir) {
721
+ log("handling hybrid search", 0 /* DEBUG */);
722
+ if (algo === "lexical") {
723
+ return {
724
+ ...lexical,
725
+ search_mode: "lexical",
726
+ retrieval_method: "lexical"
727
+ };
728
+ }
729
+ assertProvider(provider);
730
+ const embeddings = await provider.embed([query]);
731
+ if (embeddings.length === 0 || embeddings[0].length === 0) {
732
+ return {
733
+ ...lexical,
734
+ search_mode: algo,
735
+ retrieval_method: "lexical"
736
+ };
737
+ }
738
+ const queryVec = embeddings[0];
739
+ const vectorPath = join3(targetDir, "vectors.idx");
740
+ const vectorResults = existsSync2(vectorPath) ? searchVectors(vectorPath, queryVec, lexical.limit) : [];
741
+ if (algo === "vector") {
742
+ return buildVectorOnly(vectorResults, lexical);
743
+ }
744
+ return buildHybrid(lexical, vectorResults);
745
+ }
746
+ function assertProvider(provider) {
747
+ if (!provider || provider.dimensions() === 0) {
748
+ const embeddingErrMsg = "embedding provider not configured; set [embedding] in worker.toml";
749
+ log(embeddingErrMsg, 3 /* ERROR */);
750
+ throw new IpcError(-32e3, embeddingErrMsg);
751
+ }
752
+ }
753
+ function buildVectorOnly(vectorResults, lexical) {
754
+ const lookup = new Map(
755
+ lexical.items.map((item) => [item.kbid, item])
756
+ );
757
+ const items = vectorResults.map((vr) => {
758
+ const existing = lookup.get(vr.kbid);
759
+ if (existing) {
760
+ return { ...existing, score: vr.score };
761
+ }
762
+ return emptyItem(vr.kbid, vr.score);
763
+ });
764
+ return {
765
+ items,
766
+ total: items.length,
767
+ offset: lexical.offset,
768
+ limit: lexical.limit,
769
+ has_more: false,
770
+ relaxed: lexical.relaxed,
771
+ search_mode: "vector",
772
+ retrieval_method: "vector"
773
+ };
774
+ }
775
+ function buildHybrid(lexical, vectorResults) {
776
+ const lexRanks = /* @__PURE__ */ new Map();
777
+ lexical.items.forEach((item, i) => {
778
+ lexRanks.set(item.kbid, i + 1);
779
+ });
780
+ const vecRanks = /* @__PURE__ */ new Map();
781
+ vectorResults.forEach((vr, i) => {
782
+ vecRanks.set(vr.kbid, i + 1);
783
+ });
784
+ const fused = rrfFuse(lexRanks, vecRanks);
785
+ const sorted = [...fused.entries()].sort((a, b) => b[1] - a[1]);
786
+ const lookup = new Map(
787
+ lexical.items.map((item) => [item.kbid, item])
788
+ );
789
+ const items = sorted.slice(0, lexical.limit).map(([kbid, score]) => {
790
+ const existing = lookup.get(kbid);
791
+ if (existing) {
792
+ return { ...existing, score };
793
+ }
794
+ return emptyItem(kbid, score);
795
+ });
796
+ return {
797
+ items,
798
+ total: sorted.length,
799
+ offset: lexical.offset,
800
+ limit: lexical.limit,
801
+ has_more: sorted.length > lexical.limit,
802
+ relaxed: lexical.relaxed,
803
+ search_mode: "hybrid",
804
+ retrieval_method: "rrf"
805
+ };
806
+ }
807
+ function emptyItem(kbid, score) {
808
+ return {
809
+ kbid,
810
+ heading: null,
811
+ type: "",
812
+ docids: [],
813
+ score,
814
+ confidence: 0,
815
+ snippet: "",
816
+ matched_terms: [],
817
+ matched_fields: [],
818
+ created_at: ""
819
+ };
820
+ }
821
+
822
+ // src/shared/embedding/functions/rebuild-vectors.function.ts
823
+ import { readdirSync as readdirSync2, readFileSync as readFileSync5, existsSync as existsSync3 } from "node:fs";
824
+ import { join as join5 } from "node:path";
825
+
826
+ // src/shared/embedding/functions/build-vector-index.function.ts
827
+ import { writeFileSync as writeFileSync2 } from "node:fs";
828
+ import { join as join4 } from "node:path";
829
+ var MAGIC = "KBVX";
830
+ var VERSION = 1;
831
+ var KBID_WIDTH2 = 64;
832
+ var HEADER_SIZE2 = 32;
833
+ function writeHeader(buf, dimensions, count, modelLen) {
834
+ buf.write(MAGIC, 0, "ascii");
835
+ buf.writeUInt32LE(VERSION, 4);
836
+ buf.writeUInt32LE(dimensions, 8);
837
+ buf.writeUInt32LE(count, 12);
838
+ buf.writeUInt32LE(modelLen, 16);
839
+ }
840
+ function writeRecord(buf, offset, entry, dimensions, encoder3) {
841
+ const kbidBytes = encoder3.encode(entry.kbid);
842
+ kbidBytes.forEach((b, i) => {
843
+ if (i < KBID_WIDTH2) buf.writeUInt8(b, offset + i);
844
+ });
845
+ for (let d = 0; d < dimensions; d++) {
846
+ buf.writeFloatLE(
847
+ entry.vector[d] ?? 0,
848
+ offset + KBID_WIDTH2 + d * 4
849
+ );
850
+ }
851
+ }
852
+ function buildVectorIndex(dirPath, modelName, dimensions, entries) {
853
+ log("building vector index", 0 /* DEBUG */);
854
+ const encoder3 = new TextEncoder();
855
+ const modelBytes = encoder3.encode(modelName);
856
+ const modelLen = modelBytes.length;
857
+ const recordSize = KBID_WIDTH2 + dimensions * 4;
858
+ const totalSize = HEADER_SIZE2 + modelLen + entries.length * recordSize;
859
+ const buf = Buffer.alloc(totalSize, 0);
860
+ writeHeader(buf, dimensions, entries.length, modelLen);
861
+ modelBytes.forEach((b, i) => buf.writeUInt8(b, HEADER_SIZE2 + i));
862
+ let recOffset = HEADER_SIZE2 + modelLen;
863
+ for (const entry of entries) {
864
+ writeRecord(buf, recOffset, entry, dimensions, encoder3);
865
+ recOffset += recordSize;
866
+ }
867
+ writeFileSync2(join4(dirPath, "vectors.idx"), buf);
868
+ return Promise.resolve();
869
+ }
870
+
871
+ // src/shared/embedding/functions/rebuild-vectors.function.ts
872
+ var SECTION_SEPARATOR = "\n---\n";
873
+ function extractBody(raw) {
874
+ const sep = raw.indexOf(SECTION_SEPARATOR);
875
+ return sep >= 0 ? raw.slice(sep + SECTION_SEPARATOR.length) : raw;
876
+ }
877
+ function collectSections(sectionsDir) {
878
+ let shards;
879
+ try {
880
+ shards = readdirSync2(sectionsDir);
881
+ } catch {
882
+ return [];
883
+ }
884
+ const result = [];
885
+ for (const shard of shards) {
886
+ let files;
887
+ try {
888
+ files = readdirSync2(join5(sectionsDir, shard));
889
+ } catch {
890
+ continue;
891
+ }
892
+ for (const file of files) {
893
+ if (!file.endsWith(".section")) continue;
894
+ const kbid = file.slice(0, -8);
895
+ try {
896
+ const raw = readFileSync5(
897
+ join5(sectionsDir, shard, file),
898
+ "utf-8"
899
+ );
900
+ const body = extractBody(raw);
901
+ if (body.length > 0) {
902
+ result.push({ kbid, body });
903
+ }
904
+ } catch {
905
+ continue;
906
+ }
907
+ }
908
+ }
909
+ return result;
910
+ }
911
+ async function rebuildVectors(targetDir, provider) {
912
+ log("rebuilding vectors", 0 /* DEBUG */);
913
+ if (provider.dimensions() === 0) {
914
+ return 0;
915
+ }
916
+ const sectionsDir = join5(targetDir, "sections");
917
+ if (!existsSync3(sectionsDir)) {
918
+ return 0;
919
+ }
920
+ const sections = collectSections(sectionsDir);
921
+ if (sections.length === 0) {
922
+ return 0;
923
+ }
924
+ const texts = sections.map((s) => s.body);
925
+ const vectors = await provider.embed(texts);
926
+ const entries = sections.map((s, i) => ({
927
+ kbid: s.kbid,
928
+ vector: vectors[i] ?? new Float32Array(provider.dimensions())
929
+ }));
930
+ await buildVectorIndex(
931
+ targetDir,
932
+ provider.modelName(),
933
+ provider.dimensions(),
934
+ entries
935
+ );
936
+ log(
937
+ "rebuilt " + sections.length.toString() + " vectors",
938
+ 1 /* INFO */
939
+ );
940
+ return sections.length;
402
941
  }
403
942
 
404
943
  // src/shared/wasm-codec/functions/encode-string.function.ts
@@ -1218,7 +1757,9 @@ var WASM_METHOD_MAP = {
1218
1757
  list_docs_by_type: "worker_list_docs_by_type",
1219
1758
  recall: "worker_recall",
1220
1759
  export: "worker_export",
1221
- exportDb: "worker_export"
1760
+ exportDb: "worker_export",
1761
+ importDb: "worker_import",
1762
+ import_db: "worker_import"
1222
1763
  };
1223
1764
  var CONFIG_PREFIX = "config_";
1224
1765
  var CONFIG_KEY_MAP = {
@@ -1227,7 +1768,7 @@ var CONFIG_KEY_MAP = {
1227
1768
  item_limit: "itemLimit",
1228
1769
  index_limit: "indexLimit"
1229
1770
  };
1230
- var IpcError = class extends Error {
1771
+ var IpcError2 = class extends Error {
1231
1772
  /** JSON-RPC error code. */
1232
1773
  code;
1233
1774
  constructor(code, message) {
@@ -1249,9 +1790,11 @@ var WorkerDaemon = class {
1249
1790
  }
1250
1791
  _connectionCount = 0;
1251
1792
  _wasmModules = null;
1793
+ _embeddingProvider = null;
1252
1794
  _idleAt = 0;
1253
1795
  _idleTimer = null;
1254
1796
  _server = null;
1797
+ _sockets = /* @__PURE__ */ new Set();
1255
1798
  _wasmDir;
1256
1799
  /** Queue of waiters for the single-writer lock. */
1257
1800
  _writeQueue = [];
@@ -1287,7 +1830,11 @@ var WorkerDaemon = class {
1287
1830
  * catches this, prints to stderr, and exits with code 1
1288
1831
  */
1289
1832
  checkPreconditions() {
1290
- if (!existsSync2(this.targetDir)) {
1833
+ if (!existsSync4(this.targetDir)) {
1834
+ log(
1835
+ `database directory not found: ${this.targetDir}`,
1836
+ 3 /* ERROR */
1837
+ );
1291
1838
  throw new Error(
1292
1839
  `database directory not found: ${this.targetDir}`
1293
1840
  );
@@ -1298,9 +1845,9 @@ var WorkerDaemon = class {
1298
1845
  constants.R_OK | constants.W_OK
1299
1846
  );
1300
1847
  } catch {
1301
- throw new Error(
1302
- `cannot access database directory: ${this.targetDir} -- permission denied`
1303
- );
1848
+ const msg = `cannot access database directory: ${this.targetDir} -- permission denied`;
1849
+ log(msg, 3 /* ERROR */);
1850
+ throw new Error(msg);
1304
1851
  }
1305
1852
  this.checkCatalogVersion();
1306
1853
  }
@@ -1316,34 +1863,69 @@ var WorkerDaemon = class {
1316
1863
  * be created
1317
1864
  */
1318
1865
  async start() {
1866
+ log(
1867
+ "start: loading wasm modules ctx=" + this.ctx,
1868
+ 0 /* DEBUG */
1869
+ );
1319
1870
  const wasmModules = await loadWasmModules(
1320
1871
  this.config,
1321
1872
  this._wasmDir
1322
1873
  );
1323
1874
  this._wasmModules = wasmModules;
1875
+ log("start: wasm modules loaded", 0 /* DEBUG */);
1876
+ this._embeddingProvider = createEmbeddingProvider(
1877
+ this.config.embedding,
1878
+ wasmModules.embedding
1879
+ );
1880
+ log(
1881
+ "start: embedding provider created embedding=" + (this.config.embedding?.provider ?? "none"),
1882
+ 0 /* DEBUG */
1883
+ );
1324
1884
  this.initWorkerContext();
1885
+ log("start: worker context initialized", 0 /* DEBUG */);
1325
1886
  this.runStartupIntegrityCheck();
1326
- const pidPath = join3(tmpdir(), `kbdb-${this.ctx}.pid`);
1327
- writeFileSync2(pidPath, process.pid.toString());
1887
+ log(
1888
+ "start: integrity check done ok=" + String(this._integrityOk),
1889
+ 0 /* DEBUG */
1890
+ );
1328
1891
  const ipcPath = getIpcPath(this.ctx);
1329
- if (existsSync2(ipcPath)) {
1892
+ if (existsSync4(ipcPath)) {
1893
+ log("start: removing stale socket " + ipcPath, 0 /* DEBUG */);
1330
1894
  try {
1331
1895
  unlinkSync2(ipcPath);
1332
1896
  } catch {
1333
1897
  }
1334
1898
  }
1335
1899
  const handler = (req) => this.handleRequest(req);
1336
- this._server = createIpcServer(ipcPath, handler);
1337
- this._server.on("connection", () => {
1900
+ this._server = await createIpcServer(ipcPath, handler);
1901
+ log("IPC server listening on " + ipcPath, 1 /* INFO */);
1902
+ this._server.on("connection", (socket) => {
1903
+ this._sockets.add(socket);
1338
1904
  this.incrementConnections();
1339
1905
  this.resetIdleTimer();
1906
+ log(
1907
+ "client connected (count: " + String(this._connectionCount) + ")",
1908
+ 0 /* DEBUG */
1909
+ );
1910
+ socket.on("close", () => {
1911
+ this._sockets.delete(socket);
1912
+ this.decrementConnections();
1913
+ log(
1914
+ "client disconnected (count: " + String(this._connectionCount) + ")",
1915
+ 0 /* DEBUG */
1916
+ );
1917
+ if (this._connectionCount === 0) {
1918
+ this.resetIdleTimer();
1919
+ }
1920
+ });
1340
1921
  });
1341
- this._server.on("close", () => {
1342
- this.decrementConnections();
1343
- if (this._connectionCount === 0) {
1344
- this.resetIdleTimer();
1345
- }
1346
- });
1922
+ const pidPath = join6(tmpdir(), `kbdb-${this.ctx}.pid`);
1923
+ writeFileSync3(pidPath, process.pid.toString());
1924
+ log(
1925
+ "start: pid file written pid=" + String(process.pid),
1926
+ 0 /* DEBUG */
1927
+ );
1928
+ log("start: daemon ready ctx=" + this.ctx, 0 /* DEBUG */);
1347
1929
  this.resetIdleTimer();
1348
1930
  }
1349
1931
  /**
@@ -1354,30 +1936,44 @@ var WorkerDaemon = class {
1354
1936
  * the process.
1355
1937
  */
1356
1938
  stop() {
1939
+ log(
1940
+ "stop: entry sockets=" + String(this._sockets.size),
1941
+ 0 /* DEBUG */
1942
+ );
1943
+ log("shutting down", 1 /* INFO */);
1357
1944
  if (this._idleTimer !== null) {
1358
1945
  clearTimeout(this._idleTimer);
1359
1946
  this._idleTimer = null;
1360
1947
  }
1948
+ for (const socket of this._sockets) {
1949
+ socket.destroy();
1950
+ }
1951
+ this._sockets.clear();
1361
1952
  if (this._server !== null) {
1362
1953
  this._server.close();
1363
1954
  this._server = null;
1955
+ log("stop: server closed", 0 /* DEBUG */);
1364
1956
  }
1365
1957
  this._wasmModules = null;
1366
- const pidPath = join3(tmpdir(), `kbdb-${this.ctx}.pid`);
1958
+ log("stop: wasm resources released", 0 /* DEBUG */);
1959
+ const pidPath = join6(tmpdir(), `kbdb-${this.ctx}.pid`);
1367
1960
  try {
1368
1961
  unlinkSync2(pidPath);
1962
+ log("stop: pid file removed", 0 /* DEBUG */);
1369
1963
  } catch {
1370
1964
  }
1371
1965
  const ipcPath = getIpcPath(this.ctx);
1372
1966
  try {
1373
1967
  unlinkSync2(ipcPath);
1968
+ log("stop: socket file removed", 0 /* DEBUG */);
1374
1969
  } catch {
1375
1970
  }
1376
- const crashPath = join3(tmpdir(), `kbdb-${this.ctx}.crash`);
1971
+ const crashPath = join6(tmpdir(), `kbdb-${this.ctx}.crash`);
1377
1972
  try {
1378
1973
  unlinkSync2(crashPath);
1379
1974
  } catch {
1380
1975
  }
1976
+ log("stop: daemon exiting", 0 /* DEBUG */);
1381
1977
  process.exit(0);
1382
1978
  }
1383
1979
  /**
@@ -1391,8 +1987,16 @@ var WorkerDaemon = class {
1391
1987
  * @returns the JSON-RPC response
1392
1988
  */
1393
1989
  async handleRequest(request) {
1990
+ log(
1991
+ "handle-request: method=" + request.method + " id=" + String(request.id),
1992
+ 0 /* DEBUG */
1993
+ );
1394
1994
  const params = request.params;
1395
1995
  if (params === void 0 || params.ctx !== this.ctx) {
1996
+ log(
1997
+ "handle-request: context mismatch id=" + String(request.id),
1998
+ 0 /* DEBUG */
1999
+ );
1396
2000
  return this.errorResponse(
1397
2001
  request.id,
1398
2002
  -32001,
@@ -1403,6 +2007,10 @@ var WorkerDaemon = class {
1403
2007
  try {
1404
2008
  const result = await this.dispatch(request.method, params);
1405
2009
  this._idleAt = Math.floor(Date.now() / 1e3);
2010
+ log(
2011
+ "handle-request: success method=" + request.method + " id=" + String(request.id),
2012
+ 0 /* DEBUG */
2013
+ );
1406
2014
  return {
1407
2015
  jsonrpc: "2.0",
1408
2016
  id: request.id,
@@ -1410,7 +2018,11 @@ var WorkerDaemon = class {
1410
2018
  };
1411
2019
  } catch (err) {
1412
2020
  this._idleAt = Math.floor(Date.now() / 1e3);
1413
- if (err instanceof IpcError) {
2021
+ if (err instanceof IpcError2) {
2022
+ log(
2023
+ "handle-request: ipc error method=" + request.method + " id=" + String(request.id) + " code=" + String(err.code),
2024
+ 0 /* DEBUG */
2025
+ );
1414
2026
  return this.errorResponse(
1415
2027
  request.id,
1416
2028
  err.code,
@@ -1418,6 +2030,10 @@ var WorkerDaemon = class {
1418
2030
  );
1419
2031
  }
1420
2032
  const message = err instanceof Error ? err.message : String(err);
2033
+ log(
2034
+ "handle-request: error method=" + request.method + " id=" + String(request.id),
2035
+ 0 /* DEBUG */
2036
+ );
1421
2037
  return this.errorResponse(request.id, -32e3, message);
1422
2038
  }
1423
2039
  }
@@ -1461,37 +2077,45 @@ var WorkerDaemon = class {
1461
2077
  clearTimeout(this._idleTimer);
1462
2078
  }
1463
2079
  if (this._connectionCount === 0) {
2080
+ log(
2081
+ "idle timer started (" + String(this.config.timeoutMs) + "ms)",
2082
+ 0 /* DEBUG */
2083
+ );
1464
2084
  this._idleTimer = setTimeout(() => {
2085
+ log(
2086
+ "idle timer fired: shutting down ctx=" + this.ctx,
2087
+ 0 /* DEBUG */
2088
+ );
1465
2089
  this.stop();
1466
2090
  }, this.config.timeoutMs);
1467
2091
  }
1468
2092
  }
1469
2093
  /** Reads catalog.toml and validates the version field. */
1470
2094
  checkCatalogVersion() {
1471
- const catalogPath = join3(this.targetDir, "catalog.toml");
2095
+ const catalogPath = join6(this.targetDir, "catalog.toml");
1472
2096
  let text;
1473
2097
  try {
1474
- text = readFileSync4(catalogPath, "utf-8");
2098
+ text = readFileSync6(catalogPath, "utf-8");
1475
2099
  } catch {
1476
- throw new Error(
1477
- `cannot read database directory: ${this.targetDir} -- permission denied`
1478
- );
2100
+ const msg = `cannot read database directory: ${this.targetDir} -- permission denied`;
2101
+ log(msg, 3 /* ERROR */);
2102
+ throw new Error(msg);
1479
2103
  }
1480
2104
  const version = parseCatalogVersion(text);
1481
2105
  if (version === null) {
1482
- throw new Error(
1483
- "database version 0 requires migration to version " + String(DB_FORMAT_VERSION) + " -- run `kbdb --migrate` before starting the daemon"
1484
- );
2106
+ const msg = "database version 0 requires migration to version " + String(DB_FORMAT_VERSION) + " -- run `kbdb --migrate` before starting the daemon";
2107
+ log(msg, 3 /* ERROR */);
2108
+ throw new Error(msg);
1485
2109
  }
1486
2110
  if (version > DB_FORMAT_VERSION) {
1487
- throw new Error(
1488
- "database version " + String(version) + " is newer than kbdb version " + String(DB_FORMAT_VERSION) + " -- upgrade kbdb to open this database"
1489
- );
2111
+ const msg = "database version " + String(version) + " is newer than kbdb version " + String(DB_FORMAT_VERSION) + " -- upgrade kbdb to open this database";
2112
+ log(msg, 3 /* ERROR */);
2113
+ throw new Error(msg);
1490
2114
  }
1491
2115
  if (version < DB_FORMAT_VERSION) {
1492
- throw new Error(
1493
- "database version " + String(version) + " requires migration to version " + String(DB_FORMAT_VERSION) + " -- run `kbdb --migrate` before starting the daemon"
1494
- );
2116
+ const msg = "database version " + String(version) + " requires migration to version " + String(DB_FORMAT_VERSION) + " -- run `kbdb --migrate` before starting the daemon";
2117
+ log(msg, 3 /* ERROR */);
2118
+ throw new Error(msg);
1495
2119
  }
1496
2120
  }
1497
2121
  /** Builds a JSON-RPC error response. */
@@ -1530,7 +2154,7 @@ var WorkerDaemon = class {
1530
2154
  if (wasmMethod !== void 0) {
1531
2155
  return this.dispatchWasm(method, wasmMethod, params);
1532
2156
  }
1533
- throw new IpcError(-32601, `Method not found: ${method}`);
2157
+ throw new IpcError2(-32601, `Method not found: ${method}`);
1534
2158
  }
1535
2159
  async dispatchWasm(method, wasmExport, params) {
1536
2160
  if (method === "search" || method === "query") {
@@ -1596,13 +2220,16 @@ var WorkerDaemon = class {
1596
2220
  return this.handleGc();
1597
2221
  }
1598
2222
  if (method === "rebuildIndexes" || method === "rebuild_indexes") {
1599
- return this.handleRebuild();
2223
+ return await this.handleRebuild();
1600
2224
  }
1601
2225
  if (method === "initDirectory" || method === "init_directory") {
1602
2226
  return this.handleInitDirectory(params);
1603
2227
  }
2228
+ if (method === "importDb" || method === "import_db") {
2229
+ return await this.handleImport(params);
2230
+ }
1604
2231
  if (method === "migrateDatabase") {
1605
- throw new IpcError(
2232
+ throw new IpcError2(
1606
2233
  -32601,
1607
2234
  "migrateDatabase is not yet supported"
1608
2235
  );
@@ -1613,12 +2240,25 @@ var WorkerDaemon = class {
1613
2240
  }
1614
2241
  }
1615
2242
  // -- Search/query (token-based async) --
1616
- handleSearch(params) {
2243
+ async handleSearch(params) {
1617
2244
  const query = params["query"] ?? "";
1618
2245
  const mode = params["mode"] ?? "and";
1619
2246
  const limit = Number(params["limit"] ?? 20);
1620
2247
  const offset = Number(params["offset"] ?? 0);
2248
+ const algo = params["algo"] ?? "lexical";
1621
2249
  const encoded = encodeSearchParams(query, mode, limit, offset);
2250
+ const start = Date.now();
2251
+ const lexical = this.runLexicalSearch(encoded);
2252
+ const fused = await fuseSearchResults(
2253
+ lexical,
2254
+ algo,
2255
+ query,
2256
+ this._embeddingProvider ?? void 0,
2257
+ this.targetDir
2258
+ );
2259
+ return { ...fused, elapsed_ms: Date.now() - start };
2260
+ }
2261
+ runLexicalSearch(encoded) {
1622
2262
  const searchFn = this.getExport("worker_search");
1623
2263
  const ptr = this.wasmAlloc(encoded.length);
1624
2264
  this.wasmWrite(ptr, encoded);
@@ -1627,20 +2267,17 @@ var WorkerDaemon = class {
1627
2267
  const statusFn = this.getExport("worker_result_status");
1628
2268
  const status = statusFn(token);
1629
2269
  if (status === 3) {
1630
- const getResultFn2 = this.getExport("worker_get_result");
1631
- getResultFn2(token);
2270
+ this.getExport("worker_get_result")(token);
1632
2271
  const errBytes = this.readReturnSlot();
1633
- const errMsg = new TextDecoder().decode(errBytes);
1634
- throw new IpcError(-32e3, errMsg);
2272
+ throw new IpcError2(-32e3, new TextDecoder().decode(errBytes));
1635
2273
  }
1636
2274
  const getResultFn = this.getExport("worker_get_result");
1637
2275
  const rc = getResultFn(token);
1638
2276
  if (rc === -1) {
1639
2277
  const errBytes = this.readReturnSlot();
1640
- throw new IpcError(-32e3, new TextDecoder().decode(errBytes));
2278
+ throw new IpcError2(-32e3, new TextDecoder().decode(errBytes));
1641
2279
  }
1642
- const resultBytes = this.readReturnSlot();
1643
- return decodePagedSearchResult(resultBytes);
2280
+ return decodePagedSearchResult(this.readReturnSlot());
1644
2281
  }
1645
2282
  // -- Token status/result (u32 direct params) --
1646
2283
  handleResultStatus(params) {
@@ -1655,7 +2292,7 @@ var WorkerDaemon = class {
1655
2292
  const rc = fn(token);
1656
2293
  if (rc === -1) {
1657
2294
  const errBytes = this.readReturnSlot();
1658
- throw new IpcError(-32e3, new TextDecoder().decode(errBytes));
2295
+ throw new IpcError2(-32e3, new TextDecoder().decode(errBytes));
1659
2296
  }
1660
2297
  const bytes = this.readReturnSlot();
1661
2298
  return decodePagedSearchResult(bytes);
@@ -1682,7 +2319,11 @@ var WorkerDaemon = class {
1682
2319
  const encoded = encodeAddSectionParams(input);
1683
2320
  const bytes = this.callWasmSync("worker_add_section", encoded);
1684
2321
  const decoded = decodeAddSectionResult(bytes);
1685
- const nearDups = decoded.nearDuplicates.length > 0 ? decoded.nearDuplicates : this.scanNearDuplicates(input.content, decoded.kbid);
2322
+ const wasmDups = decoded.nearDuplicates;
2323
+ const tsDups = wasmDups.length > 0 ? [] : this.scanNearDuplicates(input.content, decoded.kbid);
2324
+ const nearDups = (wasmDups.length > 0 ? wasmDups : tsDups).map(
2325
+ (d) => ({ ...d, method: "jaccard" })
2326
+ );
1686
2327
  return {
1687
2328
  kbid: decoded.kbid,
1688
2329
  indexed_terms_count: decoded.indexedTermsCount,
@@ -1771,7 +2412,7 @@ var WorkerDaemon = class {
1771
2412
  this.wasmFree(ptr, encoded.length);
1772
2413
  if (rc === -1) {
1773
2414
  const errBytes = this.readReturnSlot();
1774
- throw new IpcError(
2415
+ throw new IpcError2(
1775
2416
  -32e3,
1776
2417
  new TextDecoder().decode(errBytes) || "invalidate failed"
1777
2418
  );
@@ -1810,7 +2451,12 @@ var WorkerDaemon = class {
1810
2451
  this.callWasmZeroArg("worker_status");
1811
2452
  const bytes = this.readReturnSlot();
1812
2453
  const text = new TextDecoder().decode(bytes);
1813
- return decodeKeyValueText(text);
2454
+ const kv = decodeKeyValueText(text);
2455
+ const mem = this._wasmModules?.memory;
2456
+ if (mem) {
2457
+ kv["wasm_memory_bytes"] = String(mem.buffer.byteLength);
2458
+ }
2459
+ return kv;
1814
2460
  }
1815
2461
  handleIntegrityCheck() {
1816
2462
  this.callWasmZeroArg("worker_check_integrity");
@@ -1833,13 +2479,13 @@ var WorkerDaemon = class {
1833
2479
  stale_sources: staleSources
1834
2480
  };
1835
2481
  }
1836
- handleRebuild() {
2482
+ async handleRebuild() {
1837
2483
  const fn = this.getExport("worker_rebuild_indexes");
1838
2484
  const rc = fn();
1839
2485
  if (rc === -1) {
1840
2486
  const errBytes = this.readReturnSlot();
1841
2487
  const errMsg = new TextDecoder().decode(errBytes);
1842
- throw new IpcError(-32e3, errMsg || "rebuild failed");
2488
+ throw new IpcError2(-32e3, errMsg || "rebuild failed");
1843
2489
  }
1844
2490
  const resultBytes = this.readReturnSlot();
1845
2491
  const reindexed = resultBytes.length >= 4 ? new DataView(
@@ -1847,7 +2493,18 @@ var WorkerDaemon = class {
1847
2493
  resultBytes.byteOffset,
1848
2494
  resultBytes.byteLength
1849
2495
  ).getUint32(0, true) : 0;
1850
- return { ok: true, sections_reindexed: reindexed };
2496
+ let vectorsRebuilt = 0;
2497
+ if (this._embeddingProvider !== null) {
2498
+ vectorsRebuilt = await rebuildVectors(
2499
+ this.targetDir,
2500
+ this._embeddingProvider
2501
+ );
2502
+ }
2503
+ return {
2504
+ ok: true,
2505
+ sections_reindexed: reindexed,
2506
+ vectors_rebuilt: vectorsRebuilt
2507
+ };
1851
2508
  }
1852
2509
  // -- Export (read operation, no lock required) --
1853
2510
  handleExport(params) {
@@ -1865,14 +2522,57 @@ var WorkerDaemon = class {
1865
2522
  elapsed_ms: elapsed
1866
2523
  };
1867
2524
  }
2525
+ async handleImport(params) {
2526
+ const sourcePath = params["sourcePath"] ?? "";
2527
+ const dryRun = params["dryRun"] === true;
2528
+ const start = Date.now();
2529
+ const sectionCount = this.countFiles(
2530
+ join6(sourcePath, "sections"),
2531
+ ".section"
2532
+ );
2533
+ const documentCount = this.countFiles(
2534
+ join6(sourcePath, "documents"),
2535
+ ".toml"
2536
+ );
2537
+ let rebuilt = false;
2538
+ if (!dryRun && sectionCount > 0) {
2539
+ await this.handleRebuild();
2540
+ rebuilt = true;
2541
+ }
2542
+ return {
2543
+ sections_imported: sectionCount,
2544
+ documents_imported: documentCount,
2545
+ rebuilt,
2546
+ dry_run: dryRun,
2547
+ elapsed_ms: Date.now() - start
2548
+ };
2549
+ }
2550
+ countFiles(dir, ext) {
2551
+ if (!existsSync4(dir)) return 0;
2552
+ return this.collectFiles(dir, ext).length;
2553
+ }
2554
+ collectFiles(dir, ext) {
2555
+ const result = [];
2556
+ for (const entry of readdirSync3(dir, {
2557
+ withFileTypes: true
2558
+ })) {
2559
+ const full = join6(dir, entry.name);
2560
+ if (entry.isDirectory()) {
2561
+ result.push(...this.collectFiles(full, ext));
2562
+ } else if (entry.name.endsWith(ext)) {
2563
+ result.push(full);
2564
+ }
2565
+ }
2566
+ return result;
2567
+ }
1868
2568
  // -- Near-duplicate detection --
1869
2569
  scanNearDuplicates(content, newKbid) {
1870
2570
  const newTerms = this.extractTermSet(content);
1871
2571
  if (newTerms.size === 0) return [];
1872
- const sectionsDir = join3(this.targetDir, "sections");
2572
+ const sectionsDir = join6(this.targetDir, "sections");
1873
2573
  let shards;
1874
2574
  try {
1875
- shards = readdirSync2(sectionsDir);
2575
+ shards = readdirSync3(sectionsDir);
1876
2576
  } catch {
1877
2577
  return [];
1878
2578
  }
@@ -1880,7 +2580,7 @@ var WorkerDaemon = class {
1880
2580
  for (const shard of shards) {
1881
2581
  let files;
1882
2582
  try {
1883
- files = readdirSync2(join3(sectionsDir, shard));
2583
+ files = readdirSync3(join6(sectionsDir, shard));
1884
2584
  } catch {
1885
2585
  continue;
1886
2586
  }
@@ -1889,8 +2589,8 @@ var WorkerDaemon = class {
1889
2589
  const kbid = file.slice(0, -8);
1890
2590
  if (kbid === newKbid) continue;
1891
2591
  try {
1892
- const data = readFileSync4(
1893
- join3(sectionsDir, shard, file),
2592
+ const data = readFileSync6(
2593
+ join6(sectionsDir, shard, file),
1894
2594
  "utf-8"
1895
2595
  );
1896
2596
  const sep = data.indexOf("\n---\n");
@@ -1931,8 +2631,13 @@ var WorkerDaemon = class {
1931
2631
  acquireWriteLock() {
1932
2632
  if (!this._writeLocked) {
1933
2633
  this._writeLocked = true;
2634
+ log("write-lock: acquired", 0 /* DEBUG */);
1934
2635
  return Promise.resolve();
1935
2636
  }
2637
+ log(
2638
+ "write-lock: queued depth=" + String(this._writeQueue.length + 1),
2639
+ 0 /* DEBUG */
2640
+ );
1936
2641
  return new Promise((resolve2) => {
1937
2642
  this._writeQueue.push({ resolve: resolve2 });
1938
2643
  });
@@ -1946,9 +2651,14 @@ var WorkerDaemon = class {
1946
2651
  releaseWriteLock() {
1947
2652
  const next = this._writeQueue.shift();
1948
2653
  if (next !== void 0) {
2654
+ log(
2655
+ "write-lock: released to next waiter depth=" + String(this._writeQueue.length),
2656
+ 0 /* DEBUG */
2657
+ );
1949
2658
  next.resolve();
1950
2659
  } else {
1951
2660
  this._writeLocked = false;
2661
+ log("write-lock: released", 0 /* DEBUG */);
1952
2662
  }
1953
2663
  }
1954
2664
  // -- WASM lifecycle --
@@ -1973,26 +2683,29 @@ var WorkerDaemon = class {
1973
2683
  this._integrityOk = kv["ok"] === "true";
1974
2684
  if (!this._integrityOk) {
1975
2685
  this._integrityErrors = Object.entries(kv).filter(([k]) => k !== "ok").map(([k, v]) => `${k}=${v}`);
1976
- console.error(
1977
- "[kbdb-worker] startup integrity check failed:",
1978
- this._integrityErrors.join(", ")
2686
+ log(
2687
+ "[kbdb-worker] startup integrity check failed: " + this._integrityErrors.join(", "),
2688
+ 2 /* WARNING */
1979
2689
  );
1980
2690
  }
1981
2691
  } catch {
1982
2692
  this._integrityOk = false;
1983
2693
  this._integrityErrors = ["integrity_check_failed"];
1984
- console.error(
1985
- "[kbdb-worker] startup integrity check threw an error"
2694
+ log(
2695
+ "[kbdb-worker] startup integrity check threw an error",
2696
+ 2 /* WARNING */
1986
2697
  );
1987
2698
  }
1988
2699
  }
1989
2700
  // -- WASM bridge primitives --
1990
2701
  getExport(name) {
1991
2702
  if (this._wasmModules === null) {
2703
+ log("WASM modules not loaded", 3 /* ERROR */);
1992
2704
  throw new Error("WASM modules not loaded");
1993
2705
  }
1994
2706
  const fn = this._wasmModules.kbWorker.exports[name];
1995
2707
  if (typeof fn !== "function") {
2708
+ log(`WASM export not found: ${name}`, 3 /* ERROR */);
1996
2709
  throw new Error(`WASM export not found: ${name}`);
1997
2710
  }
1998
2711
  return fn;
@@ -2016,6 +2729,7 @@ var WorkerDaemon = class {
2016
2729
  if (!memory) return;
2017
2730
  const memView = new Uint8Array(memory.buffer);
2018
2731
  if (ptr + data.length > memView.length) {
2732
+ log("WASM memory overflow", 3 /* ERROR */);
2019
2733
  throw new Error("WASM memory overflow");
2020
2734
  }
2021
2735
  memView.set(data, ptr);
@@ -2046,7 +2760,7 @@ var WorkerDaemon = class {
2046
2760
  if (rc === -1) {
2047
2761
  const errBytes = this.readReturnSlot();
2048
2762
  const errMsg = new TextDecoder().decode(errBytes);
2049
- throw new IpcError(-32e3, errMsg || exportName + " failed");
2763
+ throw new IpcError2(-32e3, errMsg || exportName + " failed");
2050
2764
  }
2051
2765
  return this.readReturnSlot();
2052
2766
  }
@@ -2056,7 +2770,7 @@ var WorkerDaemon = class {
2056
2770
  if (rc === -1) {
2057
2771
  const errBytes = this.readReturnSlot();
2058
2772
  const errMsg = new TextDecoder().decode(errBytes);
2059
- throw new IpcError(-32e3, errMsg || exportName + " failed");
2773
+ throw new IpcError2(-32e3, errMsg || exportName + " failed");
2060
2774
  }
2061
2775
  }
2062
2776
  invokeWasmRaw(exportName, input) {
@@ -2064,10 +2778,10 @@ var WorkerDaemon = class {
2064
2778
  }
2065
2779
  handleCheckVersion(params) {
2066
2780
  const targetPath = typeof params.targetPath === "string" ? params.targetPath : this.targetDir;
2067
- const catalogPath = join3(targetPath, "catalog.toml");
2781
+ const catalogPath = join6(targetPath, "catalog.toml");
2068
2782
  let text;
2069
2783
  try {
2070
- text = readFileSync4(catalogPath, "utf-8");
2784
+ text = readFileSync6(catalogPath, "utf-8");
2071
2785
  } catch {
2072
2786
  return {
2073
2787
  status: "needs_migration",
@@ -2108,7 +2822,7 @@ var WorkerDaemon = class {
2108
2822
  const key = method.slice(CONFIG_PREFIX.length);
2109
2823
  const prop = CONFIG_KEY_MAP[key];
2110
2824
  if (prop === void 0) {
2111
- throw new IpcError(-32601, `Method not found: ${method}`);
2825
+ throw new IpcError2(-32601, `Method not found: ${method}`);
2112
2826
  }
2113
2827
  return this.config[prop];
2114
2828
  }
@@ -2127,9 +2841,18 @@ function parseCatalogVersion(text) {
2127
2841
 
2128
2842
  // src/shared/worker-daemon/functions/start-daemon.function.ts
2129
2843
  async function startDaemon(contextPath, wasmDir2) {
2844
+ log(
2845
+ "start-daemon: entry contextPath=" + contextPath,
2846
+ 0 /* DEBUG */
2847
+ );
2130
2848
  const config = readConfig(contextPath);
2849
+ log(
2850
+ "start-daemon: config loaded timeoutMs=" + String(config.timeoutMs) + " embedding=" + (config.embedding?.provider ?? "none"),
2851
+ 0 /* DEBUG */
2852
+ );
2131
2853
  const hash = await computeSha256(contextPath);
2132
2854
  const contextId = hash.slice(0, 16);
2855
+ log("start-daemon: contextId=" + contextId, 0 /* DEBUG */);
2133
2856
  const daemon = new WorkerDaemon(
2134
2857
  contextId,
2135
2858
  contextPath,
@@ -2140,44 +2863,52 @@ async function startDaemon(contextPath, wasmDir2) {
2140
2863
  daemon.checkPreconditions();
2141
2864
  } catch (err) {
2142
2865
  const message = err instanceof Error ? err.message : String(err);
2143
- console.error(`kbdb-worker: ${message}`);
2866
+ log(`kbdb-worker: ${message}`, 3 /* ERROR */);
2144
2867
  writeCrashLog(contextId, message);
2145
2868
  process.exit(1);
2146
2869
  }
2870
+ log("preconditions passed", 0 /* DEBUG */);
2147
2871
  try {
2148
2872
  await daemon.start();
2149
2873
  } catch (err) {
2150
2874
  const message = err instanceof Error ? err.message : String(err);
2151
- console.error(`kbdb-worker: ${message}`);
2875
+ log(`kbdb-worker: ${message}`, 3 /* ERROR */);
2152
2876
  writeCrashLog(contextId, message);
2153
2877
  process.exit(1);
2154
2878
  }
2879
+ log("daemon started", 1 /* INFO */);
2880
+ log(
2881
+ "start-daemon: registering SIGTERM/SIGINT handlers",
2882
+ 0 /* DEBUG */
2883
+ );
2155
2884
  process.on("SIGTERM", () => {
2885
+ log("start-daemon: SIGTERM received", 0 /* DEBUG */);
2156
2886
  daemon.stop();
2157
2887
  });
2158
2888
  process.on("SIGINT", () => {
2889
+ log("start-daemon: SIGINT received", 0 /* DEBUG */);
2159
2890
  daemon.stop();
2160
2891
  });
2161
2892
  }
2162
2893
  function writeCrashLog(contextId, message) {
2163
2894
  try {
2164
- const crashPath = join4(tmpdir2(), `kbdb-${contextId}.crash`);
2895
+ const crashPath = join7(tmpdir2(), `kbdb-${contextId}.crash`);
2165
2896
  const payload = JSON.stringify({
2166
2897
  error: message,
2167
2898
  timestamp: Date.now()
2168
2899
  });
2169
- writeFileSync3(crashPath, payload);
2900
+ writeFileSync4(crashPath, payload);
2170
2901
  } catch {
2171
2902
  }
2172
2903
  }
2173
2904
 
2174
2905
  // src/shared/worker-daemon/functions/run-worker.function.ts
2175
2906
  import { resolve } from "node:path";
2176
- async function runWorker(argv, deps) {
2177
- const contextPath = argv[0];
2907
+ async function runWorker(argv2, deps) {
2908
+ const { contextPath, logLevel } = parseWorkerArgs(argv2);
2178
2909
  if (!contextPath) {
2179
2910
  return {
2180
- error: "usage: kbdb-worker <context-path>",
2911
+ error: "usage: kbdb-worker <context-path> [--log-level <level>]",
2181
2912
  exitCode: 1
2182
2913
  };
2183
2914
  }
@@ -2189,27 +2920,52 @@ async function runWorker(argv, deps) {
2189
2920
  };
2190
2921
  }
2191
2922
  await deps.startDaemon(resolved, deps.wasmDir);
2192
- return { exitCode: 0 };
2923
+ return { exitCode: 0, logLevel };
2924
+ }
2925
+ function parseWorkerArgs(argv2) {
2926
+ let contextPath;
2927
+ let logLevel;
2928
+ for (let i = 0; i < argv2.length; i++) {
2929
+ if (argv2[i] === "--log-level" && argv2[i + 1]) {
2930
+ logLevel = parseLogLevel(argv2[++i]);
2931
+ } else if (!contextPath) {
2932
+ contextPath = argv2[i];
2933
+ }
2934
+ }
2935
+ return { contextPath, logLevel };
2193
2936
  }
2194
2937
 
2195
2938
  // src/worker.ts
2196
2939
  var baseDir = resolveBaseDir(import.meta.url, import.meta.dirname);
2197
2940
  var wasmDir = resolveWasmDir(baseDir.scriptDir);
2941
+ var argv = getArgs();
2942
+ var cliLogLevel = extractLogLevel(argv);
2943
+ configureLog({ level: resolveLogLevel(cliLogLevel) });
2944
+ log("daemon process starting", 0 /* DEBUG */);
2198
2945
  async function main() {
2199
- const result = await runWorker(getArgs(), {
2200
- existsSync: existsSync3,
2946
+ const result = await runWorker(argv, {
2947
+ existsSync: existsSync5,
2201
2948
  startDaemon,
2202
2949
  wasmDir
2203
2950
  });
2204
2951
  if (result.error) {
2205
- console.error(result.error);
2952
+ log(result.error, 3 /* ERROR */);
2206
2953
  }
2207
2954
  if (result.exitCode !== 0) {
2208
2955
  process.exitCode = result.exitCode;
2209
2956
  }
2210
2957
  }
2211
2958
  main().catch((err) => {
2212
- console.error(err);
2959
+ const msg = err instanceof Error ? err.message : String(err);
2960
+ log(msg, 3 /* ERROR */);
2213
2961
  process.exitCode = 1;
2214
2962
  });
2963
+ function extractLogLevel(args) {
2964
+ for (let i = 0; i < args.length; i++) {
2965
+ if (args[i] === "--log-level" && args[i + 1]) {
2966
+ return parseLogLevel(args[i + 1]);
2967
+ }
2968
+ }
2969
+ return void 0;
2970
+ }
2215
2971
  //# sourceMappingURL=worker.mjs.map