ocr-provenance-mcp 1.0.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.

Potentially problematic release.


This version of ocr-provenance-mcp might be problematic. Click here for more details.

Files changed (578) hide show
  1. package/.env.example +55 -0
  2. package/LICENSE +78 -0
  3. package/README.md +1154 -0
  4. package/dist/bin-http.d.ts +24 -0
  5. package/dist/bin-http.d.ts.map +1 -0
  6. package/dist/bin-http.js +275 -0
  7. package/dist/bin-http.js.map +1 -0
  8. package/dist/bin-setup.d.ts +11 -0
  9. package/dist/bin-setup.d.ts.map +1 -0
  10. package/dist/bin-setup.js +610 -0
  11. package/dist/bin-setup.js.map +1 -0
  12. package/dist/bin.d.ts +16 -0
  13. package/dist/bin.d.ts.map +1 -0
  14. package/dist/bin.js +16 -0
  15. package/dist/bin.js.map +1 -0
  16. package/dist/index.d.ts +13 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +90 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/models/chunk.d.ts +136 -0
  21. package/dist/models/chunk.d.ts.map +1 -0
  22. package/dist/models/chunk.js +27 -0
  23. package/dist/models/chunk.js.map +1 -0
  24. package/dist/models/cluster.d.ts +79 -0
  25. package/dist/models/cluster.d.ts.map +1 -0
  26. package/dist/models/cluster.js +10 -0
  27. package/dist/models/cluster.js.map +1 -0
  28. package/dist/models/comparison.d.ts +62 -0
  29. package/dist/models/comparison.d.ts.map +1 -0
  30. package/dist/models/comparison.js +8 -0
  31. package/dist/models/comparison.js.map +1 -0
  32. package/dist/models/document.d.ts +104 -0
  33. package/dist/models/document.d.ts.map +1 -0
  34. package/dist/models/document.js +15 -0
  35. package/dist/models/document.js.map +1 -0
  36. package/dist/models/embedding.d.ts +87 -0
  37. package/dist/models/embedding.d.ts.map +1 -0
  38. package/dist/models/embedding.js +23 -0
  39. package/dist/models/embedding.js.map +1 -0
  40. package/dist/models/extraction.d.ts +15 -0
  41. package/dist/models/extraction.d.ts.map +1 -0
  42. package/dist/models/extraction.js +2 -0
  43. package/dist/models/extraction.js.map +1 -0
  44. package/dist/models/form-fill.d.ts +23 -0
  45. package/dist/models/form-fill.d.ts.map +1 -0
  46. package/dist/models/form-fill.js +2 -0
  47. package/dist/models/form-fill.js.map +1 -0
  48. package/dist/models/image.d.ts +177 -0
  49. package/dist/models/image.d.ts.map +1 -0
  50. package/dist/models/image.js +8 -0
  51. package/dist/models/image.js.map +1 -0
  52. package/dist/models/index.d.ts +14 -0
  53. package/dist/models/index.d.ts.map +1 -0
  54. package/dist/models/index.js +22 -0
  55. package/dist/models/index.js.map +1 -0
  56. package/dist/models/provenance.d.ts +174 -0
  57. package/dist/models/provenance.d.ts.map +1 -0
  58. package/dist/models/provenance.js +53 -0
  59. package/dist/models/provenance.js.map +1 -0
  60. package/dist/models/uploaded-file.d.ts +20 -0
  61. package/dist/models/uploaded-file.d.ts.map +1 -0
  62. package/dist/models/uploaded-file.js +2 -0
  63. package/dist/models/uploaded-file.js.map +1 -0
  64. package/dist/server/errors.d.ts +93 -0
  65. package/dist/server/errors.d.ts.map +1 -0
  66. package/dist/server/errors.js +256 -0
  67. package/dist/server/errors.js.map +1 -0
  68. package/dist/server/events.d.ts +36 -0
  69. package/dist/server/events.d.ts.map +1 -0
  70. package/dist/server/events.js +48 -0
  71. package/dist/server/events.js.map +1 -0
  72. package/dist/server/permissions.d.ts +26 -0
  73. package/dist/server/permissions.d.ts.map +1 -0
  74. package/dist/server/permissions.js +194 -0
  75. package/dist/server/permissions.js.map +1 -0
  76. package/dist/server/register-tools.d.ts +25 -0
  77. package/dist/server/register-tools.d.ts.map +1 -0
  78. package/dist/server/register-tools.js +102 -0
  79. package/dist/server/register-tools.js.map +1 -0
  80. package/dist/server/startup.d.ts +16 -0
  81. package/dist/server/startup.d.ts.map +1 -0
  82. package/dist/server/startup.js +37 -0
  83. package/dist/server/startup.js.map +1 -0
  84. package/dist/server/state.d.ts +166 -0
  85. package/dist/server/state.d.ts.map +1 -0
  86. package/dist/server/state.js +424 -0
  87. package/dist/server/state.js.map +1 -0
  88. package/dist/server/transports/http-transport.d.ts +37 -0
  89. package/dist/server/transports/http-transport.d.ts.map +1 -0
  90. package/dist/server/transports/http-transport.js +204 -0
  91. package/dist/server/transports/http-transport.js.map +1 -0
  92. package/dist/server/transports/index.d.ts +9 -0
  93. package/dist/server/transports/index.d.ts.map +1 -0
  94. package/dist/server/transports/index.js +9 -0
  95. package/dist/server/transports/index.js.map +1 -0
  96. package/dist/server/transports/session-manager.d.ts +40 -0
  97. package/dist/server/transports/session-manager.d.ts.map +1 -0
  98. package/dist/server/transports/session-manager.js +74 -0
  99. package/dist/server/transports/session-manager.js.map +1 -0
  100. package/dist/server/types.d.ts +82 -0
  101. package/dist/server/types.d.ts.map +1 -0
  102. package/dist/server/types.js +14 -0
  103. package/dist/server/types.js.map +1 -0
  104. package/dist/services/audit.d.ts +26 -0
  105. package/dist/services/audit.d.ts.map +1 -0
  106. package/dist/services/audit.js +43 -0
  107. package/dist/services/audit.js.map +1 -0
  108. package/dist/services/chunking/chunk-deduplicator.d.ts +33 -0
  109. package/dist/services/chunking/chunk-deduplicator.d.ts.map +1 -0
  110. package/dist/services/chunking/chunk-deduplicator.js +46 -0
  111. package/dist/services/chunking/chunk-deduplicator.js.map +1 -0
  112. package/dist/services/chunking/chunk-merger.d.ts +26 -0
  113. package/dist/services/chunking/chunk-merger.d.ts.map +1 -0
  114. package/dist/services/chunking/chunk-merger.js +94 -0
  115. package/dist/services/chunking/chunk-merger.js.map +1 -0
  116. package/dist/services/chunking/chunker.d.ts +62 -0
  117. package/dist/services/chunking/chunker.d.ts.map +1 -0
  118. package/dist/services/chunking/chunker.js +566 -0
  119. package/dist/services/chunking/chunker.js.map +1 -0
  120. package/dist/services/chunking/heading-normalizer.d.ts +33 -0
  121. package/dist/services/chunking/heading-normalizer.d.ts.map +1 -0
  122. package/dist/services/chunking/heading-normalizer.js +101 -0
  123. package/dist/services/chunking/heading-normalizer.js.map +1 -0
  124. package/dist/services/chunking/json-block-analyzer.d.ts +163 -0
  125. package/dist/services/chunking/json-block-analyzer.d.ts.map +1 -0
  126. package/dist/services/chunking/json-block-analyzer.js +1033 -0
  127. package/dist/services/chunking/json-block-analyzer.js.map +1 -0
  128. package/dist/services/chunking/markdown-parser.d.ts +75 -0
  129. package/dist/services/chunking/markdown-parser.d.ts.map +1 -0
  130. package/dist/services/chunking/markdown-parser.js +428 -0
  131. package/dist/services/chunking/markdown-parser.js.map +1 -0
  132. package/dist/services/chunking/text-normalizer.d.ts +20 -0
  133. package/dist/services/chunking/text-normalizer.d.ts.map +1 -0
  134. package/dist/services/chunking/text-normalizer.js +36 -0
  135. package/dist/services/chunking/text-normalizer.js.map +1 -0
  136. package/dist/services/clm/contract-schemas.d.ts +36 -0
  137. package/dist/services/clm/contract-schemas.d.ts.map +1 -0
  138. package/dist/services/clm/contract-schemas.js +92 -0
  139. package/dist/services/clm/contract-schemas.js.map +1 -0
  140. package/dist/services/clm/summarization.d.ts +46 -0
  141. package/dist/services/clm/summarization.d.ts.map +1 -0
  142. package/dist/services/clm/summarization.js +61 -0
  143. package/dist/services/clm/summarization.js.map +1 -0
  144. package/dist/services/clustering/clustering-service.d.ts +58 -0
  145. package/dist/services/clustering/clustering-service.d.ts.map +1 -0
  146. package/dist/services/clustering/clustering-service.js +467 -0
  147. package/dist/services/clustering/clustering-service.js.map +1 -0
  148. package/dist/services/comparison/diff-service.d.ts +41 -0
  149. package/dist/services/comparison/diff-service.d.ts.map +1 -0
  150. package/dist/services/comparison/diff-service.js +120 -0
  151. package/dist/services/comparison/diff-service.js.map +1 -0
  152. package/dist/services/embedding/embedder.d.ts +55 -0
  153. package/dist/services/embedding/embedder.d.ts.map +1 -0
  154. package/dist/services/embedding/embedder.js +202 -0
  155. package/dist/services/embedding/embedder.js.map +1 -0
  156. package/dist/services/embedding/nomic.d.ts +67 -0
  157. package/dist/services/embedding/nomic.d.ts.map +1 -0
  158. package/dist/services/embedding/nomic.js +280 -0
  159. package/dist/services/embedding/nomic.js.map +1 -0
  160. package/dist/services/gemini/circuit-breaker.d.ts +106 -0
  161. package/dist/services/gemini/circuit-breaker.d.ts.map +1 -0
  162. package/dist/services/gemini/circuit-breaker.js +237 -0
  163. package/dist/services/gemini/circuit-breaker.js.map +1 -0
  164. package/dist/services/gemini/client.d.ts +173 -0
  165. package/dist/services/gemini/client.d.ts.map +1 -0
  166. package/dist/services/gemini/client.js +483 -0
  167. package/dist/services/gemini/client.js.map +1 -0
  168. package/dist/services/gemini/config.d.ts +116 -0
  169. package/dist/services/gemini/config.d.ts.map +1 -0
  170. package/dist/services/gemini/config.js +118 -0
  171. package/dist/services/gemini/config.js.map +1 -0
  172. package/dist/services/gemini/index.d.ts +9 -0
  173. package/dist/services/gemini/index.d.ts.map +1 -0
  174. package/dist/services/gemini/index.js +13 -0
  175. package/dist/services/gemini/index.js.map +1 -0
  176. package/dist/services/gemini/rate-limiter.d.ts +62 -0
  177. package/dist/services/gemini/rate-limiter.d.ts.map +1 -0
  178. package/dist/services/gemini/rate-limiter.js +120 -0
  179. package/dist/services/gemini/rate-limiter.js.map +1 -0
  180. package/dist/services/images/extractor.d.ts +88 -0
  181. package/dist/services/images/extractor.d.ts.map +1 -0
  182. package/dist/services/images/extractor.js +340 -0
  183. package/dist/services/images/extractor.js.map +1 -0
  184. package/dist/services/images/optimizer.d.ts +130 -0
  185. package/dist/services/images/optimizer.d.ts.map +1 -0
  186. package/dist/services/images/optimizer.js +228 -0
  187. package/dist/services/images/optimizer.js.map +1 -0
  188. package/dist/services/ocr/datalab.d.ts +64 -0
  189. package/dist/services/ocr/datalab.d.ts.map +1 -0
  190. package/dist/services/ocr/datalab.js +425 -0
  191. package/dist/services/ocr/datalab.js.map +1 -0
  192. package/dist/services/ocr/errors.d.ts +38 -0
  193. package/dist/services/ocr/errors.d.ts.map +1 -0
  194. package/dist/services/ocr/errors.js +83 -0
  195. package/dist/services/ocr/errors.js.map +1 -0
  196. package/dist/services/ocr/file-manager.d.ts +76 -0
  197. package/dist/services/ocr/file-manager.d.ts.map +1 -0
  198. package/dist/services/ocr/file-manager.js +238 -0
  199. package/dist/services/ocr/file-manager.js.map +1 -0
  200. package/dist/services/ocr/form-fill.d.ts +48 -0
  201. package/dist/services/ocr/form-fill.d.ts.map +1 -0
  202. package/dist/services/ocr/form-fill.js +213 -0
  203. package/dist/services/ocr/form-fill.js.map +1 -0
  204. package/dist/services/ocr/processor.d.ts +95 -0
  205. package/dist/services/ocr/processor.d.ts.map +1 -0
  206. package/dist/services/ocr/processor.js +259 -0
  207. package/dist/services/ocr/processor.js.map +1 -0
  208. package/dist/services/provenance/agent-metadata.d.ts +82 -0
  209. package/dist/services/provenance/agent-metadata.d.ts.map +1 -0
  210. package/dist/services/provenance/agent-metadata.js +106 -0
  211. package/dist/services/provenance/agent-metadata.js.map +1 -0
  212. package/dist/services/provenance/chain-hash.d.ts +57 -0
  213. package/dist/services/provenance/chain-hash.d.ts.map +1 -0
  214. package/dist/services/provenance/chain-hash.js +131 -0
  215. package/dist/services/provenance/chain-hash.js.map +1 -0
  216. package/dist/services/provenance/exporter.d.ts +202 -0
  217. package/dist/services/provenance/exporter.d.ts.map +1 -0
  218. package/dist/services/provenance/exporter.js +457 -0
  219. package/dist/services/provenance/exporter.js.map +1 -0
  220. package/dist/services/provenance/index.d.ts +15 -0
  221. package/dist/services/provenance/index.d.ts.map +1 -0
  222. package/dist/services/provenance/index.js +17 -0
  223. package/dist/services/provenance/index.js.map +1 -0
  224. package/dist/services/provenance/tracker.d.ts +138 -0
  225. package/dist/services/provenance/tracker.d.ts.map +1 -0
  226. package/dist/services/provenance/tracker.js +293 -0
  227. package/dist/services/provenance/tracker.js.map +1 -0
  228. package/dist/services/provenance/verifier.d.ts +153 -0
  229. package/dist/services/provenance/verifier.d.ts.map +1 -0
  230. package/dist/services/provenance/verifier.js +536 -0
  231. package/dist/services/provenance/verifier.js.map +1 -0
  232. package/dist/services/python-pool.d.ts +70 -0
  233. package/dist/services/python-pool.d.ts.map +1 -0
  234. package/dist/services/python-pool.js +265 -0
  235. package/dist/services/python-pool.js.map +1 -0
  236. package/dist/services/search/bm25.d.ts +180 -0
  237. package/dist/services/search/bm25.d.ts.map +1 -0
  238. package/dist/services/search/bm25.js +656 -0
  239. package/dist/services/search/bm25.js.map +1 -0
  240. package/dist/services/search/fusion.d.ts +103 -0
  241. package/dist/services/search/fusion.d.ts.map +1 -0
  242. package/dist/services/search/fusion.js +122 -0
  243. package/dist/services/search/fusion.js.map +1 -0
  244. package/dist/services/search/local-reranker.d.ts +30 -0
  245. package/dist/services/search/local-reranker.d.ts.map +1 -0
  246. package/dist/services/search/local-reranker.js +123 -0
  247. package/dist/services/search/local-reranker.js.map +1 -0
  248. package/dist/services/search/quality.d.ts +11 -0
  249. package/dist/services/search/quality.d.ts.map +1 -0
  250. package/dist/services/search/quality.js +17 -0
  251. package/dist/services/search/quality.js.map +1 -0
  252. package/dist/services/search/query-classifier.d.ts +34 -0
  253. package/dist/services/search/query-classifier.d.ts.map +1 -0
  254. package/dist/services/search/query-classifier.js +114 -0
  255. package/dist/services/search/query-classifier.js.map +1 -0
  256. package/dist/services/search/query-expander.d.ts +73 -0
  257. package/dist/services/search/query-expander.d.ts.map +1 -0
  258. package/dist/services/search/query-expander.js +281 -0
  259. package/dist/services/search/query-expander.js.map +1 -0
  260. package/dist/services/search/reranker.d.ts +44 -0
  261. package/dist/services/search/reranker.d.ts.map +1 -0
  262. package/dist/services/search/reranker.js +101 -0
  263. package/dist/services/search/reranker.js.map +1 -0
  264. package/dist/services/storage/database/annotation-operations.d.ts +113 -0
  265. package/dist/services/storage/database/annotation-operations.d.ts.map +1 -0
  266. package/dist/services/storage/database/annotation-operations.js +177 -0
  267. package/dist/services/storage/database/annotation-operations.js.map +1 -0
  268. package/dist/services/storage/database/approval-operations.d.ts +132 -0
  269. package/dist/services/storage/database/approval-operations.d.ts.map +1 -0
  270. package/dist/services/storage/database/approval-operations.js +206 -0
  271. package/dist/services/storage/database/approval-operations.js.map +1 -0
  272. package/dist/services/storage/database/chunk-operations.d.ts +132 -0
  273. package/dist/services/storage/database/chunk-operations.d.ts.map +1 -0
  274. package/dist/services/storage/database/chunk-operations.js +306 -0
  275. package/dist/services/storage/database/chunk-operations.js.map +1 -0
  276. package/dist/services/storage/database/cluster-operations.d.ts +97 -0
  277. package/dist/services/storage/database/cluster-operations.d.ts.map +1 -0
  278. package/dist/services/storage/database/cluster-operations.js +258 -0
  279. package/dist/services/storage/database/cluster-operations.js.map +1 -0
  280. package/dist/services/storage/database/comparison-operations.d.ts +41 -0
  281. package/dist/services/storage/database/comparison-operations.d.ts.map +1 -0
  282. package/dist/services/storage/database/comparison-operations.js +65 -0
  283. package/dist/services/storage/database/comparison-operations.js.map +1 -0
  284. package/dist/services/storage/database/converters.d.ts +36 -0
  285. package/dist/services/storage/database/converters.d.ts.map +1 -0
  286. package/dist/services/storage/database/converters.js +244 -0
  287. package/dist/services/storage/database/converters.js.map +1 -0
  288. package/dist/services/storage/database/document-operations.d.ts +145 -0
  289. package/dist/services/storage/database/document-operations.d.ts.map +1 -0
  290. package/dist/services/storage/database/document-operations.js +498 -0
  291. package/dist/services/storage/database/document-operations.js.map +1 -0
  292. package/dist/services/storage/database/embedding-operations.d.ts +130 -0
  293. package/dist/services/storage/database/embedding-operations.d.ts.map +1 -0
  294. package/dist/services/storage/database/embedding-operations.js +315 -0
  295. package/dist/services/storage/database/embedding-operations.js.map +1 -0
  296. package/dist/services/storage/database/extraction-operations.d.ts +47 -0
  297. package/dist/services/storage/database/extraction-operations.d.ts.map +1 -0
  298. package/dist/services/storage/database/extraction-operations.js +85 -0
  299. package/dist/services/storage/database/extraction-operations.js.map +1 -0
  300. package/dist/services/storage/database/form-fill-operations.d.ts +58 -0
  301. package/dist/services/storage/database/form-fill-operations.d.ts.map +1 -0
  302. package/dist/services/storage/database/form-fill-operations.js +116 -0
  303. package/dist/services/storage/database/form-fill-operations.js.map +1 -0
  304. package/dist/services/storage/database/helpers.d.ts +29 -0
  305. package/dist/services/storage/database/helpers.d.ts.map +1 -0
  306. package/dist/services/storage/database/helpers.js +55 -0
  307. package/dist/services/storage/database/helpers.js.map +1 -0
  308. package/dist/services/storage/database/image-operations.d.ts +202 -0
  309. package/dist/services/storage/database/image-operations.d.ts.map +1 -0
  310. package/dist/services/storage/database/image-operations.js +484 -0
  311. package/dist/services/storage/database/image-operations.js.map +1 -0
  312. package/dist/services/storage/database/index.d.ts +13 -0
  313. package/dist/services/storage/database/index.d.ts.map +1 -0
  314. package/dist/services/storage/database/index.js +16 -0
  315. package/dist/services/storage/database/index.js.map +1 -0
  316. package/dist/services/storage/database/lock-operations.d.ts +59 -0
  317. package/dist/services/storage/database/lock-operations.d.ts.map +1 -0
  318. package/dist/services/storage/database/lock-operations.js +89 -0
  319. package/dist/services/storage/database/lock-operations.js.map +1 -0
  320. package/dist/services/storage/database/obligation-operations.d.ts +88 -0
  321. package/dist/services/storage/database/obligation-operations.d.ts.map +1 -0
  322. package/dist/services/storage/database/obligation-operations.js +206 -0
  323. package/dist/services/storage/database/obligation-operations.js.map +1 -0
  324. package/dist/services/storage/database/ocr-operations.d.ts +33 -0
  325. package/dist/services/storage/database/ocr-operations.d.ts.map +1 -0
  326. package/dist/services/storage/database/ocr-operations.js +70 -0
  327. package/dist/services/storage/database/ocr-operations.js.map +1 -0
  328. package/dist/services/storage/database/playbook-operations.d.ts +72 -0
  329. package/dist/services/storage/database/playbook-operations.d.ts.map +1 -0
  330. package/dist/services/storage/database/playbook-operations.js +247 -0
  331. package/dist/services/storage/database/playbook-operations.js.map +1 -0
  332. package/dist/services/storage/database/provenance-operations.d.ts +112 -0
  333. package/dist/services/storage/database/provenance-operations.d.ts.map +1 -0
  334. package/dist/services/storage/database/provenance-operations.js +251 -0
  335. package/dist/services/storage/database/provenance-operations.js.map +1 -0
  336. package/dist/services/storage/database/service.d.ts +142 -0
  337. package/dist/services/storage/database/service.d.ts.map +1 -0
  338. package/dist/services/storage/database/service.js +310 -0
  339. package/dist/services/storage/database/service.js.map +1 -0
  340. package/dist/services/storage/database/static-operations.d.ts +30 -0
  341. package/dist/services/storage/database/static-operations.d.ts.map +1 -0
  342. package/dist/services/storage/database/static-operations.js +218 -0
  343. package/dist/services/storage/database/static-operations.js.map +1 -0
  344. package/dist/services/storage/database/stats-operations.d.ts +101 -0
  345. package/dist/services/storage/database/stats-operations.d.ts.map +1 -0
  346. package/dist/services/storage/database/stats-operations.js +394 -0
  347. package/dist/services/storage/database/stats-operations.js.map +1 -0
  348. package/dist/services/storage/database/tag-operations.d.ts +76 -0
  349. package/dist/services/storage/database/tag-operations.d.ts.map +1 -0
  350. package/dist/services/storage/database/tag-operations.js +178 -0
  351. package/dist/services/storage/database/tag-operations.js.map +1 -0
  352. package/dist/services/storage/database/types.d.ts +286 -0
  353. package/dist/services/storage/database/types.d.ts.map +1 -0
  354. package/dist/services/storage/database/types.js +39 -0
  355. package/dist/services/storage/database/types.js.map +1 -0
  356. package/dist/services/storage/database/upload-operations.d.ts +71 -0
  357. package/dist/services/storage/database/upload-operations.d.ts.map +1 -0
  358. package/dist/services/storage/database/upload-operations.js +124 -0
  359. package/dist/services/storage/database/upload-operations.js.map +1 -0
  360. package/dist/services/storage/database/user-operations.d.ts +102 -0
  361. package/dist/services/storage/database/user-operations.d.ts.map +1 -0
  362. package/dist/services/storage/database/user-operations.js +151 -0
  363. package/dist/services/storage/database/user-operations.js.map +1 -0
  364. package/dist/services/storage/database/workflow-operations.d.ts +98 -0
  365. package/dist/services/storage/database/workflow-operations.d.ts.map +1 -0
  366. package/dist/services/storage/database/workflow-operations.js +157 -0
  367. package/dist/services/storage/database/workflow-operations.js.map +1 -0
  368. package/dist/services/storage/database.d.ts +16 -0
  369. package/dist/services/storage/database.d.ts.map +1 -0
  370. package/dist/services/storage/database.js +15 -0
  371. package/dist/services/storage/database.js.map +1 -0
  372. package/dist/services/storage/index.d.ts +10 -0
  373. package/dist/services/storage/index.d.ts.map +1 -0
  374. package/dist/services/storage/index.js +10 -0
  375. package/dist/services/storage/index.js.map +1 -0
  376. package/dist/services/storage/migrations/index.d.ts +16 -0
  377. package/dist/services/storage/migrations/index.d.ts.map +1 -0
  378. package/dist/services/storage/migrations/index.js +20 -0
  379. package/dist/services/storage/migrations/index.js.map +1 -0
  380. package/dist/services/storage/migrations/operations.d.ts +40 -0
  381. package/dist/services/storage/migrations/operations.d.ts.map +1 -0
  382. package/dist/services/storage/migrations/operations.js +2910 -0
  383. package/dist/services/storage/migrations/operations.js.map +1 -0
  384. package/dist/services/storage/migrations/schema-definitions.d.ts +306 -0
  385. package/dist/services/storage/migrations/schema-definitions.d.ts.map +1 -0
  386. package/dist/services/storage/migrations/schema-definitions.js +1006 -0
  387. package/dist/services/storage/migrations/schema-definitions.js.map +1 -0
  388. package/dist/services/storage/migrations/schema-helpers.d.ts +50 -0
  389. package/dist/services/storage/migrations/schema-helpers.d.ts.map +1 -0
  390. package/dist/services/storage/migrations/schema-helpers.js +176 -0
  391. package/dist/services/storage/migrations/schema-helpers.js.map +1 -0
  392. package/dist/services/storage/migrations/types.d.ts +15 -0
  393. package/dist/services/storage/migrations/types.d.ts.map +1 -0
  394. package/dist/services/storage/migrations/types.js +21 -0
  395. package/dist/services/storage/migrations/types.js.map +1 -0
  396. package/dist/services/storage/migrations/verification.d.ts +20 -0
  397. package/dist/services/storage/migrations/verification.d.ts.map +1 -0
  398. package/dist/services/storage/migrations/verification.js +78 -0
  399. package/dist/services/storage/migrations/verification.js.map +1 -0
  400. package/dist/services/storage/migrations.d.ts +16 -0
  401. package/dist/services/storage/migrations.d.ts.map +1 -0
  402. package/dist/services/storage/migrations.js +17 -0
  403. package/dist/services/storage/migrations.js.map +1 -0
  404. package/dist/services/storage/types.d.ts +12 -0
  405. package/dist/services/storage/types.d.ts.map +1 -0
  406. package/dist/services/storage/types.js +5 -0
  407. package/dist/services/storage/types.js.map +1 -0
  408. package/dist/services/storage/vector.d.ts +208 -0
  409. package/dist/services/storage/vector.d.ts.map +1 -0
  410. package/dist/services/storage/vector.js +526 -0
  411. package/dist/services/storage/vector.js.map +1 -0
  412. package/dist/services/vlm/pipeline.d.ts +194 -0
  413. package/dist/services/vlm/pipeline.d.ts.map +1 -0
  414. package/dist/services/vlm/pipeline.js +800 -0
  415. package/dist/services/vlm/pipeline.js.map +1 -0
  416. package/dist/services/vlm/prompts.d.ts +171 -0
  417. package/dist/services/vlm/prompts.d.ts.map +1 -0
  418. package/dist/services/vlm/prompts.js +229 -0
  419. package/dist/services/vlm/prompts.js.map +1 -0
  420. package/dist/services/vlm/service.d.ts +174 -0
  421. package/dist/services/vlm/service.d.ts.map +1 -0
  422. package/dist/services/vlm/service.js +256 -0
  423. package/dist/services/vlm/service.js.map +1 -0
  424. package/dist/services/webhook-delivery.d.ts +4 -0
  425. package/dist/services/webhook-delivery.d.ts.map +1 -0
  426. package/dist/services/webhook-delivery.js +140 -0
  427. package/dist/services/webhook-delivery.js.map +1 -0
  428. package/dist/tools/chunks.d.ts +19 -0
  429. package/dist/tools/chunks.d.ts.map +1 -0
  430. package/dist/tools/chunks.js +392 -0
  431. package/dist/tools/chunks.js.map +1 -0
  432. package/dist/tools/clm.d.ts +16 -0
  433. package/dist/tools/clm.d.ts.map +1 -0
  434. package/dist/tools/clm.js +668 -0
  435. package/dist/tools/clm.js.map +1 -0
  436. package/dist/tools/clustering.d.ts +13 -0
  437. package/dist/tools/clustering.d.ts.map +1 -0
  438. package/dist/tools/clustering.js +498 -0
  439. package/dist/tools/clustering.js.map +1 -0
  440. package/dist/tools/collaboration.d.ts +15 -0
  441. package/dist/tools/collaboration.d.ts.map +1 -0
  442. package/dist/tools/collaboration.js +516 -0
  443. package/dist/tools/collaboration.js.map +1 -0
  444. package/dist/tools/comparison.d.ts +13 -0
  445. package/dist/tools/comparison.d.ts.map +1 -0
  446. package/dist/tools/comparison.js +735 -0
  447. package/dist/tools/comparison.js.map +1 -0
  448. package/dist/tools/compliance.d.ts +15 -0
  449. package/dist/tools/compliance.d.ts.map +1 -0
  450. package/dist/tools/compliance.js +640 -0
  451. package/dist/tools/compliance.js.map +1 -0
  452. package/dist/tools/config.d.ts +19 -0
  453. package/dist/tools/config.d.ts.map +1 -0
  454. package/dist/tools/config.js +213 -0
  455. package/dist/tools/config.js.map +1 -0
  456. package/dist/tools/database.d.ts +62 -0
  457. package/dist/tools/database.d.ts.map +1 -0
  458. package/dist/tools/database.js +288 -0
  459. package/dist/tools/database.js.map +1 -0
  460. package/dist/tools/documents.d.ts +61 -0
  461. package/dist/tools/documents.d.ts.map +1 -0
  462. package/dist/tools/documents.js +1624 -0
  463. package/dist/tools/documents.js.map +1 -0
  464. package/dist/tools/embeddings.d.ts +14 -0
  465. package/dist/tools/embeddings.d.ts.map +1 -0
  466. package/dist/tools/embeddings.js +626 -0
  467. package/dist/tools/embeddings.js.map +1 -0
  468. package/dist/tools/evaluation.d.ts +25 -0
  469. package/dist/tools/evaluation.d.ts.map +1 -0
  470. package/dist/tools/evaluation.js +523 -0
  471. package/dist/tools/evaluation.js.map +1 -0
  472. package/dist/tools/events.d.ts +16 -0
  473. package/dist/tools/events.d.ts.map +1 -0
  474. package/dist/tools/events.js +493 -0
  475. package/dist/tools/events.js.map +1 -0
  476. package/dist/tools/extraction-structured.d.ts +13 -0
  477. package/dist/tools/extraction-structured.d.ts.map +1 -0
  478. package/dist/tools/extraction-structured.js +390 -0
  479. package/dist/tools/extraction-structured.js.map +1 -0
  480. package/dist/tools/extraction.d.ts +24 -0
  481. package/dist/tools/extraction.d.ts.map +1 -0
  482. package/dist/tools/extraction.js +424 -0
  483. package/dist/tools/extraction.js.map +1 -0
  484. package/dist/tools/file-management.d.ts +14 -0
  485. package/dist/tools/file-management.d.ts.map +1 -0
  486. package/dist/tools/file-management.js +523 -0
  487. package/dist/tools/file-management.js.map +1 -0
  488. package/dist/tools/form-fill.d.ts +13 -0
  489. package/dist/tools/form-fill.d.ts.map +1 -0
  490. package/dist/tools/form-fill.js +250 -0
  491. package/dist/tools/form-fill.js.map +1 -0
  492. package/dist/tools/health.d.ts +19 -0
  493. package/dist/tools/health.d.ts.map +1 -0
  494. package/dist/tools/health.js +229 -0
  495. package/dist/tools/health.js.map +1 -0
  496. package/dist/tools/images.d.ts +54 -0
  497. package/dist/tools/images.d.ts.map +1 -0
  498. package/dist/tools/images.js +787 -0
  499. package/dist/tools/images.js.map +1 -0
  500. package/dist/tools/ingestion.d.ts +94 -0
  501. package/dist/tools/ingestion.d.ts.map +1 -0
  502. package/dist/tools/ingestion.js +1659 -0
  503. package/dist/tools/ingestion.js.map +1 -0
  504. package/dist/tools/intelligence.d.ts +18 -0
  505. package/dist/tools/intelligence.d.ts.map +1 -0
  506. package/dist/tools/intelligence.js +1039 -0
  507. package/dist/tools/intelligence.js.map +1 -0
  508. package/dist/tools/provenance.d.ts +51 -0
  509. package/dist/tools/provenance.d.ts.map +1 -0
  510. package/dist/tools/provenance.js +691 -0
  511. package/dist/tools/provenance.js.map +1 -0
  512. package/dist/tools/reports.d.ts +41 -0
  513. package/dist/tools/reports.d.ts.map +1 -0
  514. package/dist/tools/reports.js +1394 -0
  515. package/dist/tools/reports.js.map +1 -0
  516. package/dist/tools/search.d.ts +35 -0
  517. package/dist/tools/search.d.ts.map +1 -0
  518. package/dist/tools/search.js +2528 -0
  519. package/dist/tools/search.js.map +1 -0
  520. package/dist/tools/shared.d.ts +52 -0
  521. package/dist/tools/shared.d.ts.map +1 -0
  522. package/dist/tools/shared.js +54 -0
  523. package/dist/tools/shared.js.map +1 -0
  524. package/dist/tools/tags.d.ts +15 -0
  525. package/dist/tools/tags.d.ts.map +1 -0
  526. package/dist/tools/tags.js +287 -0
  527. package/dist/tools/tags.js.map +1 -0
  528. package/dist/tools/timeline.d.ts +15 -0
  529. package/dist/tools/timeline.d.ts.map +1 -0
  530. package/dist/tools/timeline.js +14 -0
  531. package/dist/tools/timeline.js.map +1 -0
  532. package/dist/tools/users.d.ts +14 -0
  533. package/dist/tools/users.d.ts.map +1 -0
  534. package/dist/tools/users.js +257 -0
  535. package/dist/tools/users.js.map +1 -0
  536. package/dist/tools/vlm.d.ts +40 -0
  537. package/dist/tools/vlm.d.ts.map +1 -0
  538. package/dist/tools/vlm.js +475 -0
  539. package/dist/tools/vlm.js.map +1 -0
  540. package/dist/tools/workflow.d.ts +16 -0
  541. package/dist/tools/workflow.d.ts.map +1 -0
  542. package/dist/tools/workflow.js +495 -0
  543. package/dist/tools/workflow.js.map +1 -0
  544. package/dist/utils/backoff.d.ts +53 -0
  545. package/dist/utils/backoff.d.ts.map +1 -0
  546. package/dist/utils/backoff.js +78 -0
  547. package/dist/utils/backoff.js.map +1 -0
  548. package/dist/utils/config-persistence.d.ts +33 -0
  549. package/dist/utils/config-persistence.d.ts.map +1 -0
  550. package/dist/utils/config-persistence.js +61 -0
  551. package/dist/utils/config-persistence.js.map +1 -0
  552. package/dist/utils/hash.d.ts +65 -0
  553. package/dist/utils/hash.d.ts.map +1 -0
  554. package/dist/utils/hash.js +146 -0
  555. package/dist/utils/hash.js.map +1 -0
  556. package/dist/utils/math.d.ts +21 -0
  557. package/dist/utils/math.d.ts.map +1 -0
  558. package/dist/utils/math.js +39 -0
  559. package/dist/utils/math.js.map +1 -0
  560. package/dist/utils/validation.d.ts +697 -0
  561. package/dist/utils/validation.d.ts.map +1 -0
  562. package/dist/utils/validation.js +529 -0
  563. package/dist/utils/validation.js.map +1 -0
  564. package/package.json +96 -0
  565. package/python/.gitkeep +0 -0
  566. package/python/__init__.py +104 -0
  567. package/python/clustering_worker.py +440 -0
  568. package/python/docx_image_extractor.py +524 -0
  569. package/python/embedding_worker.py +552 -0
  570. package/python/file_manager_worker.py +564 -0
  571. package/python/form_fill_worker.py +399 -0
  572. package/python/gpu_utils.py +582 -0
  573. package/python/image_extractor.py +317 -0
  574. package/python/image_optimizer.py +444 -0
  575. package/python/ocr_worker.py +712 -0
  576. package/python/pyproject.toml +76 -0
  577. package/python/requirements.txt +51 -0
  578. package/python/reranker_worker.py +87 -0
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Form fill operations for DatabaseService
3
+ *
4
+ * Handles all CRUD operations for form fill results
5
+ * from the Datalab /fill API.
6
+ */
7
+ import Database from 'better-sqlite3';
8
+ import { FormFill } from '../../../models/form-fill.js';
9
+ /**
10
+ * Insert a form fill record
11
+ *
12
+ * @param db - Database connection
13
+ * @param formFill - Form fill data
14
+ * @param updateMetadataCounts - Callback to update metadata counts
15
+ * @returns string - The form fill ID
16
+ */
17
+ export declare function insertFormFill(db: Database.Database, formFill: FormFill, updateMetadataCounts: () => void): string;
18
+ /**
19
+ * Get a form fill by ID
20
+ *
21
+ * @param db - Database connection
22
+ * @param id - Form fill ID
23
+ * @returns FormFill | null - The form fill or null if not found
24
+ */
25
+ export declare function getFormFill(db: Database.Database, id: string): FormFill | null;
26
+ /**
27
+ * List form fills with optional filtering
28
+ *
29
+ * @param db - Database connection
30
+ * @param options - Optional filter options (status, limit, offset)
31
+ * @returns FormFill[] - Array of form fills
32
+ */
33
+ export declare function listFormFills(db: Database.Database, options?: {
34
+ status?: string;
35
+ limit?: number;
36
+ offset?: number;
37
+ }): FormFill[];
38
+ /**
39
+ * Search form fills by field values using LIKE matching on field_data_json
40
+ *
41
+ * @param db - Database connection
42
+ * @param query - Search query string
43
+ * @param options - Optional filter options (limit, offset)
44
+ * @returns FormFill[] - Matching form fills
45
+ */
46
+ export declare function searchFormFills(db: Database.Database, query: string, options?: {
47
+ limit?: number;
48
+ offset?: number;
49
+ }): FormFill[];
50
+ /**
51
+ * Delete a form fill record
52
+ *
53
+ * @param db - Database connection
54
+ * @param id - Form fill ID
55
+ * @returns boolean - true if a record was deleted
56
+ */
57
+ export declare function deleteFormFill(db: Database.Database, id: string): boolean;
58
+ //# sourceMappingURL=form-fill-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-fill-operations.d.ts","sourceRoot":"","sources":["../../../../src/services/storage/database/form-fill-operations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAIxD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,EAAE,MAAM,IAAI,GAC/B,MAAM,CAmCR;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAI9E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D,QAAQ,EAAE,CAyBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,QAAQ,EAAE,CAeZ;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAEzE"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Form fill operations for DatabaseService
3
+ *
4
+ * Handles all CRUD operations for form fill results
5
+ * from the Datalab /fill API.
6
+ */
7
+ import { runWithForeignKeyCheck } from './helpers.js';
8
+ import { escapeLikePattern } from '../../../utils/validation.js';
9
+ /**
10
+ * Insert a form fill record
11
+ *
12
+ * @param db - Database connection
13
+ * @param formFill - Form fill data
14
+ * @param updateMetadataCounts - Callback to update metadata counts
15
+ * @returns string - The form fill ID
16
+ */
17
+ export function insertFormFill(db, formFill, updateMetadataCounts) {
18
+ const stmt = db.prepare(`
19
+ INSERT INTO form_fills (
20
+ id, source_file_path, source_file_hash, field_data_json, context,
21
+ confidence_threshold, output_file_path, output_base64, fields_filled,
22
+ fields_not_found, page_count, cost_cents, status, error_message,
23
+ provenance_id, created_at
24
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
25
+ `);
26
+ runWithForeignKeyCheck(stmt, [
27
+ formFill.id,
28
+ formFill.source_file_path,
29
+ formFill.source_file_hash,
30
+ formFill.field_data_json,
31
+ formFill.context,
32
+ formFill.confidence_threshold,
33
+ formFill.output_file_path,
34
+ formFill.output_base64,
35
+ formFill.fields_filled,
36
+ formFill.fields_not_found,
37
+ formFill.page_count,
38
+ formFill.cost_cents,
39
+ formFill.status,
40
+ formFill.error_message,
41
+ formFill.provenance_id,
42
+ formFill.created_at,
43
+ ], `inserting form fill: FK violation for provenance_id="${formFill.provenance_id}"`);
44
+ updateMetadataCounts();
45
+ return formFill.id;
46
+ }
47
+ /**
48
+ * Get a form fill by ID
49
+ *
50
+ * @param db - Database connection
51
+ * @param id - Form fill ID
52
+ * @returns FormFill | null - The form fill or null if not found
53
+ */
54
+ export function getFormFill(db, id) {
55
+ return (db.prepare('SELECT * FROM form_fills WHERE id = ?').get(id) ?? null);
56
+ }
57
+ /**
58
+ * List form fills with optional filtering
59
+ *
60
+ * @param db - Database connection
61
+ * @param options - Optional filter options (status, limit, offset)
62
+ * @returns FormFill[] - Array of form fills
63
+ */
64
+ export function listFormFills(db, options) {
65
+ let query = 'SELECT * FROM form_fills';
66
+ const params = [];
67
+ if (options?.status) {
68
+ query += ' WHERE status = ?';
69
+ params.push(options.status);
70
+ }
71
+ query += ' ORDER BY created_at DESC';
72
+ if (options?.limit !== undefined) {
73
+ query += ' LIMIT ?';
74
+ params.push(options.limit);
75
+ }
76
+ if (options?.offset !== undefined) {
77
+ if (options?.limit === undefined) {
78
+ query += ' LIMIT 10000'; // bounded default
79
+ }
80
+ query += ' OFFSET ?';
81
+ params.push(options.offset);
82
+ }
83
+ return db.prepare(query).all(...params);
84
+ }
85
+ /**
86
+ * Search form fills by field values using LIKE matching on field_data_json
87
+ *
88
+ * @param db - Database connection
89
+ * @param query - Search query string
90
+ * @param options - Optional filter options (limit, offset)
91
+ * @returns FormFill[] - Matching form fills
92
+ */
93
+ export function searchFormFills(db, query, options) {
94
+ const limit = options?.limit ?? 50;
95
+ const offset = options?.offset ?? 0;
96
+ const escaped = escapeLikePattern(query);
97
+ return db
98
+ .prepare(`
99
+ SELECT * FROM form_fills
100
+ WHERE field_data_json LIKE ? ESCAPE '\\' OR fields_filled LIKE ? ESCAPE '\\' OR source_file_path LIKE ? ESCAPE '\\'
101
+ ORDER BY created_at DESC
102
+ LIMIT ? OFFSET ?
103
+ `)
104
+ .all(`%${escaped}%`, `%${escaped}%`, `%${escaped}%`, limit, offset);
105
+ }
106
+ /**
107
+ * Delete a form fill record
108
+ *
109
+ * @param db - Database connection
110
+ * @param id - Form fill ID
111
+ * @returns boolean - true if a record was deleted
112
+ */
113
+ export function deleteFormFill(db, id) {
114
+ return db.prepare('DELETE FROM form_fills WHERE id = ?').run(id).changes > 0;
115
+ }
116
+ //# sourceMappingURL=form-fill-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-fill-operations.js","sourceRoot":"","sources":["../../../../src/services/storage/database/form-fill-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Helper functions for DatabaseService
3
+ *
4
+ * Contains utility functions for validation, path resolution,
5
+ * and foreign key error handling.
6
+ */
7
+ import Database from 'better-sqlite3';
8
+ /**
9
+ * Default storage path for databases
10
+ */
11
+ export declare const DEFAULT_STORAGE_PATH: string;
12
+ /**
13
+ * Validate database name format
14
+ */
15
+ export declare function validateName(name: string): void;
16
+ /**
17
+ * Get full database path
18
+ */
19
+ export declare function getDatabasePath(name: string, storagePath?: string): string;
20
+ /**
21
+ * Helper function to run a statement with foreign key error handling.
22
+ * Converts SQLite FK constraint errors to DatabaseError with proper code.
23
+ *
24
+ * @param stmt - Prepared statement to run
25
+ * @param params - Parameters to bind
26
+ * @param context - Error context message (e.g., "inserting document: provenance_id does not exist")
27
+ */
28
+ export declare function runWithForeignKeyCheck(stmt: Database.Statement, params: unknown[], context: string): Database.RunResult;
29
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/services/storage/database/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAKtC;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAA+F,CAAC;AAOjI;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAa/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAG1E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,QAAQ,CAAC,SAAS,EACxB,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,EAAE,MAAM,GACd,QAAQ,CAAC,SAAS,CAapB"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Helper functions for DatabaseService
3
+ *
4
+ * Contains utility functions for validation, path resolution,
5
+ * and foreign key error handling.
6
+ */
7
+ import { homedir } from 'os';
8
+ import { join } from 'path';
9
+ import { DatabaseError, DatabaseErrorCode } from './types.js';
10
+ /**
11
+ * Default storage path for databases
12
+ */
13
+ export const DEFAULT_STORAGE_PATH = process.env.OCR_PROVENANCE_DATABASES_PATH ?? join(homedir(), '.ocr-provenance', 'databases');
14
+ /**
15
+ * Valid database name pattern: alphanumeric, underscores, hyphens
16
+ */
17
+ const VALID_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
18
+ /**
19
+ * Validate database name format
20
+ */
21
+ export function validateName(name) {
22
+ if (!name || typeof name !== 'string') {
23
+ throw new DatabaseError('Database name is required and must be a string', DatabaseErrorCode.INVALID_NAME);
24
+ }
25
+ if (!VALID_NAME_PATTERN.test(name)) {
26
+ throw new DatabaseError(`Invalid database name "${name}". Only alphanumeric characters, underscores, and hyphens are allowed.`, DatabaseErrorCode.INVALID_NAME);
27
+ }
28
+ }
29
+ /**
30
+ * Get full database path
31
+ */
32
+ export function getDatabasePath(name, storagePath) {
33
+ const basePath = storagePath ?? DEFAULT_STORAGE_PATH;
34
+ return join(basePath, `${name}.db`);
35
+ }
36
+ /**
37
+ * Helper function to run a statement with foreign key error handling.
38
+ * Converts SQLite FK constraint errors to DatabaseError with proper code.
39
+ *
40
+ * @param stmt - Prepared statement to run
41
+ * @param params - Parameters to bind
42
+ * @param context - Error context message (e.g., "inserting document: provenance_id does not exist")
43
+ */
44
+ export function runWithForeignKeyCheck(stmt, params, context) {
45
+ try {
46
+ return stmt.run(...params);
47
+ }
48
+ catch (error) {
49
+ if (error instanceof Error && error.message.includes('FOREIGN KEY constraint failed')) {
50
+ throw new DatabaseError(`Foreign key violation ${context}`, DatabaseErrorCode.FOREIGN_KEY_VIOLATION, error);
51
+ }
52
+ throw error;
53
+ }
54
+ }
55
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/services/storage/database/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAEjI;;GAEG;AACH,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,aAAa,CACrB,gDAAgD,EAChD,iBAAiB,CAAC,YAAY,CAC/B,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,aAAa,CACrB,0BAA0B,IAAI,wEAAwE,EACtG,iBAAiB,CAAC,YAAY,CAC/B,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,WAAoB;IAChE,MAAM,QAAQ,GAAG,WAAW,IAAI,oBAAoB,CAAC;IACrD,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAwB,EACxB,MAAiB,EACjB,OAAe;IAEf,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,aAAa,CACrB,yBAAyB,OAAO,EAAE,EAClC,iBAAiB,CAAC,qBAAqB,EACvC,KAAK,CACN,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Image operations for DatabaseService
3
+ *
4
+ * Handles all CRUD operations for extracted images including
5
+ * insert, get, list, update VLM results, and delete.
6
+ */
7
+ import Database from 'better-sqlite3';
8
+ import { ImageReference, CreateImageReference, VLMResult, ImageStats } from '../../../models/image.js';
9
+ import { ListImagesOptions } from './types.js';
10
+ /**
11
+ * Insert a new image reference
12
+ *
13
+ * @param db - Database connection
14
+ * @param image - Image data (id and timestamps will be generated)
15
+ * @returns ImageReference - The created image with generated fields
16
+ */
17
+ export declare function insertImage(db: Database.Database, image: CreateImageReference): ImageReference;
18
+ /**
19
+ * Insert multiple images in a batch
20
+ *
21
+ * @param db - Database connection
22
+ * @param images - Array of image data to insert
23
+ * @returns ImageReference[] - Array of created images
24
+ */
25
+ export declare function insertImageBatch(db: Database.Database, images: CreateImageReference[]): ImageReference[];
26
+ /**
27
+ * Get an image by ID
28
+ *
29
+ * @param db - Database connection
30
+ * @param id - Image ID
31
+ * @returns ImageReference | null - The image or null if not found
32
+ */
33
+ export declare function getImage(db: Database.Database, id: string): ImageReference | null;
34
+ /**
35
+ * Get images for a document with optional filtering
36
+ *
37
+ * @param db - Database connection
38
+ * @param documentId - Document ID
39
+ * @param options - Optional filters: vlmStatus, limit
40
+ * @returns ImageReference[] - Array of images ordered by page and index
41
+ */
42
+ export declare function getImagesByDocument(db: Database.Database, documentId: string, options?: {
43
+ vlmStatus?: string;
44
+ limit?: number;
45
+ }): ImageReference[];
46
+ /**
47
+ * Get all images for an OCR result
48
+ *
49
+ * @param db - Database connection
50
+ * @param ocrResultId - OCR result ID
51
+ * @returns ImageReference[] - Array of images ordered by page and index
52
+ */
53
+ export declare function getImagesByOCRResult(db: Database.Database, ocrResultId: string): ImageReference[];
54
+ /**
55
+ * Get pending images for VLM processing
56
+ *
57
+ * @param db - Database connection
58
+ * @param limit - Maximum number of images to return
59
+ * @returns ImageReference[] - Array of pending images ordered by creation time
60
+ */
61
+ export declare function getPendingImages(db: Database.Database, limit?: number): ImageReference[];
62
+ /**
63
+ * List images with optional filtering
64
+ *
65
+ * @param db - Database connection
66
+ * @param options - Optional filter options
67
+ * @returns ImageReference[] - Array of images
68
+ */
69
+ export declare function listImages(db: Database.Database, options?: ListImagesOptions): ImageReference[];
70
+ /**
71
+ * Update image VLM status to processing
72
+ *
73
+ * @param db - Database connection
74
+ * @param id - Image ID
75
+ */
76
+ export declare function setImageProcessing(db: Database.Database, id: string): boolean;
77
+ /**
78
+ * Update image with VLM results
79
+ *
80
+ * @param db - Database connection
81
+ * @param id - Image ID
82
+ * @param result - VLM processing result
83
+ */
84
+ export declare function updateImageVLMResult(db: Database.Database, id: string, result: VLMResult): void;
85
+ /**
86
+ * Mark image as complete but intentionally skipped by relevance filtering.
87
+ * Sets vlm_status='complete' with vlm_description='[SKIPPED]' so the image
88
+ * is not reprocessed by retry_failed, and does not inflate failure counts.
89
+ *
90
+ * @param db - Database connection
91
+ * @param id - Image ID
92
+ * @param skipReason - Reason the image was skipped (stored in error_message for diagnostics)
93
+ */
94
+ export declare function setImageVLMSkipped(db: Database.Database, id: string, skipReason: string): void;
95
+ /**
96
+ * Mark image VLM processing as failed
97
+ *
98
+ * @param db - Database connection
99
+ * @param id - Image ID
100
+ * @param errorMessage - Error message
101
+ */
102
+ export declare function setImageVLMFailed(db: Database.Database, id: string, errorMessage: string): void;
103
+ /**
104
+ * Update image context text
105
+ *
106
+ * @param db - Database connection
107
+ * @param id - Image ID
108
+ * @param contextText - Surrounding text from document
109
+ */
110
+ export declare function updateImageContext(db: Database.Database, id: string, contextText: string): void;
111
+ /**
112
+ * Update image provenance_id
113
+ *
114
+ * @param db - Database connection
115
+ * @param id - Image ID
116
+ * @param provenanceId - Provenance record ID to set
117
+ */
118
+ export declare function updateImageProvenance(db: Database.Database, id: string, provenanceId: string): void;
119
+ /**
120
+ * Get image statistics
121
+ *
122
+ * @param db - Database connection
123
+ * @returns ImageStats - Statistics about images in database
124
+ */
125
+ export declare function getImageStats(db: Database.Database): ImageStats;
126
+ /**
127
+ * Delete an image by ID
128
+ *
129
+ * @param db - Database connection
130
+ * @param id - Image ID
131
+ * @returns boolean - True if image was deleted
132
+ */
133
+ export declare function deleteImage(db: Database.Database, id: string): boolean;
134
+ /**
135
+ * Delete an image and all its derived data (embeddings, vectors, provenance).
136
+ * Performs a full cascade deletion to prevent orphaned records.
137
+ *
138
+ * @param db - Database connection
139
+ * @param imageId - Image ID to delete
140
+ */
141
+ export declare function deleteImageCascade(db: Database.Database, imageId: string): void;
142
+ /**
143
+ * Delete all images for a document and all their derived data (embeddings, vectors, provenance).
144
+ * Performs a full cascade deletion to prevent orphaned records.
145
+ *
146
+ * @param db - Database connection
147
+ * @param documentId - Document ID
148
+ * @returns number - Number of images deleted
149
+ */
150
+ export declare function deleteImagesByDocumentCascade(db: Database.Database, documentId: string): number;
151
+ /**
152
+ * Delete all images for a document
153
+ *
154
+ * @param db - Database connection
155
+ * @param documentId - Document ID
156
+ * @returns number - Number of images deleted
157
+ */
158
+ export declare function deleteImagesByDocument(db: Database.Database, documentId: string): number;
159
+ /**
160
+ * Count images by document
161
+ *
162
+ * @param db - Database connection
163
+ * @param documentId - Document ID
164
+ * @returns number - Number of images for this document
165
+ */
166
+ export declare function countImagesByDocument(db: Database.Database, documentId: string): number;
167
+ /**
168
+ * Reset VLM status to pending for failed images
169
+ *
170
+ * @param db - Database connection
171
+ * @param documentId - Optional document ID to filter
172
+ * @returns number - Number of images reset
173
+ */
174
+ export declare function resetFailedImages(db: Database.Database, documentId?: string): number;
175
+ /**
176
+ * Reset VLM status to pending for images stuck in 'processing' state
177
+ *
178
+ * @param db - Database connection
179
+ * @param documentId - Optional document ID to filter
180
+ * @returns number - Number of images reset
181
+ */
182
+ export declare function resetProcessingImages(db: Database.Database, documentId?: string): number;
183
+ /**
184
+ * Find a VLM-complete image with the same content hash (for deduplication).
185
+ * Returns the first matching image or null.
186
+ *
187
+ * @param db - Database connection
188
+ * @param contentHash - SHA-256 hash to search for
189
+ * @param excludeId - Optional image ID to exclude from results
190
+ * @returns ImageReference | null
191
+ */
192
+ export declare function findByContentHash(db: Database.Database, contentHash: string, excludeId?: string): ImageReference | null;
193
+ /**
194
+ * Copy VLM results from one image to another (deduplication).
195
+ * Sets vlm_status='complete', vlm_tokens_used=0 (no API call made).
196
+ *
197
+ * @param db - Database connection
198
+ * @param targetId - Image ID to copy results TO
199
+ * @param source - Source image to copy results FROM
200
+ */
201
+ export declare function copyVLMResult(db: Database.Database, targetId: string, source: ImageReference): void;
202
+ //# sourceMappingURL=image-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-operations.d.ts","sourceRoot":"","sources":["../../../../src/services/storage/database/image-operations.ts"],"names":[],"mappings":"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"}