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,247 @@
1
+ /**
2
+ * Playbook Operations for DatabaseService
3
+ *
4
+ * Provides CRUD operations for the playbooks table and clause comparison.
5
+ * Playbooks define preferred contract terms for deviation detection.
6
+ *
7
+ * @module database/playbook-operations
8
+ */
9
+ import { v4 as uuidv4 } from 'uuid';
10
+ // =============================================================================
11
+ // CREATE
12
+ // =============================================================================
13
+ /**
14
+ * Create a new playbook with clauses
15
+ */
16
+ export function createPlaybook(db, params) {
17
+ const id = uuidv4();
18
+ const now = new Date().toISOString();
19
+ const clausesJson = JSON.stringify(params.clauses);
20
+ db.prepare(`
21
+ INSERT INTO playbooks (id, name, description, clauses_json, created_at, updated_at, created_by)
22
+ VALUES (?, ?, ?, ?, ?, ?, ?)
23
+ `).run(id, params.name, params.description ?? null, clausesJson, now, now, params.created_by ?? null);
24
+ return {
25
+ id,
26
+ name: params.name,
27
+ description: params.description ?? null,
28
+ clauses: params.clauses,
29
+ created_at: now,
30
+ updated_at: now,
31
+ created_by: params.created_by ?? null,
32
+ };
33
+ }
34
+ // =============================================================================
35
+ // GET
36
+ // =============================================================================
37
+ /**
38
+ * Get a playbook by ID
39
+ * @throws Error if not found
40
+ */
41
+ export function getPlaybook(db, id) {
42
+ const row = db.prepare('SELECT * FROM playbooks WHERE id = ?').get(id);
43
+ if (!row) {
44
+ throw new Error(`Playbook not found: ${id}`);
45
+ }
46
+ let clauses = [];
47
+ try {
48
+ clauses = JSON.parse(row.clauses_json);
49
+ }
50
+ catch {
51
+ clauses = [];
52
+ }
53
+ return {
54
+ id: row.id,
55
+ name: row.name,
56
+ description: row.description,
57
+ clauses,
58
+ created_at: row.created_at,
59
+ updated_at: row.updated_at,
60
+ created_by: row.created_by,
61
+ };
62
+ }
63
+ // =============================================================================
64
+ // LIST
65
+ // =============================================================================
66
+ /**
67
+ * List all playbooks
68
+ */
69
+ export function listPlaybooks(db) {
70
+ const rows = db.prepare('SELECT * FROM playbooks ORDER BY updated_at DESC LIMIT 1000').all();
71
+ return rows.map((row) => {
72
+ let clauses = [];
73
+ try {
74
+ clauses = JSON.parse(row.clauses_json);
75
+ }
76
+ catch {
77
+ clauses = [];
78
+ }
79
+ return {
80
+ id: row.id,
81
+ name: row.name,
82
+ description: row.description,
83
+ clauses,
84
+ created_at: row.created_at,
85
+ updated_at: row.updated_at,
86
+ created_by: row.created_by,
87
+ };
88
+ });
89
+ }
90
+ // =============================================================================
91
+ // COMPARE WITH PLAYBOOK
92
+ // =============================================================================
93
+ /**
94
+ * Compare document text against a playbook's clauses.
95
+ *
96
+ * For each clause in the playbook, searches the document's chunks for matching
97
+ * content using simple text matching (case-insensitive indexOf). Returns
98
+ * deviations where neither preferred text nor alternatives are found.
99
+ */
100
+ export function compareWithPlaybook(db, documentId, playbookId) {
101
+ // Verify document exists
102
+ const doc = db.prepare('SELECT id FROM documents WHERE id = ?').get(documentId);
103
+ if (!doc) {
104
+ throw new Error(`Document not found: ${documentId}`);
105
+ }
106
+ // Get playbook
107
+ const playbook = getPlaybook(db, playbookId);
108
+ // Get all chunks for the document
109
+ const chunks = db.prepare(`
110
+ SELECT c.id, c.text, c.page_number
111
+ FROM chunks c
112
+ INNER JOIN ocr_results o ON o.id = c.ocr_result_id
113
+ WHERE o.document_id = ?
114
+ ORDER BY c.chunk_index ASC
115
+ `).all(documentId);
116
+ const clauseResults = [];
117
+ let matches = 0;
118
+ let alternativeMatches = 0;
119
+ let deviations = 0;
120
+ let missing = 0;
121
+ for (const clause of playbook.clauses) {
122
+ const result = matchClauseInChunks(clause, chunks);
123
+ clauseResults.push(result);
124
+ switch (result.status) {
125
+ case 'match':
126
+ matches++;
127
+ break;
128
+ case 'alternative_match':
129
+ alternativeMatches++;
130
+ break;
131
+ case 'deviation':
132
+ deviations++;
133
+ break;
134
+ case 'missing':
135
+ missing++;
136
+ break;
137
+ }
138
+ }
139
+ const totalClauses = playbook.clauses.length;
140
+ const complianceScore = totalClauses > 0
141
+ ? Math.round(((matches + alternativeMatches) / totalClauses) * 100) / 100
142
+ : 1.0;
143
+ return {
144
+ playbook_id: playbook.id,
145
+ playbook_name: playbook.name,
146
+ document_id: documentId,
147
+ total_clauses: totalClauses,
148
+ matches,
149
+ alternative_matches: alternativeMatches,
150
+ deviations,
151
+ missing,
152
+ compliance_score: complianceScore,
153
+ clause_results: clauseResults,
154
+ };
155
+ }
156
+ // =============================================================================
157
+ // HELPERS
158
+ // =============================================================================
159
+ /**
160
+ * Search chunks for a clause match using case-insensitive text matching.
161
+ * Checks preferred text first, then alternatives.
162
+ */
163
+ function matchClauseInChunks(clause, chunks) {
164
+ const preferredLower = clause.preferred_text.toLowerCase();
165
+ // Check preferred text first
166
+ for (const chunk of chunks) {
167
+ const textLower = chunk.text.toLowerCase();
168
+ if (textLower.includes(preferredLower)) {
169
+ return {
170
+ clause_name: clause.clause_name,
171
+ severity: clause.severity,
172
+ status: 'match',
173
+ preferred_text: clause.preferred_text,
174
+ matched_text: extractContext(chunk.text, clause.preferred_text),
175
+ matched_chunk_id: chunk.id,
176
+ matched_page: chunk.page_number,
177
+ details: 'Preferred text found in document',
178
+ };
179
+ }
180
+ }
181
+ // Check alternatives
182
+ for (const alt of clause.alternatives) {
183
+ const altLower = alt.toLowerCase();
184
+ for (const chunk of chunks) {
185
+ const textLower = chunk.text.toLowerCase();
186
+ if (textLower.includes(altLower)) {
187
+ return {
188
+ clause_name: clause.clause_name,
189
+ severity: clause.severity,
190
+ status: 'alternative_match',
191
+ preferred_text: clause.preferred_text,
192
+ matched_text: extractContext(chunk.text, alt),
193
+ matched_chunk_id: chunk.id,
194
+ matched_page: chunk.page_number,
195
+ details: `Alternative text found: "${alt}"`,
196
+ };
197
+ }
198
+ }
199
+ }
200
+ // Check if clause topic is mentioned at all (by clause name)
201
+ const clauseNameLower = clause.clause_name.toLowerCase();
202
+ for (const chunk of chunks) {
203
+ const textLower = chunk.text.toLowerCase();
204
+ if (textLower.includes(clauseNameLower)) {
205
+ return {
206
+ clause_name: clause.clause_name,
207
+ severity: clause.severity,
208
+ status: 'deviation',
209
+ preferred_text: clause.preferred_text,
210
+ matched_text: extractContext(chunk.text, clause.clause_name),
211
+ matched_chunk_id: chunk.id,
212
+ matched_page: chunk.page_number,
213
+ details: `Clause topic "${clause.clause_name}" found but preferred/alternative text not matched`,
214
+ };
215
+ }
216
+ }
217
+ // Not found at all
218
+ return {
219
+ clause_name: clause.clause_name,
220
+ severity: clause.severity,
221
+ status: 'missing',
222
+ preferred_text: clause.preferred_text,
223
+ matched_text: null,
224
+ matched_chunk_id: null,
225
+ matched_page: null,
226
+ details: `Clause "${clause.clause_name}" not found in document`,
227
+ };
228
+ }
229
+ /**
230
+ * Extract context around a matched substring (up to 200 chars on each side)
231
+ */
232
+ function extractContext(fullText, searchText) {
233
+ const lowerFull = fullText.toLowerCase();
234
+ const lowerSearch = searchText.toLowerCase();
235
+ const idx = lowerFull.indexOf(lowerSearch);
236
+ if (idx === -1)
237
+ return fullText.substring(0, 400);
238
+ const start = Math.max(0, idx - 100);
239
+ const end = Math.min(fullText.length, idx + searchText.length + 100);
240
+ let context = fullText.substring(start, end);
241
+ if (start > 0)
242
+ context = '...' + context;
243
+ if (end < fullText.length)
244
+ context = context + '...';
245
+ return context;
246
+ }
247
+ //# sourceMappingURL=playbook-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playbook-operations.js","sourceRoot":"","sources":["../../../../src/services/storage/database/playbook-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Provenance operations for DatabaseService
3
+ *
4
+ * Handles all CRUD operations for provenance records including
5
+ * chain traversal and tree queries.
6
+ */
7
+ import Database from 'better-sqlite3';
8
+ import { ProvenanceRecord } from '../../../models/provenance.js';
9
+ /**
10
+ * Insert a provenance record
11
+ *
12
+ * @param db - Database connection
13
+ * @param record - Provenance record data
14
+ * @returns string - The provenance record ID
15
+ */
16
+ export declare function insertProvenance(db: Database.Database, record: ProvenanceRecord): string;
17
+ /**
18
+ * Get a provenance record by ID
19
+ *
20
+ * @param db - Database connection
21
+ * @param id - Provenance record ID
22
+ * @returns ProvenanceRecord | null - The provenance record or null if not found
23
+ */
24
+ export declare function getProvenance(db: Database.Database, id: string): ProvenanceRecord | null;
25
+ /**
26
+ * Get the complete provenance chain for a record
27
+ * Walks parent_id links from the given record to the root document
28
+ *
29
+ * @param db - Database connection
30
+ * @param id - Starting provenance record ID
31
+ * @returns ProvenanceRecord[] - Array ordered from current to root
32
+ */
33
+ export declare function getProvenanceChain(db: Database.Database, id: string): ProvenanceRecord[];
34
+ /**
35
+ * Get all provenance records for a root document
36
+ *
37
+ * @param db - Database connection
38
+ * @param rootDocumentId - The root document ID
39
+ * @returns ProvenanceRecord[] - Array of all provenance records
40
+ */
41
+ export declare function getProvenanceByRootDocument(db: Database.Database, rootDocumentId: string, options?: {
42
+ limit?: number;
43
+ offset?: number;
44
+ }): ProvenanceRecord[];
45
+ /**
46
+ * Get child provenance records for a parent
47
+ *
48
+ * @param db - Database connection
49
+ * @param parentId - Parent provenance record ID
50
+ * @returns ProvenanceRecord[] - Array of child records
51
+ */
52
+ export declare function getProvenanceChildren(db: Database.Database, parentId: string): ProvenanceRecord[];
53
+ /**
54
+ * Filter options for querying provenance records
55
+ */
56
+ export interface ProvenanceQueryFilters {
57
+ processor?: string;
58
+ type?: string;
59
+ chain_depth?: number;
60
+ created_after?: string;
61
+ created_before?: string;
62
+ min_quality_score?: number;
63
+ min_duration_ms?: number;
64
+ root_document_id?: string;
65
+ limit?: number;
66
+ offset?: number;
67
+ order_by?: 'created_at' | 'processing_duration_ms' | 'processing_quality_score';
68
+ order_dir?: 'asc' | 'desc';
69
+ }
70
+ /**
71
+ * Query provenance records with dynamic filters
72
+ *
73
+ * Builds a parameterized SQL WHERE clause from provided filters.
74
+ * All filters are optional. Default order: created_at DESC. Default limit: 50.
75
+ *
76
+ * @param db - Database connection
77
+ * @param filters - Query filter options
78
+ * @returns { records: ProvenanceRecord[], total: number }
79
+ */
80
+ export declare function queryProvenance(db: Database.Database, filters: ProvenanceQueryFilters): {
81
+ records: ProvenanceRecord[];
82
+ total: number;
83
+ };
84
+ /**
85
+ * Processor statistics result
86
+ */
87
+ export interface ProvenanceProcessorStat {
88
+ processor: string;
89
+ processor_version: string;
90
+ total_operations: number;
91
+ avg_duration_ms: number;
92
+ min_duration_ms: number;
93
+ max_duration_ms: number;
94
+ avg_quality_score: number | null;
95
+ total_processing_time_ms: number;
96
+ }
97
+ /**
98
+ * Get aggregate statistics per processor/version
99
+ *
100
+ * Groups by processor and processor_version with AVG, MIN, MAX, SUM, COUNT
101
+ * aggregations on processing_duration_ms and processing_quality_score.
102
+ *
103
+ * @param db - Database connection
104
+ * @param filters - Optional filters for processor, created_after, created_before
105
+ * @returns Array of per-processor stats
106
+ */
107
+ export declare function getProvenanceProcessorStats(db: Database.Database, filters?: {
108
+ processor?: string;
109
+ created_after?: string;
110
+ created_before?: string;
111
+ }): ProvenanceProcessorStat[];
112
+ //# sourceMappingURL=provenance-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance-operations.d.ts","sourceRoot":"","sources":["../../../../src/services/storage/database/provenance-operations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAKjE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA0CxF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAIxF;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA4BxF;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,gBAAgB,EAAE,CAgBpB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAIjG;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,YAAY,GAAG,wBAAwB,GAAG,0BAA0B,CAAC;IAChF,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,sBAAsB,GAC9B;IAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAuEhD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GACA,uBAAuB,EAAE,CA6D3B"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Provenance operations for DatabaseService
3
+ *
4
+ * Handles all CRUD operations for provenance records including
5
+ * chain traversal and tree queries.
6
+ */
7
+ import { runWithForeignKeyCheck } from './helpers.js';
8
+ import { rowToProvenance } from './converters.js';
9
+ /**
10
+ * Insert a provenance record
11
+ *
12
+ * @param db - Database connection
13
+ * @param record - Provenance record data
14
+ * @returns string - The provenance record ID
15
+ */
16
+ export function insertProvenance(db, record) {
17
+ const stmt = db.prepare(`
18
+ INSERT INTO provenance (
19
+ id, type, created_at, processed_at, source_file_created_at,
20
+ source_file_modified_at, source_type, source_path, source_id,
21
+ root_document_id, location, content_hash, input_hash, file_hash,
22
+ processor, processor_version, processing_params, processing_duration_ms,
23
+ processing_quality_score, parent_id, parent_ids, chain_depth, chain_path
24
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
25
+ `);
26
+ runWithForeignKeyCheck(stmt, [
27
+ record.id,
28
+ record.type,
29
+ record.created_at,
30
+ record.processed_at,
31
+ record.source_file_created_at,
32
+ record.source_file_modified_at,
33
+ record.source_type,
34
+ record.source_path,
35
+ record.source_id,
36
+ record.root_document_id,
37
+ record.location ? JSON.stringify(record.location) : null,
38
+ record.content_hash,
39
+ record.input_hash,
40
+ record.file_hash,
41
+ record.processor,
42
+ record.processor_version,
43
+ JSON.stringify(record.processing_params),
44
+ record.processing_duration_ms,
45
+ record.processing_quality_score,
46
+ record.parent_id,
47
+ record.parent_ids,
48
+ record.chain_depth,
49
+ record.chain_path,
50
+ ], 'inserting provenance: source_id or parent_id does not exist');
51
+ return record.id;
52
+ }
53
+ /**
54
+ * Get a provenance record by ID
55
+ *
56
+ * @param db - Database connection
57
+ * @param id - Provenance record ID
58
+ * @returns ProvenanceRecord | null - The provenance record or null if not found
59
+ */
60
+ export function getProvenance(db, id) {
61
+ const stmt = db.prepare('SELECT * FROM provenance WHERE id = ?');
62
+ const row = stmt.get(id);
63
+ return row ? rowToProvenance(row) : null;
64
+ }
65
+ /**
66
+ * Get the complete provenance chain for a record
67
+ * Walks parent_id links from the given record to the root document
68
+ *
69
+ * @param db - Database connection
70
+ * @param id - Starting provenance record ID
71
+ * @returns ProvenanceRecord[] - Array ordered from current to root
72
+ */
73
+ export function getProvenanceChain(db, id) {
74
+ const chain = [];
75
+ let currentId = id;
76
+ const seen = new Set();
77
+ const MAX_CHAIN_DEPTH = 100;
78
+ let iterations = 0;
79
+ while (currentId !== null) {
80
+ if (seen.has(currentId)) {
81
+ throw new Error(`Circular reference detected in provenance chain at record ${currentId}`);
82
+ }
83
+ seen.add(currentId);
84
+ if (++iterations > MAX_CHAIN_DEPTH) {
85
+ throw new Error(`Provenance chain walk exceeded ${MAX_CHAIN_DEPTH} iterations at record ${currentId} — ` +
86
+ `possible circular reference. Chain collected so far: ${chain.length} records.`);
87
+ }
88
+ const record = getProvenance(db, currentId);
89
+ if (!record) {
90
+ break;
91
+ }
92
+ chain.push(record);
93
+ currentId = record.parent_id;
94
+ }
95
+ return chain;
96
+ }
97
+ /**
98
+ * Get all provenance records for a root document
99
+ *
100
+ * @param db - Database connection
101
+ * @param rootDocumentId - The root document ID
102
+ * @returns ProvenanceRecord[] - Array of all provenance records
103
+ */
104
+ export function getProvenanceByRootDocument(db, rootDocumentId, options) {
105
+ let sql = 'SELECT * FROM provenance WHERE root_document_id = ? ORDER BY chain_depth';
106
+ const params = [rootDocumentId];
107
+ const limit = options?.limit ?? 10000;
108
+ sql += ' LIMIT ?';
109
+ params.push(limit);
110
+ if (options?.offset !== undefined) {
111
+ sql += ' OFFSET ?';
112
+ params.push(options.offset);
113
+ }
114
+ const stmt = db.prepare(sql);
115
+ const rows = stmt.all(...params);
116
+ return rows.map(rowToProvenance);
117
+ }
118
+ /**
119
+ * Get child provenance records for a parent
120
+ *
121
+ * @param db - Database connection
122
+ * @param parentId - Parent provenance record ID
123
+ * @returns ProvenanceRecord[] - Array of child records
124
+ */
125
+ export function getProvenanceChildren(db, parentId) {
126
+ const stmt = db.prepare('SELECT * FROM provenance WHERE parent_id = ? ORDER BY created_at LIMIT 10000');
127
+ const rows = stmt.all(parentId);
128
+ return rows.map(rowToProvenance);
129
+ }
130
+ /**
131
+ * Query provenance records with dynamic filters
132
+ *
133
+ * Builds a parameterized SQL WHERE clause from provided filters.
134
+ * All filters are optional. Default order: created_at DESC. Default limit: 50.
135
+ *
136
+ * @param db - Database connection
137
+ * @param filters - Query filter options
138
+ * @returns { records: ProvenanceRecord[], total: number }
139
+ */
140
+ export function queryProvenance(db, filters) {
141
+ const conditions = [];
142
+ const params = [];
143
+ if (filters.processor !== undefined) {
144
+ conditions.push('processor = ?');
145
+ params.push(filters.processor);
146
+ }
147
+ if (filters.type !== undefined) {
148
+ conditions.push('type = ?');
149
+ params.push(filters.type);
150
+ }
151
+ if (filters.chain_depth !== undefined) {
152
+ conditions.push('chain_depth = ?');
153
+ params.push(filters.chain_depth);
154
+ }
155
+ if (filters.created_after !== undefined) {
156
+ conditions.push('created_at >= ?');
157
+ params.push(filters.created_after);
158
+ }
159
+ if (filters.created_before !== undefined) {
160
+ conditions.push('created_at <= ?');
161
+ params.push(filters.created_before);
162
+ }
163
+ if (filters.min_quality_score !== undefined) {
164
+ conditions.push('processing_quality_score >= ?');
165
+ params.push(filters.min_quality_score);
166
+ }
167
+ if (filters.min_duration_ms !== undefined) {
168
+ conditions.push('processing_duration_ms >= ?');
169
+ params.push(filters.min_duration_ms);
170
+ }
171
+ if (filters.root_document_id !== undefined) {
172
+ conditions.push('root_document_id = ?');
173
+ params.push(filters.root_document_id);
174
+ }
175
+ const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
176
+ // Get total count
177
+ const countStmt = db.prepare(`SELECT COUNT(*) as count FROM provenance ${whereClause}`);
178
+ const countRow = countStmt.get(...params);
179
+ const total = countRow.count;
180
+ // Validate and apply ordering with whitelist guard
181
+ const VALID_ORDER_COLUMNS = new Set(['created_at', 'processing_duration_ms', 'processing_quality_score']);
182
+ const orderBy = filters.order_by ?? 'created_at';
183
+ if (!VALID_ORDER_COLUMNS.has(orderBy)) {
184
+ throw new Error(`Invalid order column: ${orderBy}`);
185
+ }
186
+ const orderDir = filters.order_dir === 'asc' ? 'ASC' : 'DESC';
187
+ const limit = filters.limit ?? 50;
188
+ const offset = filters.offset ?? 0;
189
+ const queryStmt = db.prepare(`SELECT * FROM provenance ${whereClause} ORDER BY ${orderBy} ${orderDir} LIMIT ? OFFSET ?`);
190
+ const rows = queryStmt.all(...params, limit, offset);
191
+ return {
192
+ records: rows.map(rowToProvenance),
193
+ total,
194
+ };
195
+ }
196
+ /**
197
+ * Get aggregate statistics per processor/version
198
+ *
199
+ * Groups by processor and processor_version with AVG, MIN, MAX, SUM, COUNT
200
+ * aggregations on processing_duration_ms and processing_quality_score.
201
+ *
202
+ * @param db - Database connection
203
+ * @param filters - Optional filters for processor, created_after, created_before
204
+ * @returns Array of per-processor stats
205
+ */
206
+ export function getProvenanceProcessorStats(db, filters) {
207
+ const conditions = [];
208
+ const params = [];
209
+ if (filters?.processor !== undefined) {
210
+ conditions.push('processor = ?');
211
+ params.push(filters.processor);
212
+ }
213
+ if (filters?.created_after !== undefined) {
214
+ conditions.push('created_at >= ?');
215
+ params.push(filters.created_after);
216
+ }
217
+ if (filters?.created_before !== undefined) {
218
+ conditions.push('created_at <= ?');
219
+ params.push(filters.created_before);
220
+ }
221
+ const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
222
+ const stmt = db.prepare(`
223
+ SELECT
224
+ processor,
225
+ processor_version,
226
+ COUNT(*) as total_operations,
227
+ COALESCE(AVG(processing_duration_ms), 0) as avg_duration_ms,
228
+ COALESCE(MIN(processing_duration_ms), 0) as min_duration_ms,
229
+ COALESCE(MAX(processing_duration_ms), 0) as max_duration_ms,
230
+ AVG(processing_quality_score) as avg_quality_score,
231
+ COALESCE(SUM(processing_duration_ms), 0) as total_processing_time_ms
232
+ FROM provenance
233
+ ${whereClause}
234
+ GROUP BY processor, processor_version
235
+ ORDER BY total_operations DESC
236
+ `);
237
+ const rows = stmt.all(...params);
238
+ return rows.map((row) => ({
239
+ processor: row.processor,
240
+ processor_version: row.processor_version,
241
+ total_operations: row.total_operations,
242
+ avg_duration_ms: Math.round(row.avg_duration_ms * 100) / 100,
243
+ min_duration_ms: row.min_duration_ms,
244
+ max_duration_ms: row.max_duration_ms,
245
+ avg_quality_score: row.avg_quality_score !== null
246
+ ? Math.round(row.avg_quality_score * 100) / 100
247
+ : null,
248
+ total_processing_time_ms: row.total_processing_time_ms,
249
+ }));
250
+ }
251
+ //# sourceMappingURL=provenance-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance-operations.js","sourceRoot":"","sources":["../../../../src/services/storage/database/provenance-operations.ts"],"names":[],"mappings":"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"}