@de-otio/chaoskb-client 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/dist/cli/agent-registry/config-merger.d.ts +28 -0
  2. package/dist/cli/agent-registry/config-merger.d.ts.map +1 -0
  3. package/dist/cli/agent-registry/config-merger.js +90 -0
  4. package/dist/cli/agent-registry/config-merger.js.map +1 -0
  5. package/dist/cli/agent-registry/detector.d.ts +7 -0
  6. package/dist/cli/agent-registry/detector.d.ts.map +1 -0
  7. package/dist/cli/agent-registry/detector.js +100 -0
  8. package/dist/cli/agent-registry/detector.js.map +1 -0
  9. package/dist/cli/agent-registry/index.d.ts +26 -0
  10. package/dist/cli/agent-registry/index.d.ts.map +1 -0
  11. package/dist/cli/agent-registry/index.js +77 -0
  12. package/dist/cli/agent-registry/index.js.map +1 -0
  13. package/dist/cli/agent-registry/path-validator.d.ts +11 -0
  14. package/dist/cli/agent-registry/path-validator.d.ts.map +1 -0
  15. package/dist/cli/agent-registry/path-validator.js +69 -0
  16. package/dist/cli/agent-registry/path-validator.js.map +1 -0
  17. package/dist/cli/agent-registry/registry.json +108 -0
  18. package/dist/cli/agent-registry/types.d.ts +29 -0
  19. package/dist/cli/agent-registry/types.d.ts.map +1 -0
  20. package/dist/cli/agent-registry/types.js +2 -0
  21. package/dist/cli/agent-registry/types.js.map +1 -0
  22. package/dist/cli/bootstrap-lock.d.ts +7 -0
  23. package/dist/cli/bootstrap-lock.d.ts.map +1 -0
  24. package/dist/cli/bootstrap-lock.js +62 -0
  25. package/dist/cli/bootstrap-lock.js.map +1 -0
  26. package/dist/cli/bootstrap.d.ts +23 -0
  27. package/dist/cli/bootstrap.d.ts.map +1 -0
  28. package/dist/cli/bootstrap.js +438 -0
  29. package/dist/cli/bootstrap.js.map +1 -0
  30. package/dist/cli/commands/config.d.ts +13 -0
  31. package/dist/cli/commands/config.d.ts.map +1 -0
  32. package/dist/cli/commands/config.js +244 -0
  33. package/dist/cli/commands/config.js.map +1 -0
  34. package/dist/cli/commands/devices.d.ts +21 -0
  35. package/dist/cli/commands/devices.d.ts.map +1 -0
  36. package/dist/cli/commands/devices.js +229 -0
  37. package/dist/cli/commands/devices.js.map +1 -0
  38. package/dist/cli/commands/export.d.ts +12 -0
  39. package/dist/cli/commands/export.d.ts.map +1 -0
  40. package/dist/cli/commands/export.js +183 -0
  41. package/dist/cli/commands/export.js.map +1 -0
  42. package/dist/cli/commands/import.d.ts +26 -0
  43. package/dist/cli/commands/import.d.ts.map +1 -0
  44. package/dist/cli/commands/import.js +311 -0
  45. package/dist/cli/commands/import.js.map +1 -0
  46. package/dist/cli/commands/kb.d.ts +39 -0
  47. package/dist/cli/commands/kb.d.ts.map +1 -0
  48. package/dist/cli/commands/kb.js +138 -0
  49. package/dist/cli/commands/kb.js.map +1 -0
  50. package/dist/cli/commands/project.d.ts +6 -0
  51. package/dist/cli/commands/project.d.ts.map +1 -0
  52. package/dist/cli/commands/project.js +115 -0
  53. package/dist/cli/commands/project.js.map +1 -0
  54. package/dist/cli/commands/projects.d.ts +33 -0
  55. package/dist/cli/commands/projects.d.ts.map +1 -0
  56. package/dist/cli/commands/projects.js +189 -0
  57. package/dist/cli/commands/projects.js.map +1 -0
  58. package/dist/cli/commands/register.d.ts +8 -0
  59. package/dist/cli/commands/register.d.ts.map +1 -0
  60. package/dist/cli/commands/register.js +146 -0
  61. package/dist/cli/commands/register.js.map +1 -0
  62. package/dist/cli/commands/rotate-key.d.ts +16 -0
  63. package/dist/cli/commands/rotate-key.d.ts.map +1 -0
  64. package/dist/cli/commands/rotate-key.js +197 -0
  65. package/dist/cli/commands/rotate-key.js.map +1 -0
  66. package/dist/cli/commands/setup-sync.d.ts +2 -0
  67. package/dist/cli/commands/setup-sync.d.ts.map +1 -0
  68. package/dist/cli/commands/setup-sync.js +165 -0
  69. package/dist/cli/commands/setup-sync.js.map +1 -0
  70. package/dist/cli/commands/setup.d.ts +12 -0
  71. package/dist/cli/commands/setup.d.ts.map +1 -0
  72. package/dist/cli/commands/setup.js +39 -0
  73. package/dist/cli/commands/setup.js.map +1 -0
  74. package/dist/cli/commands/status.d.ts +5 -0
  75. package/dist/cli/commands/status.d.ts.map +1 -0
  76. package/dist/cli/commands/status.js +96 -0
  77. package/dist/cli/commands/status.js.map +1 -0
  78. package/dist/cli/commands/uninstall.d.ts +4 -0
  79. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  80. package/dist/cli/commands/uninstall.js +85 -0
  81. package/dist/cli/commands/uninstall.js.map +1 -0
  82. package/dist/cli/commands/unregister.d.ts +2 -0
  83. package/dist/cli/commands/unregister.d.ts.map +1 -0
  84. package/dist/cli/commands/unregister.js +46 -0
  85. package/dist/cli/commands/unregister.js.map +1 -0
  86. package/dist/cli/device-metadata.d.ts +15 -0
  87. package/dist/cli/device-metadata.d.ts.map +1 -0
  88. package/dist/cli/device-metadata.js +58 -0
  89. package/dist/cli/device-metadata.js.map +1 -0
  90. package/dist/cli/github.d.ts +38 -0
  91. package/dist/cli/github.d.ts.map +1 -0
  92. package/dist/cli/github.js +159 -0
  93. package/dist/cli/github.js.map +1 -0
  94. package/dist/cli/guide-hashes.json +13 -0
  95. package/dist/cli/index.d.ts +3 -0
  96. package/dist/cli/index.d.ts.map +1 -0
  97. package/dist/cli/index.js +226 -0
  98. package/dist/cli/index.js.map +1 -0
  99. package/dist/cli/mcp-server.d.ts +205 -0
  100. package/dist/cli/mcp-server.d.ts.map +1 -0
  101. package/dist/cli/mcp-server.js +366 -0
  102. package/dist/cli/mcp-server.js.map +1 -0
  103. package/dist/cli/tools/kb-delete.d.ts +10 -0
  104. package/dist/cli/tools/kb-delete.d.ts.map +1 -0
  105. package/dist/cli/tools/kb-delete.js +28 -0
  106. package/dist/cli/tools/kb-delete.js.map +1 -0
  107. package/dist/cli/tools/kb-ingest.d.ts +13 -0
  108. package/dist/cli/tools/kb-ingest.d.ts.map +1 -0
  109. package/dist/cli/tools/kb-ingest.js +72 -0
  110. package/dist/cli/tools/kb-ingest.js.map +1 -0
  111. package/dist/cli/tools/kb-list.d.ts +20 -0
  112. package/dist/cli/tools/kb-list.d.ts.map +1 -0
  113. package/dist/cli/tools/kb-list.js +24 -0
  114. package/dist/cli/tools/kb-list.js.map +1 -0
  115. package/dist/cli/tools/kb-query-shared.d.ts +27 -0
  116. package/dist/cli/tools/kb-query-shared.d.ts.map +1 -0
  117. package/dist/cli/tools/kb-query-shared.js +28 -0
  118. package/dist/cli/tools/kb-query-shared.js.map +1 -0
  119. package/dist/cli/tools/kb-query.d.ts +20 -0
  120. package/dist/cli/tools/kb-query.d.ts.map +1 -0
  121. package/dist/cli/tools/kb-query.js +109 -0
  122. package/dist/cli/tools/kb-query.js.map +1 -0
  123. package/dist/cli/tools/kb-summary.d.ts +29 -0
  124. package/dist/cli/tools/kb-summary.d.ts.map +1 -0
  125. package/dist/cli/tools/kb-summary.js +89 -0
  126. package/dist/cli/tools/kb-summary.js.map +1 -0
  127. package/dist/cli/tools/kb-sync-status.d.ts +7 -0
  128. package/dist/cli/tools/kb-sync-status.d.ts.map +1 -0
  129. package/dist/cli/tools/kb-sync-status.js +48 -0
  130. package/dist/cli/tools/kb-sync-status.js.map +1 -0
  131. package/dist/crypto/aad.d.ts +8 -0
  132. package/dist/crypto/aad.d.ts.map +1 -0
  133. package/dist/crypto/aad.js +11 -0
  134. package/dist/crypto/aad.js.map +1 -0
  135. package/dist/crypto/aead.d.ts +21 -0
  136. package/dist/crypto/aead.d.ts.map +1 -0
  137. package/dist/crypto/aead.js +43 -0
  138. package/dist/crypto/aead.js.map +1 -0
  139. package/dist/crypto/argon2.d.ts +11 -0
  140. package/dist/crypto/argon2.d.ts.map +1 -0
  141. package/dist/crypto/argon2.js +33 -0
  142. package/dist/crypto/argon2.js.map +1 -0
  143. package/dist/crypto/blob-id.d.ts +6 -0
  144. package/dist/crypto/blob-id.d.ts.map +1 -0
  145. package/dist/crypto/blob-id.js +33 -0
  146. package/dist/crypto/blob-id.js.map +1 -0
  147. package/dist/crypto/canonical-json.d.ts +6 -0
  148. package/dist/crypto/canonical-json.d.ts.map +1 -0
  149. package/dist/crypto/canonical-json.js +88 -0
  150. package/dist/crypto/canonical-json.js.map +1 -0
  151. package/dist/crypto/commitment.d.ts +12 -0
  152. package/dist/crypto/commitment.d.ts.map +1 -0
  153. package/dist/crypto/commitment.js +37 -0
  154. package/dist/crypto/commitment.js.map +1 -0
  155. package/dist/crypto/encryption-service.d.ts +19 -0
  156. package/dist/crypto/encryption-service.d.ts.map +1 -0
  157. package/dist/crypto/encryption-service.js +38 -0
  158. package/dist/crypto/encryption-service.js.map +1 -0
  159. package/dist/crypto/envelope-cbor.d.ts +37 -0
  160. package/dist/crypto/envelope-cbor.d.ts.map +1 -0
  161. package/dist/crypto/envelope-cbor.js +124 -0
  162. package/dist/crypto/envelope-cbor.js.map +1 -0
  163. package/dist/crypto/envelope.d.ts +34 -0
  164. package/dist/crypto/envelope.d.ts.map +1 -0
  165. package/dist/crypto/envelope.js +160 -0
  166. package/dist/crypto/envelope.js.map +1 -0
  167. package/dist/crypto/hkdf.d.ts +16 -0
  168. package/dist/crypto/hkdf.d.ts.map +1 -0
  169. package/dist/crypto/hkdf.js +33 -0
  170. package/dist/crypto/hkdf.js.map +1 -0
  171. package/dist/crypto/index.d.ts +15 -0
  172. package/dist/crypto/index.d.ts.map +1 -0
  173. package/dist/crypto/index.js +15 -0
  174. package/dist/crypto/index.js.map +1 -0
  175. package/dist/crypto/invite.d.ts +31 -0
  176. package/dist/crypto/invite.d.ts.map +1 -0
  177. package/dist/crypto/invite.js +137 -0
  178. package/dist/crypto/invite.js.map +1 -0
  179. package/dist/crypto/keyring.d.ts +37 -0
  180. package/dist/crypto/keyring.d.ts.map +1 -0
  181. package/dist/crypto/keyring.js +219 -0
  182. package/dist/crypto/keyring.js.map +1 -0
  183. package/dist/crypto/known-keys.d.ts +34 -0
  184. package/dist/crypto/known-keys.d.ts.map +1 -0
  185. package/dist/crypto/known-keys.js +106 -0
  186. package/dist/crypto/known-keys.js.map +1 -0
  187. package/dist/crypto/project-keys.d.ts +26 -0
  188. package/dist/crypto/project-keys.d.ts.map +1 -0
  189. package/dist/crypto/project-keys.js +69 -0
  190. package/dist/crypto/project-keys.js.map +1 -0
  191. package/dist/crypto/secure-buffer.d.ts +31 -0
  192. package/dist/crypto/secure-buffer.d.ts.map +1 -0
  193. package/dist/crypto/secure-buffer.js +61 -0
  194. package/dist/crypto/secure-buffer.js.map +1 -0
  195. package/dist/crypto/ssh-agent.d.ts +16 -0
  196. package/dist/crypto/ssh-agent.d.ts.map +1 -0
  197. package/dist/crypto/ssh-agent.js +225 -0
  198. package/dist/crypto/ssh-agent.js.map +1 -0
  199. package/dist/crypto/ssh-keys.d.ts +19 -0
  200. package/dist/crypto/ssh-keys.d.ts.map +1 -0
  201. package/dist/crypto/ssh-keys.js +121 -0
  202. package/dist/crypto/ssh-keys.js.map +1 -0
  203. package/dist/crypto/tiers/enhanced.d.ts +25 -0
  204. package/dist/crypto/tiers/enhanced.d.ts.map +1 -0
  205. package/dist/crypto/tiers/enhanced.js +56 -0
  206. package/dist/crypto/tiers/enhanced.js.map +1 -0
  207. package/dist/crypto/tiers/maximum.d.ts +19 -0
  208. package/dist/crypto/tiers/maximum.d.ts.map +1 -0
  209. package/dist/crypto/tiers/maximum.js +25 -0
  210. package/dist/crypto/tiers/maximum.js.map +1 -0
  211. package/dist/crypto/tiers/standard.d.ts +27 -0
  212. package/dist/crypto/tiers/standard.d.ts.map +1 -0
  213. package/dist/crypto/tiers/standard.js +147 -0
  214. package/dist/crypto/tiers/standard.js.map +1 -0
  215. package/dist/crypto/types.d.ts +169 -0
  216. package/dist/crypto/types.d.ts.map +1 -0
  217. package/dist/crypto/types.js +11 -0
  218. package/dist/crypto/types.js.map +1 -0
  219. package/dist/pipeline/chunker.d.ts +27 -0
  220. package/dist/pipeline/chunker.d.ts.map +1 -0
  221. package/dist/pipeline/chunker.js +96 -0
  222. package/dist/pipeline/chunker.js.map +1 -0
  223. package/dist/pipeline/content-pipeline.d.ts +24 -0
  224. package/dist/pipeline/content-pipeline.d.ts.map +1 -0
  225. package/dist/pipeline/content-pipeline.js +49 -0
  226. package/dist/pipeline/content-pipeline.js.map +1 -0
  227. package/dist/pipeline/embedder.d.ts +49 -0
  228. package/dist/pipeline/embedder.d.ts.map +1 -0
  229. package/dist/pipeline/embedder.js +195 -0
  230. package/dist/pipeline/embedder.js.map +1 -0
  231. package/dist/pipeline/extract.d.ts +17 -0
  232. package/dist/pipeline/extract.d.ts.map +1 -0
  233. package/dist/pipeline/extract.js +70 -0
  234. package/dist/pipeline/extract.js.map +1 -0
  235. package/dist/pipeline/fetch.d.ts +26 -0
  236. package/dist/pipeline/fetch.d.ts.map +1 -0
  237. package/dist/pipeline/fetch.js +91 -0
  238. package/dist/pipeline/fetch.js.map +1 -0
  239. package/dist/pipeline/index.d.ts +10 -0
  240. package/dist/pipeline/index.d.ts.map +1 -0
  241. package/dist/pipeline/index.js +10 -0
  242. package/dist/pipeline/index.js.map +1 -0
  243. package/dist/pipeline/model-manager.d.ts +57 -0
  244. package/dist/pipeline/model-manager.d.ts.map +1 -0
  245. package/dist/pipeline/model-manager.js +234 -0
  246. package/dist/pipeline/model-manager.js.map +1 -0
  247. package/dist/pipeline/search.d.ts +37 -0
  248. package/dist/pipeline/search.d.ts.map +1 -0
  249. package/dist/pipeline/search.js +65 -0
  250. package/dist/pipeline/search.js.map +1 -0
  251. package/dist/pipeline/tokenizer.d.ts +29 -0
  252. package/dist/pipeline/tokenizer.d.ts.map +1 -0
  253. package/dist/pipeline/tokenizer.js +54 -0
  254. package/dist/pipeline/tokenizer.js.map +1 -0
  255. package/dist/pipeline/types.d.ts +86 -0
  256. package/dist/pipeline/types.d.ts.map +1 -0
  257. package/dist/pipeline/types.js +2 -0
  258. package/dist/pipeline/types.js.map +1 -0
  259. package/dist/pipeline/wordpiece-tokenizer.d.ts +60 -0
  260. package/dist/pipeline/wordpiece-tokenizer.d.ts.map +1 -0
  261. package/dist/pipeline/wordpiece-tokenizer.js +251 -0
  262. package/dist/pipeline/wordpiece-tokenizer.js.map +1 -0
  263. package/dist/storage/chunk-repo.d.ts +29 -0
  264. package/dist/storage/chunk-repo.d.ts.map +1 -0
  265. package/dist/storage/chunk-repo.js +115 -0
  266. package/dist/storage/chunk-repo.js.map +1 -0
  267. package/dist/storage/database-manager.d.ts +17 -0
  268. package/dist/storage/database-manager.d.ts.map +1 -0
  269. package/dist/storage/database-manager.js +100 -0
  270. package/dist/storage/database-manager.js.map +1 -0
  271. package/dist/storage/database.d.ts +10 -0
  272. package/dist/storage/database.d.ts.map +1 -0
  273. package/dist/storage/database.js +34 -0
  274. package/dist/storage/database.js.map +1 -0
  275. package/dist/storage/embedding-index.d.ts +22 -0
  276. package/dist/storage/embedding-index.d.ts.map +1 -0
  277. package/dist/storage/embedding-index.js +78 -0
  278. package/dist/storage/embedding-index.js.map +1 -0
  279. package/dist/storage/index.d.ts +10 -0
  280. package/dist/storage/index.d.ts.map +1 -0
  281. package/dist/storage/index.js +10 -0
  282. package/dist/storage/index.js.map +1 -0
  283. package/dist/storage/kb-database.d.ts +11 -0
  284. package/dist/storage/kb-database.d.ts.map +1 -0
  285. package/dist/storage/kb-database.js +24 -0
  286. package/dist/storage/kb-database.js.map +1 -0
  287. package/dist/storage/schema.d.ts +6 -0
  288. package/dist/storage/schema.d.ts.map +1 -0
  289. package/dist/storage/schema.js +122 -0
  290. package/dist/storage/schema.js.map +1 -0
  291. package/dist/storage/source-repo.d.ts +20 -0
  292. package/dist/storage/source-repo.d.ts.map +1 -0
  293. package/dist/storage/source-repo.js +120 -0
  294. package/dist/storage/source-repo.js.map +1 -0
  295. package/dist/storage/sync-status-repo.d.ts +15 -0
  296. package/dist/storage/sync-status-repo.d.ts.map +1 -0
  297. package/dist/storage/sync-status-repo.js +40 -0
  298. package/dist/storage/sync-status-repo.js.map +1 -0
  299. package/dist/storage/types.d.ts +139 -0
  300. package/dist/storage/types.d.ts.map +1 -0
  301. package/dist/storage/types.js +9 -0
  302. package/dist/storage/types.js.map +1 -0
  303. package/dist/sync/canary.d.ts +14 -0
  304. package/dist/sync/canary.d.ts.map +1 -0
  305. package/dist/sync/canary.js +53 -0
  306. package/dist/sync/canary.js.map +1 -0
  307. package/dist/sync/full-sync.d.ts +16 -0
  308. package/dist/sync/full-sync.d.ts.map +1 -0
  309. package/dist/sync/full-sync.js +91 -0
  310. package/dist/sync/full-sync.js.map +1 -0
  311. package/dist/sync/http-client.d.ts +28 -0
  312. package/dist/sync/http-client.d.ts.map +1 -0
  313. package/dist/sync/http-client.js +90 -0
  314. package/dist/sync/http-client.js.map +1 -0
  315. package/dist/sync/incremental-sync.d.ts +17 -0
  316. package/dist/sync/incremental-sync.d.ts.map +1 -0
  317. package/dist/sync/incremental-sync.js +155 -0
  318. package/dist/sync/incremental-sync.js.map +1 -0
  319. package/dist/sync/index.d.ts +12 -0
  320. package/dist/sync/index.d.ts.map +1 -0
  321. package/dist/sync/index.js +12 -0
  322. package/dist/sync/index.js.map +1 -0
  323. package/dist/sync/quota.d.ts +17 -0
  324. package/dist/sync/quota.d.ts.map +1 -0
  325. package/dist/sync/quota.js +48 -0
  326. package/dist/sync/quota.js.map +1 -0
  327. package/dist/sync/sequence.d.ts +21 -0
  328. package/dist/sync/sequence.d.ts.map +1 -0
  329. package/dist/sync/sequence.js +49 -0
  330. package/dist/sync/sequence.js.map +1 -0
  331. package/dist/sync/ssh-signer.d.ts +59 -0
  332. package/dist/sync/ssh-signer.d.ts.map +1 -0
  333. package/dist/sync/ssh-signer.js +241 -0
  334. package/dist/sync/ssh-signer.js.map +1 -0
  335. package/dist/sync/sync-service.d.ts +48 -0
  336. package/dist/sync/sync-service.d.ts.map +1 -0
  337. package/dist/sync/sync-service.js +116 -0
  338. package/dist/sync/sync-service.js.map +1 -0
  339. package/dist/sync/types.d.ts +106 -0
  340. package/dist/sync/types.d.ts.map +1 -0
  341. package/dist/sync/types.js +2 -0
  342. package/dist/sync/types.js.map +1 -0
  343. package/dist/sync/upload-queue.d.ts +40 -0
  344. package/dist/sync/upload-queue.d.ts.map +1 -0
  345. package/dist/sync/upload-queue.js +148 -0
  346. package/dist/sync/upload-queue.js.map +1 -0
  347. package/dist/sync/verification.d.ts +17 -0
  348. package/dist/sync/verification.d.ts.map +1 -0
  349. package/dist/sync/verification.js +25 -0
  350. package/dist/sync/verification.js.map +1 -0
  351. package/dist/vitest.config.d.ts +3 -0
  352. package/dist/vitest.config.d.ts.map +1 -0
  353. package/dist/vitest.config.js +16 -0
  354. package/dist/vitest.config.js.map +1 -0
  355. package/package.json +68 -0
@@ -0,0 +1,86 @@
1
+ /** Configuration for the content pipeline */
2
+ export interface PipelineConfig {
3
+ /** Path to ONNX model directory (default: ~/.chaoskb/models/) */
4
+ modelPath: string;
5
+ /** Maximum tokens per chunk (default: 500) */
6
+ maxChunkTokens: number;
7
+ /** Token overlap between chunks (default: 50) */
8
+ overlapTokens: number;
9
+ /** HTTP request timeout in ms (default: 30000) */
10
+ fetchTimeoutMs: number;
11
+ /** Maximum redirects to follow (default: 5) */
12
+ maxRedirects: number;
13
+ /** User-Agent header */
14
+ userAgent: string;
15
+ }
16
+ /** Extracted content from a URL */
17
+ export interface ExtractedContent {
18
+ title: string;
19
+ content: string;
20
+ /** Original URL */
21
+ url: string;
22
+ /** Byte length of extracted content */
23
+ byteLength: number;
24
+ }
25
+ /** A text chunk from extracted content */
26
+ export interface Chunk {
27
+ /** Chunk text content */
28
+ content: string;
29
+ /** Zero-based index within the source */
30
+ index: number;
31
+ /** Approximate token count */
32
+ tokenCount: number;
33
+ /** Byte offset in original extracted text */
34
+ byteOffset: number;
35
+ }
36
+ /** Embedding vector (384-dimensional for snowflake-arctic-embed-s) */
37
+ export type EmbeddingVector = Float32Array;
38
+ /** A chunk with its computed embedding */
39
+ export interface EmbeddedChunk extends Chunk {
40
+ /** 384-dimensional embedding vector */
41
+ embedding: EmbeddingVector;
42
+ /** Model identifier: "snowflake-arctic-embed-s@384" */
43
+ model: string;
44
+ }
45
+ /** Search result from the embedding index */
46
+ export interface SearchResult {
47
+ /** Source blob ID */
48
+ sourceId: string;
49
+ /** Chunk index within the source */
50
+ chunkIndex: number;
51
+ /** Chunk text content */
52
+ content: string;
53
+ /** Cosine similarity score (0-1) */
54
+ score: number;
55
+ }
56
+ /** Model download progress callback */
57
+ export type DownloadProgressCallback = (downloaded: number, total: number) => void;
58
+ /** Content pipeline service interface */
59
+ export interface IContentPipeline {
60
+ /** Fetch and extract content from a URL */
61
+ fetchAndExtract(url: string): Promise<ExtractedContent>;
62
+ /** Split extracted text into chunks */
63
+ chunk(text: string): Chunk[];
64
+ /** Embed a single text string */
65
+ embed(text: string): Promise<EmbeddingVector>;
66
+ /** Embed multiple chunks */
67
+ embedChunks(chunks: Chunk[]): Promise<EmbeddedChunk[]>;
68
+ /** Search embeddings for similar content */
69
+ search(query: EmbeddingVector, embeddings: EmbeddingVector[], topK: number): number[];
70
+ }
71
+ /** Model manager for downloading and verifying the ONNX model */
72
+ export interface IModelManager {
73
+ /** Check if model is downloaded and verified */
74
+ isModelReady(): Promise<boolean>;
75
+ /** Download model if not present, verify SHA-256. Also downloads vocab. */
76
+ ensureModel(onProgress?: DownloadProgressCallback): Promise<string>;
77
+ /** Get path to model file */
78
+ getModelPath(): string;
79
+ /** Get path to vocabulary file */
80
+ getVocabPath(): string;
81
+ /** Check if vocabulary is downloaded and verified */
82
+ isVocabReady(): Promise<boolean>;
83
+ /** Download vocabulary if not present, verify SHA-256 */
84
+ ensureVocab(): Promise<string>;
85
+ }
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../pipeline/types.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,0CAA0C;AAC1C,MAAM,WAAW,KAAK;IACpB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,sEAAsE;AACtE,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC;AAE3C,0CAA0C;AAC1C,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,uCAAuC;IACvC,SAAS,EAAE,eAAe,CAAC;IAC3B,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uCAAuC;AACvC,MAAM,MAAM,wBAAwB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnF,yCAAyC;AACzC,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxD,uCAAuC;IACvC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAAC;IAC7B,iCAAiC;IACjC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9C,4BAA4B;IAC5B,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACvD,4CAA4C;IAC5C,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACvF;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,2EAA2E;IAC3E,WAAW,CAAC,UAAU,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,6BAA6B;IAC7B,YAAY,IAAI,MAAM,CAAC;IACvB,kCAAkC;IAClC,YAAY,IAAI,MAAM,CAAC;IACvB,qDAAqD;IACrD,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,yDAAyD;IACzD,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../pipeline/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * BERT-compatible WordPiece tokenizer for snowflake-arctic-embed-s.
3
+ *
4
+ * Implements the standard BERT tokenization pipeline:
5
+ * 1. Lowercase + strip accents
6
+ * 2. Basic tokenization (whitespace + punctuation splitting)
7
+ * 3. WordPiece subword segmentation using the model vocabulary
8
+ *
9
+ * The vocabulary is loaded from a vocab.txt file where each line is a
10
+ * token and the line number (0-based) is its ID.
11
+ */
12
+ /** Special token IDs matching the BERT vocabulary layout. */
13
+ declare const PAD_ID = 0;
14
+ declare const UNK_ID = 100;
15
+ declare const CLS_ID = 101;
16
+ declare const SEP_ID = 102;
17
+ /**
18
+ * A loaded vocabulary mapping tokens to their integer IDs.
19
+ */
20
+ export interface Vocabulary {
21
+ tokenToId: Map<string, number>;
22
+ size: number;
23
+ }
24
+ /**
25
+ * Load a BERT vocab.txt file into a token-to-ID map.
26
+ * Results are cached by path for the lifetime of the process.
27
+ *
28
+ * @param vocabPath - Absolute path to vocab.txt.
29
+ * @returns The loaded vocabulary.
30
+ */
31
+ export declare function loadVocabulary(vocabPath: string): Vocabulary;
32
+ /**
33
+ * Clear the vocabulary cache (useful for testing).
34
+ */
35
+ export declare function clearVocabCache(): void;
36
+ /**
37
+ * Tokenize text into BERT token IDs using WordPiece.
38
+ *
39
+ * Produces a sequence: [CLS] tokens... [SEP], truncated to maxLength.
40
+ *
41
+ * @param text - Input text string.
42
+ * @param vocab - Loaded vocabulary.
43
+ * @param maxLength - Maximum sequence length including special tokens (default: 512).
44
+ * @returns Array of token IDs as bigint (for ONNX int64 tensors).
45
+ */
46
+ export declare function tokenize(text: string, vocab: Vocabulary, maxLength?: number): bigint[];
47
+ /**
48
+ * Count the number of WordPiece tokens a text would produce.
49
+ * Does not include [CLS] and [SEP] special tokens.
50
+ *
51
+ * @param text - Input text string.
52
+ * @param vocab - Loaded vocabulary.
53
+ * @returns Number of WordPiece tokens.
54
+ */
55
+ export declare function countWordPieceTokens(text: string, vocab: Vocabulary): number;
56
+ /**
57
+ * Exports for use by the embedder and token counter.
58
+ */
59
+ export { PAD_ID, UNK_ID, CLS_ID, SEP_ID, };
60
+ //# sourceMappingURL=wordpiece-tokenizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wordpiece-tokenizer.d.ts","sourceRoot":"","sources":["../../pipeline/wordpiece-tokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,6DAA6D;AAC7D,QAAA,MAAM,MAAM,IAAI,CAAC;AACjB,QAAA,MAAM,MAAM,MAAM,CAAC;AACnB,QAAA,MAAM,MAAM,MAAM,CAAC;AACnB,QAAA,MAAM,MAAM,MAAM,CAAC;AAQnB;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAKD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAoB5D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EACjB,SAAS,GAAE,MAAY,GACtB,MAAM,EAAE,CAuBV;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAS5E;AAkLD;;GAEG;AACH,OAAO,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,GACP,CAAC"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * BERT-compatible WordPiece tokenizer for snowflake-arctic-embed-s.
3
+ *
4
+ * Implements the standard BERT tokenization pipeline:
5
+ * 1. Lowercase + strip accents
6
+ * 2. Basic tokenization (whitespace + punctuation splitting)
7
+ * 3. WordPiece subword segmentation using the model vocabulary
8
+ *
9
+ * The vocabulary is loaded from a vocab.txt file where each line is a
10
+ * token and the line number (0-based) is its ID.
11
+ */
12
+ import { readFileSync } from 'node:fs';
13
+ /** Special token IDs matching the BERT vocabulary layout. */
14
+ const PAD_ID = 0;
15
+ const UNK_ID = 100;
16
+ const CLS_ID = 101;
17
+ const SEP_ID = 102;
18
+ /** Maximum subword length to attempt during WordPiece lookup. */
19
+ const MAX_WORD_LENGTH = 200;
20
+ /** WordPiece continuation prefix. */
21
+ const CONTINUATION_PREFIX = '##';
22
+ /** Singleton cache: vocab path → loaded vocabulary. */
23
+ const vocabCache = new Map();
24
+ /**
25
+ * Load a BERT vocab.txt file into a token-to-ID map.
26
+ * Results are cached by path for the lifetime of the process.
27
+ *
28
+ * @param vocabPath - Absolute path to vocab.txt.
29
+ * @returns The loaded vocabulary.
30
+ */
31
+ export function loadVocabulary(vocabPath) {
32
+ const cached = vocabCache.get(vocabPath);
33
+ if (cached) {
34
+ return cached;
35
+ }
36
+ const content = readFileSync(vocabPath, 'utf-8');
37
+ const lines = content.split(/\r?\n/);
38
+ const tokenToId = new Map();
39
+ for (let i = 0; i < lines.length; i++) {
40
+ const token = lines[i];
41
+ if (token.length > 0) {
42
+ tokenToId.set(token, i);
43
+ }
44
+ }
45
+ const vocab = { tokenToId, size: tokenToId.size };
46
+ vocabCache.set(vocabPath, vocab);
47
+ return vocab;
48
+ }
49
+ /**
50
+ * Clear the vocabulary cache (useful for testing).
51
+ */
52
+ export function clearVocabCache() {
53
+ vocabCache.clear();
54
+ }
55
+ /**
56
+ * Tokenize text into BERT token IDs using WordPiece.
57
+ *
58
+ * Produces a sequence: [CLS] tokens... [SEP], truncated to maxLength.
59
+ *
60
+ * @param text - Input text string.
61
+ * @param vocab - Loaded vocabulary.
62
+ * @param maxLength - Maximum sequence length including special tokens (default: 512).
63
+ * @returns Array of token IDs as bigint (for ONNX int64 tensors).
64
+ */
65
+ export function tokenize(text, vocab, maxLength = 512) {
66
+ const tokens = basicTokenize(text);
67
+ const ids = [BigInt(CLS_ID)];
68
+ // Reserve space for [SEP]
69
+ const maxTokenSlots = maxLength - 2;
70
+ for (const token of tokens) {
71
+ if (ids.length - 1 >= maxTokenSlots) {
72
+ break;
73
+ }
74
+ const subwordIds = wordpieceTokenize(token, vocab);
75
+ for (const id of subwordIds) {
76
+ if (ids.length - 1 >= maxTokenSlots) {
77
+ break;
78
+ }
79
+ ids.push(BigInt(id));
80
+ }
81
+ }
82
+ ids.push(BigInt(SEP_ID));
83
+ return ids;
84
+ }
85
+ /**
86
+ * Count the number of WordPiece tokens a text would produce.
87
+ * Does not include [CLS] and [SEP] special tokens.
88
+ *
89
+ * @param text - Input text string.
90
+ * @param vocab - Loaded vocabulary.
91
+ * @returns Number of WordPiece tokens.
92
+ */
93
+ export function countWordPieceTokens(text, vocab) {
94
+ const tokens = basicTokenize(text);
95
+ let count = 0;
96
+ for (const token of tokens) {
97
+ count += wordpieceTokenize(token, vocab).length;
98
+ }
99
+ return count;
100
+ }
101
+ /**
102
+ * BERT basic tokenization: lowercase, strip accents, split on whitespace
103
+ * and punctuation.
104
+ *
105
+ * @param text - Raw input text.
106
+ * @returns Array of lowercase word tokens.
107
+ */
108
+ function basicTokenize(text) {
109
+ // Lowercase
110
+ let normalized = text.toLowerCase();
111
+ // Strip accents (NFD decomposition, remove combining marks)
112
+ normalized = normalized.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
113
+ // Clean: replace control characters and zero-width chars with space
114
+ normalized = normalized.replace(/[\x00-\x1f\x7f-\x9f\u200b-\u200f\ufeff]/g, ' ');
115
+ // Tokenize CJK characters: add spaces around each CJK character
116
+ // so they become individual tokens
117
+ normalized = tokenizeCjk(normalized);
118
+ // Split on whitespace, then split each word on punctuation boundaries
119
+ const words = normalized.split(/\s+/).filter((w) => w.length > 0);
120
+ const tokens = [];
121
+ for (const word of words) {
122
+ tokens.push(...splitOnPunctuation(word));
123
+ }
124
+ return tokens;
125
+ }
126
+ /**
127
+ * Split a word on punctuation characters. Punctuation becomes its own token.
128
+ *
129
+ * @param word - A whitespace-delimited word.
130
+ * @returns Array of sub-tokens.
131
+ */
132
+ function splitOnPunctuation(word) {
133
+ const tokens = [];
134
+ let current = '';
135
+ for (const char of word) {
136
+ if (isPunctuation(char)) {
137
+ if (current.length > 0) {
138
+ tokens.push(current);
139
+ current = '';
140
+ }
141
+ tokens.push(char);
142
+ }
143
+ else {
144
+ current += char;
145
+ }
146
+ }
147
+ if (current.length > 0) {
148
+ tokens.push(current);
149
+ }
150
+ return tokens;
151
+ }
152
+ /**
153
+ * Check if a character is punctuation (Unicode general categories P*
154
+ * plus ASCII symbols).
155
+ */
156
+ function isPunctuation(char) {
157
+ const code = char.codePointAt(0);
158
+ // ASCII punctuation ranges
159
+ if ((code >= 33 && code <= 47) || // ! " # $ % & ' ( ) * + , - . /
160
+ (code >= 58 && code <= 64) || // : ; < = > ? @
161
+ (code >= 91 && code <= 96) || // [ \ ] ^ _ `
162
+ (code >= 123 && code <= 126) // { | } ~
163
+ ) {
164
+ return true;
165
+ }
166
+ // Unicode punctuation (general category P)
167
+ // This is a simplified check covering the most common ranges
168
+ if ((code >= 0x2000 && code <= 0x206f) || // General punctuation
169
+ (code >= 0x3000 && code <= 0x303f) || // CJK symbols and punctuation
170
+ (code >= 0xfe30 && code <= 0xfe6f) || // CJK compatibility forms
171
+ (code >= 0xff00 && code <= 0xff0f) || // Fullwidth punctuation
172
+ (code >= 0xff1a && code <= 0xff20) ||
173
+ (code >= 0xff3b && code <= 0xff40) ||
174
+ (code >= 0xff5b && code <= 0xff65)) {
175
+ return true;
176
+ }
177
+ return false;
178
+ }
179
+ /**
180
+ * Add spaces around CJK characters so they tokenize as individual tokens.
181
+ */
182
+ function tokenizeCjk(text) {
183
+ const output = [];
184
+ for (const char of text) {
185
+ const cp = char.codePointAt(0);
186
+ if (isCjkCharacter(cp)) {
187
+ output.push(' ', char, ' ');
188
+ }
189
+ else {
190
+ output.push(char);
191
+ }
192
+ }
193
+ return output.join('');
194
+ }
195
+ /**
196
+ * Check if a code point is a CJK character.
197
+ */
198
+ function isCjkCharacter(cp) {
199
+ return ((cp >= 0x4e00 && cp <= 0x9fff) ||
200
+ (cp >= 0x3400 && cp <= 0x4dbf) ||
201
+ (cp >= 0x20000 && cp <= 0x2a6df) ||
202
+ (cp >= 0x2a700 && cp <= 0x2b73f) ||
203
+ (cp >= 0x2b740 && cp <= 0x2b81f) ||
204
+ (cp >= 0x2b820 && cp <= 0x2ceaf) ||
205
+ (cp >= 0xf900 && cp <= 0xfaff) ||
206
+ (cp >= 0x2f800 && cp <= 0x2fa1f));
207
+ }
208
+ /**
209
+ * WordPiece subword tokenization for a single pre-tokenized word.
210
+ *
211
+ * Greedily matches the longest prefix in the vocabulary, then continues
212
+ * with ## continuation tokens for the remainder.
213
+ *
214
+ * @param word - A single pre-tokenized word (lowercase, no whitespace).
215
+ * @param vocab - Loaded vocabulary.
216
+ * @returns Array of integer token IDs.
217
+ */
218
+ function wordpieceTokenize(word, vocab) {
219
+ if (word.length > MAX_WORD_LENGTH) {
220
+ return [UNK_ID];
221
+ }
222
+ const ids = [];
223
+ let start = 0;
224
+ while (start < word.length) {
225
+ let end = word.length;
226
+ let foundId;
227
+ while (start < end) {
228
+ const substr = start === 0
229
+ ? word.slice(start, end)
230
+ : CONTINUATION_PREFIX + word.slice(start, end);
231
+ const id = vocab.tokenToId.get(substr);
232
+ if (id !== undefined) {
233
+ foundId = id;
234
+ break;
235
+ }
236
+ end--;
237
+ }
238
+ if (foundId === undefined) {
239
+ // Character not in vocabulary at all — entire word is [UNK]
240
+ return [UNK_ID];
241
+ }
242
+ ids.push(foundId);
243
+ start = end;
244
+ }
245
+ return ids;
246
+ }
247
+ /**
248
+ * Exports for use by the embedder and token counter.
249
+ */
250
+ export { PAD_ID, UNK_ID, CLS_ID, SEP_ID, };
251
+ //# sourceMappingURL=wordpiece-tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wordpiece-tokenizer.js","sourceRoot":"","sources":["../../pipeline/wordpiece-tokenizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type BetterSqlite3 from 'better-sqlite3';
2
+ import type { IChunkRepository, ChunkRecord } from './types.js';
3
+ /** Result of a keyword search using FTS5 */
4
+ export interface KeywordSearchResult {
5
+ sourceId: string;
6
+ chunkIndex: number;
7
+ content: string;
8
+ snippet: string;
9
+ rank: number;
10
+ }
11
+ export declare class ChunkRepository implements IChunkRepository {
12
+ private readonly db;
13
+ private readonly insertStmt;
14
+ private readonly getBySourceIdStmt;
15
+ private readonly deleteBySourceIdStmt;
16
+ constructor(db: BetterSqlite3.Database);
17
+ insertMany(chunks: Omit<ChunkRecord, 'id'>[]): ChunkRecord[];
18
+ getBySourceId(sourceId: string): ChunkRecord[];
19
+ deleteBySourceId(sourceId: string): number;
20
+ /**
21
+ * Search chunk content using FTS5 keyword matching.
22
+ *
23
+ * @param query - Search query (supports FTS5 syntax: AND, OR, NOT, "phrase", prefix*)
24
+ * @param topK - Maximum number of results to return.
25
+ * @returns Results ranked by BM25 relevance score.
26
+ */
27
+ searchKeyword(query: string, topK: number): KeywordSearchResult[];
28
+ }
29
+ //# sourceMappingURL=chunk-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-repo.d.ts","sourceRoot":"","sources":["../../storage/chunk-repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAiChE,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAyB;IAE5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;IAC5D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA0B;gBAEnD,EAAE,EAAE,aAAa,CAAC,QAAQ;IAetC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,GAAG,WAAW,EAAE;IA0C5D,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAK9C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK1C;;;;;;OAMG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,mBAAmB,EAAE;CAuClE"}
@@ -0,0 +1,115 @@
1
+ import * as crypto from 'node:crypto';
2
+ function rowToRecord(row) {
3
+ let embedding;
4
+ if (row.embedding) {
5
+ // Buffer → Float32Array
6
+ const uint8 = new Uint8Array(row.embedding);
7
+ embedding = new Float32Array(uint8.buffer, uint8.byteOffset, uint8.byteLength / 4);
8
+ }
9
+ else {
10
+ embedding = new Float32Array(0);
11
+ }
12
+ return {
13
+ id: row.id,
14
+ sourceId: row.source_id,
15
+ chunkIndex: row.chunk_index,
16
+ content: row.content,
17
+ embedding,
18
+ tokenCount: row.token_count,
19
+ model: row.model,
20
+ };
21
+ }
22
+ export class ChunkRepository {
23
+ db;
24
+ insertStmt;
25
+ getBySourceIdStmt;
26
+ deleteBySourceIdStmt;
27
+ constructor(db) {
28
+ this.db = db;
29
+ this.insertStmt = db.prepare(`
30
+ INSERT INTO chunks (id, source_id, chunk_index, content, embedding, token_count, model)
31
+ VALUES (@id, @sourceId, @chunkIndex, @content, @embedding, @tokenCount, @model)
32
+ `);
33
+ this.getBySourceIdStmt = db.prepare('SELECT * FROM chunks WHERE source_id = ? ORDER BY chunk_index ASC');
34
+ this.deleteBySourceIdStmt = db.prepare('DELETE FROM chunks WHERE source_id = ?');
35
+ }
36
+ insertMany(chunks) {
37
+ const results = [];
38
+ const insertAll = this.db.transaction(() => {
39
+ for (const chunk of chunks) {
40
+ const id = crypto.randomUUID();
41
+ let embeddingBuf = null;
42
+ if (chunk.embedding && chunk.embedding.length > 0) {
43
+ embeddingBuf = Buffer.from(chunk.embedding.buffer, chunk.embedding.byteOffset, chunk.embedding.byteLength);
44
+ }
45
+ this.insertStmt.run({
46
+ id,
47
+ sourceId: chunk.sourceId,
48
+ chunkIndex: chunk.chunkIndex,
49
+ content: chunk.content,
50
+ embedding: embeddingBuf,
51
+ tokenCount: chunk.tokenCount,
52
+ model: chunk.model,
53
+ });
54
+ results.push({
55
+ id,
56
+ sourceId: chunk.sourceId,
57
+ chunkIndex: chunk.chunkIndex,
58
+ content: chunk.content,
59
+ embedding: chunk.embedding,
60
+ tokenCount: chunk.tokenCount,
61
+ model: chunk.model,
62
+ });
63
+ }
64
+ });
65
+ insertAll();
66
+ return results;
67
+ }
68
+ getBySourceId(sourceId) {
69
+ const rows = this.getBySourceIdStmt.all(sourceId);
70
+ return rows.map(rowToRecord);
71
+ }
72
+ deleteBySourceId(sourceId) {
73
+ const result = this.deleteBySourceIdStmt.run(sourceId);
74
+ return result.changes;
75
+ }
76
+ /**
77
+ * Search chunk content using FTS5 keyword matching.
78
+ *
79
+ * @param query - Search query (supports FTS5 syntax: AND, OR, NOT, "phrase", prefix*)
80
+ * @param topK - Maximum number of results to return.
81
+ * @returns Results ranked by BM25 relevance score.
82
+ */
83
+ searchKeyword(query, topK) {
84
+ if (!query || query.trim().length === 0) {
85
+ return [];
86
+ }
87
+ try {
88
+ const stmt = this.db.prepare(`
89
+ SELECT
90
+ chunks_fts.source_id,
91
+ chunks_fts.chunk_index,
92
+ chunks_fts.content,
93
+ snippet(chunks_fts, 0, '>>>>', '<<<<', '...', 32) AS snippet,
94
+ rank
95
+ FROM chunks_fts
96
+ WHERE chunks_fts MATCH ?
97
+ ORDER BY rank
98
+ LIMIT ?
99
+ `);
100
+ const rows = stmt.all(query, topK);
101
+ return rows.map((row) => ({
102
+ sourceId: row.source_id,
103
+ chunkIndex: row.chunk_index,
104
+ content: row.content,
105
+ snippet: row.snippet,
106
+ rank: row.rank,
107
+ }));
108
+ }
109
+ catch {
110
+ // FTS5 query syntax errors should not crash — return empty results
111
+ return [];
112
+ }
113
+ }
114
+ }
115
+ //# sourceMappingURL=chunk-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-repo.js","sourceRoot":"","sources":["../../storage/chunk-repo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAatC,SAAS,WAAW,CAAC,GAAa;IAChC,IAAI,SAAuB,CAAC;IAC5B,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,wBAAwB;QACxB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,SAAS,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACrF,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS;QACT,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC;AACJ,CAAC;AAWD,MAAM,OAAO,eAAe;IACT,EAAE,CAAyB;IAE3B,UAAU,CAA0B;IACpC,iBAAiB,CAA0B;IAC3C,oBAAoB,CAA0B;IAE/D,YAAY,EAA0B;QACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,CACjC,mEAAmE,CACpE,CAAC;QAEF,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;IACnF,CAAC;IAED,UAAU,CAAC,MAAiC;QAC1C,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBAE/B,IAAI,YAAY,GAAkB,IAAI,CAAC;gBACvC,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClD,YAAY,GAAG,MAAM,CAAC,IAAI,CACxB,KAAK,CAAC,SAAS,CAAC,MAAM,EACtB,KAAK,CAAC,SAAS,CAAC,UAAU,EAC1B,KAAK,CAAC,SAAS,CAAC,UAAU,CAC3B,CAAC;gBACJ,CAAC;gBAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAClB,EAAE;oBACF,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,SAAS,EAAE,YAAY;oBACvB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAC,CAAC;gBAEH,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE;oBACF,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,SAAS,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAe,CAAC;QAChE,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACH,aAAa,CAAC,KAAa,EAAE,IAAY;QACvC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;OAW5B,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAM/B,CAAC;YAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACxB,QAAQ,EAAE,GAAG,CAAC,SAAS;gBACvB,UAAU,EAAE,GAAG,CAAC,WAAW;gBAC3B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;aACf,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;YACnE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import type { IDatabaseManager, IDatabase } from './types.js';
2
+ export declare class DatabaseManager implements IDatabaseManager {
3
+ private readonly baseDir;
4
+ private readonly databases;
5
+ constructor(baseDir?: string);
6
+ getPersonalDb(): IDatabase;
7
+ getProjectDb(projectName: string): IDatabase;
8
+ listProjects(): {
9
+ name: string;
10
+ path: string;
11
+ sizeBytes: number;
12
+ sourceCount: number;
13
+ }[];
14
+ deleteProject(projectName: string): boolean;
15
+ closeAll(): void;
16
+ }
17
+ //# sourceMappingURL=database-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-manager.d.ts","sourceRoot":"","sources":["../../storage/database-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK9D,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;gBAEnD,OAAO,CAAC,EAAE,MAAM;IAQ5B,aAAa,IAAI,SAAS;IAW1B,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IAsB5C,YAAY,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE;IAuCxF,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAwB3C,QAAQ,IAAI,IAAI;CAMjB"}