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,484 @@
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 { v4 as uuidv4 } from 'uuid';
8
+ import { DatabaseError, DatabaseErrorCode } from './types.js';
9
+ import { rowToImage } from './converters.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 function insertImage(db, image) {
18
+ const id = uuidv4();
19
+ const created_at = new Date().toISOString();
20
+ const stmt = db.prepare(`
21
+ INSERT INTO images (
22
+ id, document_id, ocr_result_id, page_number,
23
+ bbox_x, bbox_y, bbox_width, bbox_height,
24
+ image_index, format, width, height,
25
+ extracted_path, file_size, vlm_status,
26
+ context_text, provenance_id, created_at,
27
+ block_type, is_header_footer, content_hash
28
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?, ?, ?)
29
+ `);
30
+ stmt.run(id, image.document_id, image.ocr_result_id, image.page_number, image.bounding_box.x, image.bounding_box.y, image.bounding_box.width, image.bounding_box.height, image.image_index, image.format, image.dimensions.width, image.dimensions.height, image.extracted_path ?? null, image.file_size ?? null, image.context_text ?? null, image.provenance_id ?? null, created_at, image.block_type ?? null, image.is_header_footer ? 1 : 0, image.content_hash ?? null);
31
+ return {
32
+ ...image,
33
+ id,
34
+ created_at,
35
+ vlm_status: 'pending',
36
+ vlm_description: null,
37
+ vlm_structured_data: null,
38
+ vlm_embedding_id: null,
39
+ vlm_model: null,
40
+ vlm_confidence: null,
41
+ vlm_processed_at: null,
42
+ vlm_tokens_used: null,
43
+ error_message: null,
44
+ block_type: image.block_type ?? null,
45
+ is_header_footer: image.is_header_footer ?? false,
46
+ content_hash: image.content_hash ?? null,
47
+ };
48
+ }
49
+ /**
50
+ * Insert multiple images in a batch
51
+ *
52
+ * @param db - Database connection
53
+ * @param images - Array of image data to insert
54
+ * @returns ImageReference[] - Array of created images
55
+ */
56
+ export function insertImageBatch(db, images) {
57
+ const results = [];
58
+ const insertFn = db.transaction(() => {
59
+ for (const image of images) {
60
+ results.push(insertImage(db, image));
61
+ }
62
+ });
63
+ insertFn();
64
+ return results;
65
+ }
66
+ /**
67
+ * Get an image by ID
68
+ *
69
+ * @param db - Database connection
70
+ * @param id - Image ID
71
+ * @returns ImageReference | null - The image or null if not found
72
+ */
73
+ export function getImage(db, id) {
74
+ const stmt = db.prepare('SELECT * FROM images WHERE id = ?');
75
+ const row = stmt.get(id);
76
+ return row ? rowToImage(row) : null;
77
+ }
78
+ /**
79
+ * Get images for a document with optional filtering
80
+ *
81
+ * @param db - Database connection
82
+ * @param documentId - Document ID
83
+ * @param options - Optional filters: vlmStatus, limit
84
+ * @returns ImageReference[] - Array of images ordered by page and index
85
+ */
86
+ export function getImagesByDocument(db, documentId, options) {
87
+ const params = [documentId];
88
+ let sql = 'SELECT * FROM images WHERE document_id = ?';
89
+ if (options?.vlmStatus) {
90
+ sql += ' AND vlm_status = ?';
91
+ params.push(options.vlmStatus);
92
+ }
93
+ sql += ' ORDER BY page_number, image_index';
94
+ if (options?.limit && options.limit > 0) {
95
+ sql += ' LIMIT ?';
96
+ params.push(options.limit);
97
+ }
98
+ else {
99
+ sql += ' LIMIT 5000'; // Default bound to prevent unbounded image loading
100
+ }
101
+ const stmt = db.prepare(sql);
102
+ const rows = stmt.all(...params);
103
+ return rows.map(rowToImage);
104
+ }
105
+ /**
106
+ * Get all images for an OCR result
107
+ *
108
+ * @param db - Database connection
109
+ * @param ocrResultId - OCR result ID
110
+ * @returns ImageReference[] - Array of images ordered by page and index
111
+ */
112
+ export function getImagesByOCRResult(db, ocrResultId) {
113
+ const stmt = db.prepare(`
114
+ SELECT * FROM images
115
+ WHERE ocr_result_id = ?
116
+ ORDER BY page_number, image_index
117
+ LIMIT 5000
118
+ `);
119
+ const rows = stmt.all(ocrResultId);
120
+ return rows.map(rowToImage);
121
+ }
122
+ /**
123
+ * Get pending images for VLM processing
124
+ *
125
+ * @param db - Database connection
126
+ * @param limit - Maximum number of images to return
127
+ * @returns ImageReference[] - Array of pending images ordered by creation time
128
+ */
129
+ export function getPendingImages(db, limit = 100) {
130
+ const stmt = db.prepare(`
131
+ SELECT * FROM images
132
+ WHERE vlm_status = 'pending'
133
+ ORDER BY created_at
134
+ LIMIT ?
135
+ `);
136
+ const rows = stmt.all(limit);
137
+ return rows.map(rowToImage);
138
+ }
139
+ /**
140
+ * List images with optional filtering
141
+ *
142
+ * @param db - Database connection
143
+ * @param options - Optional filter options
144
+ * @returns ImageReference[] - Array of images
145
+ */
146
+ export function listImages(db, options) {
147
+ let query = 'SELECT * FROM images';
148
+ const params = [];
149
+ if (options?.vlmStatus) {
150
+ query += ' WHERE vlm_status = ?';
151
+ params.push(options.vlmStatus);
152
+ }
153
+ query += ' ORDER BY created_at DESC';
154
+ const limit = options?.limit ?? 10000;
155
+ query += ' LIMIT ?';
156
+ params.push(limit);
157
+ if (options?.offset !== undefined) {
158
+ query += ' OFFSET ?';
159
+ params.push(options.offset);
160
+ }
161
+ const stmt = db.prepare(query);
162
+ const rows = stmt.all(...params);
163
+ return rows.map(rowToImage);
164
+ }
165
+ /**
166
+ * Update image VLM status to processing
167
+ *
168
+ * @param db - Database connection
169
+ * @param id - Image ID
170
+ */
171
+ export function setImageProcessing(db, id) {
172
+ const stmt = db.prepare(`
173
+ UPDATE images SET vlm_status = 'processing'
174
+ WHERE id = ? AND vlm_status = 'pending'
175
+ `);
176
+ const result = stmt.run(id);
177
+ // Returns false if image not found or already processing/complete/failed
178
+ return result.changes > 0;
179
+ }
180
+ /**
181
+ * Update image with VLM results
182
+ *
183
+ * @param db - Database connection
184
+ * @param id - Image ID
185
+ * @param result - VLM processing result
186
+ */
187
+ export function updateImageVLMResult(db, id, result) {
188
+ const vlm_processed_at = new Date().toISOString();
189
+ const stmt = db.prepare(`
190
+ UPDATE images SET
191
+ vlm_status = 'complete',
192
+ vlm_description = ?,
193
+ vlm_structured_data = ?,
194
+ vlm_embedding_id = ?,
195
+ vlm_model = ?,
196
+ vlm_confidence = ?,
197
+ vlm_tokens_used = ?,
198
+ vlm_processed_at = ?,
199
+ error_message = NULL
200
+ WHERE id = ?
201
+ `);
202
+ const changes = stmt.run(result.description, JSON.stringify(result.structuredData), result.embeddingId, result.model, result.confidence, result.tokensUsed, vlm_processed_at, id).changes;
203
+ if (changes === 0) {
204
+ throw new DatabaseError(`Image "${id}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
205
+ }
206
+ }
207
+ /**
208
+ * Mark image as complete but intentionally skipped by relevance filtering.
209
+ * Sets vlm_status='complete' with vlm_description='[SKIPPED]' so the image
210
+ * is not reprocessed by retry_failed, and does not inflate failure counts.
211
+ *
212
+ * @param db - Database connection
213
+ * @param id - Image ID
214
+ * @param skipReason - Reason the image was skipped (stored in error_message for diagnostics)
215
+ */
216
+ export function setImageVLMSkipped(db, id, skipReason) {
217
+ const stmt = db.prepare(`
218
+ UPDATE images SET
219
+ vlm_status = 'complete',
220
+ vlm_description = '[SKIPPED]',
221
+ vlm_tokens_used = 0,
222
+ vlm_processed_at = ?,
223
+ error_message = ?
224
+ WHERE id = ?
225
+ `);
226
+ const result = stmt.run(new Date().toISOString(), skipReason, id);
227
+ if (result.changes === 0) {
228
+ throw new DatabaseError(`Image "${id}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
229
+ }
230
+ }
231
+ /**
232
+ * Mark image VLM processing as failed
233
+ *
234
+ * @param db - Database connection
235
+ * @param id - Image ID
236
+ * @param errorMessage - Error message
237
+ */
238
+ export function setImageVLMFailed(db, id, errorMessage) {
239
+ const stmt = db.prepare(`
240
+ UPDATE images SET
241
+ vlm_status = 'failed',
242
+ error_message = ?
243
+ WHERE id = ?
244
+ `);
245
+ const result = stmt.run(errorMessage, id);
246
+ if (result.changes === 0) {
247
+ throw new DatabaseError(`Image "${id}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
248
+ }
249
+ }
250
+ /**
251
+ * Update image context text
252
+ *
253
+ * @param db - Database connection
254
+ * @param id - Image ID
255
+ * @param contextText - Surrounding text from document
256
+ */
257
+ export function updateImageContext(db, id, contextText) {
258
+ const stmt = db.prepare(`
259
+ UPDATE images SET context_text = ?
260
+ WHERE id = ?
261
+ `);
262
+ const result = stmt.run(contextText, id);
263
+ if (result.changes === 0) {
264
+ throw new DatabaseError(`Image "${id}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
265
+ }
266
+ }
267
+ /**
268
+ * Update image provenance_id
269
+ *
270
+ * @param db - Database connection
271
+ * @param id - Image ID
272
+ * @param provenanceId - Provenance record ID to set
273
+ */
274
+ export function updateImageProvenance(db, id, provenanceId) {
275
+ const result = db
276
+ .prepare('UPDATE images SET provenance_id = ? WHERE id = ?')
277
+ .run(provenanceId, id);
278
+ if (result.changes === 0) {
279
+ throw new DatabaseError(`Image "${id}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
280
+ }
281
+ }
282
+ /**
283
+ * Get image statistics
284
+ *
285
+ * @param db - Database connection
286
+ * @returns ImageStats - Statistics about images in database
287
+ */
288
+ export function getImageStats(db) {
289
+ return db
290
+ .prepare(`
291
+ SELECT
292
+ COUNT(*) as total,
293
+ COUNT(CASE WHEN vlm_status = 'complete' THEN 1 END) as processed,
294
+ COUNT(CASE WHEN vlm_status = 'pending' THEN 1 END) as pending,
295
+ COUNT(CASE WHEN vlm_status = 'processing' THEN 1 END) as processing,
296
+ COUNT(CASE WHEN vlm_status = 'failed' THEN 1 END) as failed
297
+ FROM images
298
+ `)
299
+ .get();
300
+ }
301
+ /**
302
+ * Delete an image by ID
303
+ *
304
+ * @param db - Database connection
305
+ * @param id - Image ID
306
+ * @returns boolean - True if image was deleted
307
+ */
308
+ export function deleteImage(db, id) {
309
+ const stmt = db.prepare('DELETE FROM images WHERE id = ?');
310
+ return stmt.run(id).changes > 0;
311
+ }
312
+ /**
313
+ * Delete an image and all its derived data (embeddings, vectors, provenance).
314
+ * Performs a full cascade deletion to prevent orphaned records.
315
+ *
316
+ * @param db - Database connection
317
+ * @param imageId - Image ID to delete
318
+ */
319
+ export function deleteImageCascade(db, imageId) {
320
+ // 1. Delete vec_embeddings for this image's embeddings
321
+ db.prepare('DELETE FROM vec_embeddings WHERE embedding_id IN (SELECT id FROM embeddings WHERE image_id = ?)').run(imageId);
322
+ // 2. Break circular FK: images.vlm_embedding_id -> embeddings AND embeddings.image_id -> images
323
+ db.prepare('UPDATE images SET vlm_embedding_id = NULL WHERE id = ?').run(imageId);
324
+ // 3. Delete embeddings (safe now that vlm_embedding_id is NULLed)
325
+ db.prepare('DELETE FROM embeddings WHERE image_id = ?').run(imageId);
326
+ // 4. Collect image provenance_id, then delete image (removes FK to provenance)
327
+ const img = db.prepare('SELECT provenance_id FROM images WHERE id = ?').get(imageId);
328
+ db.prepare('DELETE FROM images WHERE id = ?').run(imageId);
329
+ // 5. Delete provenance chain deepest-first: EMBEDDING(4) -> VLM_DESCRIPTION(3) -> IMAGE(2)
330
+ // Embedding provenance (deleted in step 3) was also a grandchild here, so the
331
+ // grandchild DELETE is a no-op for it but catches any other depth-4 descendants.
332
+ if (img?.provenance_id) {
333
+ db.prepare('DELETE FROM provenance WHERE parent_id IN (SELECT id FROM provenance WHERE parent_id = ?)').run(img.provenance_id);
334
+ db.prepare('DELETE FROM provenance WHERE parent_id = ?').run(img.provenance_id);
335
+ db.prepare('DELETE FROM provenance WHERE id = ?').run(img.provenance_id);
336
+ }
337
+ }
338
+ /**
339
+ * Delete all images for a document and all their derived data (embeddings, vectors, provenance).
340
+ * Performs a full cascade deletion to prevent orphaned records.
341
+ *
342
+ * @param db - Database connection
343
+ * @param documentId - Document ID
344
+ * @returns number - Number of images deleted
345
+ */
346
+ export function deleteImagesByDocumentCascade(db, documentId) {
347
+ // 1. Delete vec_embeddings for these images' embeddings
348
+ db.prepare(`DELETE FROM vec_embeddings WHERE embedding_id IN (
349
+ SELECT e.id FROM embeddings e
350
+ JOIN images i ON e.image_id = i.id
351
+ WHERE i.document_id = ?
352
+ )`).run(documentId);
353
+ // 2. Break circular FK: images.vlm_embedding_id -> embeddings AND embeddings.image_id -> images
354
+ db.prepare('UPDATE images SET vlm_embedding_id = NULL WHERE document_id = ?').run(documentId);
355
+ // 3. Delete embeddings (safe now that vlm_embedding_id is NULLed)
356
+ db.prepare('DELETE FROM embeddings WHERE image_id IN (SELECT id FROM images WHERE document_id = ?)').run(documentId);
357
+ // 4. Collect image provenance IDs before deleting images
358
+ const imageProvIds = db
359
+ .prepare('SELECT provenance_id FROM images WHERE document_id = ? AND provenance_id IS NOT NULL')
360
+ .all(documentId);
361
+ // 5. Delete images (removes FK references to their provenance)
362
+ const result = db.prepare('DELETE FROM images WHERE document_id = ?').run(documentId);
363
+ // 6. Delete provenance chains deepest-first: EMBEDDING(4) -> VLM_DESCRIPTION(3) -> IMAGE(2)
364
+ // This covers embedding provenance (grandchildren) that was freed in step 3,
365
+ // VLM_DESCRIPTION provenance (children), and the IMAGE provenance itself.
366
+ for (const { provenance_id } of imageProvIds) {
367
+ db.prepare('DELETE FROM provenance WHERE parent_id IN (SELECT id FROM provenance WHERE parent_id = ?)').run(provenance_id);
368
+ db.prepare('DELETE FROM provenance WHERE parent_id = ?').run(provenance_id);
369
+ db.prepare('DELETE FROM provenance WHERE id = ?').run(provenance_id);
370
+ }
371
+ return result.changes;
372
+ }
373
+ /**
374
+ * Delete all images for a document
375
+ *
376
+ * @param db - Database connection
377
+ * @param documentId - Document ID
378
+ * @returns number - Number of images deleted
379
+ */
380
+ export function deleteImagesByDocument(db, documentId) {
381
+ const stmt = db.prepare('DELETE FROM images WHERE document_id = ?');
382
+ return stmt.run(documentId).changes;
383
+ }
384
+ /**
385
+ * Count images by document
386
+ *
387
+ * @param db - Database connection
388
+ * @param documentId - Document ID
389
+ * @returns number - Number of images for this document
390
+ */
391
+ export function countImagesByDocument(db, documentId) {
392
+ const row = db
393
+ .prepare(`
394
+ SELECT COUNT(*) as count FROM images WHERE document_id = ?
395
+ `)
396
+ .get(documentId);
397
+ return row.count;
398
+ }
399
+ /**
400
+ * Reset VLM status to pending for failed images
401
+ *
402
+ * @param db - Database connection
403
+ * @param documentId - Optional document ID to filter
404
+ * @returns number - Number of images reset
405
+ */
406
+ export function resetFailedImages(db, documentId) {
407
+ let query = `
408
+ UPDATE images SET
409
+ vlm_status = 'pending',
410
+ error_message = NULL
411
+ WHERE vlm_status = 'failed'
412
+ `;
413
+ if (documentId) {
414
+ query += ' AND document_id = ?';
415
+ return db.prepare(query).run(documentId).changes;
416
+ }
417
+ return db.prepare(query).run().changes;
418
+ }
419
+ /**
420
+ * Reset VLM status to pending for images stuck in 'processing' state
421
+ *
422
+ * @param db - Database connection
423
+ * @param documentId - Optional document ID to filter
424
+ * @returns number - Number of images reset
425
+ */
426
+ export function resetProcessingImages(db, documentId) {
427
+ let query = `
428
+ UPDATE images SET
429
+ vlm_status = 'pending',
430
+ error_message = 'Reset from stuck processing state'
431
+ WHERE vlm_status = 'processing'
432
+ `;
433
+ if (documentId) {
434
+ query += ' AND document_id = ?';
435
+ return db.prepare(query).run(documentId).changes;
436
+ }
437
+ return db.prepare(query).run().changes;
438
+ }
439
+ /**
440
+ * Find a VLM-complete image with the same content hash (for deduplication).
441
+ * Returns the first matching image or null.
442
+ *
443
+ * @param db - Database connection
444
+ * @param contentHash - SHA-256 hash to search for
445
+ * @param excludeId - Optional image ID to exclude from results
446
+ * @returns ImageReference | null
447
+ */
448
+ export function findByContentHash(db, contentHash, excludeId) {
449
+ const query = excludeId
450
+ ? `SELECT * FROM images WHERE content_hash = ? AND vlm_status = 'complete' AND vlm_description != '[SKIPPED]' AND id != ? LIMIT 1`
451
+ : `SELECT * FROM images WHERE content_hash = ? AND vlm_status = 'complete' AND vlm_description != '[SKIPPED]' LIMIT 1`;
452
+ const row = excludeId
453
+ ? db.prepare(query).get(contentHash, excludeId)
454
+ : db.prepare(query).get(contentHash);
455
+ return row ? rowToImage(row) : null;
456
+ }
457
+ /**
458
+ * Copy VLM results from one image to another (deduplication).
459
+ * Sets vlm_status='complete', vlm_tokens_used=0 (no API call made).
460
+ *
461
+ * @param db - Database connection
462
+ * @param targetId - Image ID to copy results TO
463
+ * @param source - Source image to copy results FROM
464
+ */
465
+ export function copyVLMResult(db, targetId, source) {
466
+ const stmt = db.prepare(`
467
+ UPDATE images SET
468
+ vlm_status = 'complete',
469
+ vlm_description = ?,
470
+ vlm_structured_data = ?,
471
+ vlm_embedding_id = ?,
472
+ vlm_model = ?,
473
+ vlm_confidence = ?,
474
+ vlm_tokens_used = 0,
475
+ vlm_processed_at = ?,
476
+ error_message = NULL
477
+ WHERE id = ?
478
+ `);
479
+ const changes = stmt.run(source.vlm_description, source.vlm_structured_data ? JSON.stringify(source.vlm_structured_data) : null, source.vlm_embedding_id, source.vlm_model, source.vlm_confidence, new Date().toISOString(), targetId).changes;
480
+ if (changes === 0) {
481
+ throw new DatabaseError(`Image "${targetId}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
482
+ }
483
+ }
484
+ //# sourceMappingURL=image-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-operations.js","sourceRoot":"","sources":["../../../../src/services/storage/database/image-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Database Module - Public API
3
+ *
4
+ * Re-exports all public types, classes, and functions from the database module.
5
+ * This file serves as the facade for backwards compatibility.
6
+ */
7
+ export { MigrationError } from '../migrations.js';
8
+ export type { DatabaseInfo, DatabaseStats, ListDocumentsOptions, ListImagesOptions, } from './types.js';
9
+ export { DatabaseErrorCode, DatabaseError } from './types.js';
10
+ export { DatabaseService } from './service.js';
11
+ export { insertImage, insertImageBatch, getImage, getImagesByDocument, getImagesByOCRResult, getPendingImages, listImages, setImageProcessing, updateImageVLMResult, setImageVLMFailed, updateImageContext, getImageStats, deleteImage, deleteImagesByDocument, countImagesByDocument, resetFailedImages, } from './image-operations.js';
12
+ export { rowToImage } from './converters.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/storage/database/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,YAAY,EACV,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Database Module - Public API
3
+ *
4
+ * Re-exports all public types, classes, and functions from the database module.
5
+ * This file serves as the facade for backwards compatibility.
6
+ */
7
+ // Re-export MigrationError from migrations for convenience
8
+ export { MigrationError } from '../migrations.js';
9
+ export { DatabaseErrorCode, DatabaseError } from './types.js';
10
+ // Export the main service class
11
+ export { DatabaseService } from './service.js';
12
+ // Export image operations
13
+ export { insertImage, insertImageBatch, getImage, getImagesByDocument, getImagesByOCRResult, getPendingImages, listImages, setImageProcessing, updateImageVLMResult, setImageVLMFailed, updateImageContext, getImageStats, deleteImage, deleteImagesByDocument, countImagesByDocument, resetFailedImages, } from './image-operations.js';
14
+ // Export converters
15
+ export { rowToImage } from './converters.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/storage/database/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,2DAA2D;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASlD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D,gCAAgC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,0BAA0B;AAC1B,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAE/B,oBAAoB;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Document Lock Operations
3
+ *
4
+ * Provides database operations for document-level locking to prevent
5
+ * concurrent edits. Supports exclusive and shared lock types with
6
+ * automatic expiry via TTL.
7
+ *
8
+ * CRITICAL: NEVER use console.log() - stdout is reserved for JSON-RPC protocol.
9
+ *
10
+ * @module database/lock-operations
11
+ */
12
+ import type Database from 'better-sqlite3';
13
+ export interface LockRow {
14
+ document_id: string;
15
+ user_id: string;
16
+ session_id: string;
17
+ lock_type: string;
18
+ reason: string | null;
19
+ acquired_at: string;
20
+ expires_at: string;
21
+ }
22
+ export interface AcquireLockParams {
23
+ document_id: string;
24
+ user_id: string;
25
+ session_id: string;
26
+ lock_type: string;
27
+ reason?: string;
28
+ ttl_minutes?: number;
29
+ }
30
+ /**
31
+ * Acquire a lock on a document.
32
+ *
33
+ * Exclusive locks prevent any other lock. Shared locks allow other shared
34
+ * locks but block exclusive locks. Expired locks are cleaned up first.
35
+ *
36
+ * @param conn - Database connection
37
+ * @param params - Lock parameters
38
+ * @returns The acquired lock row
39
+ * @throws Error if document not found or lock conflict
40
+ */
41
+ export declare function acquireLock(conn: Database.Database, params: AcquireLockParams): LockRow;
42
+ /**
43
+ * Release a lock on a document.
44
+ *
45
+ * @param conn - Database connection
46
+ * @param documentId - Document ID
47
+ * @throws Error if no lock found
48
+ */
49
+ export declare function releaseLock(conn: Database.Database, documentId: string): void;
50
+ /**
51
+ * Get the current lock status for a document.
52
+ * Cleans up expired locks before checking.
53
+ *
54
+ * @param conn - Database connection
55
+ * @param documentId - Document ID
56
+ * @returns Lock row or null if no active lock
57
+ */
58
+ export declare function getLockStatus(conn: Database.Database, documentId: string): LockRow | null;
59
+ //# sourceMappingURL=lock-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock-operations.d.ts","sourceRoot":"","sources":["../../../../src/services/storage/database/lock-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAM3C,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CA2DvF;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAQ7E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAOzF"}