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,177 @@
1
+ /**
2
+ * Annotation Database Operations
3
+ *
4
+ * CRUD operations for document annotations with threading support.
5
+ * Annotations can be attached to documents or specific chunks, with
6
+ * optional page numbers and threaded replies via parent_id.
7
+ *
8
+ * CRITICAL: NEVER use console.log() - stdout is reserved for JSON-RPC protocol.
9
+ *
10
+ * @module database/annotation-operations
11
+ */
12
+ import { v4 as uuidv4 } from 'uuid';
13
+ // ═══════════════════════════════════════════════════════════════════════════════
14
+ // ANNOTATION CRUD
15
+ // ═══════════════════════════════════════════════════════════════════════════════
16
+ /**
17
+ * Create a new annotation on a document or chunk.
18
+ *
19
+ * @param conn - Database connection
20
+ * @param params - Annotation creation parameters
21
+ * @returns The created annotation row
22
+ * @throws Error if document, chunk, or parent annotation not found
23
+ */
24
+ export function createAnnotation(conn, params) {
25
+ const id = uuidv4();
26
+ const now = new Date().toISOString();
27
+ // Validate document exists
28
+ const doc = conn.prepare('SELECT id FROM documents WHERE id = ?').get(params.document_id);
29
+ if (!doc) {
30
+ throw new Error(`Document not found: ${params.document_id}`);
31
+ }
32
+ // Validate chunk exists if provided
33
+ if (params.chunk_id) {
34
+ const chunk = conn.prepare('SELECT id FROM chunks WHERE id = ?').get(params.chunk_id);
35
+ if (!chunk) {
36
+ throw new Error(`Chunk not found: ${params.chunk_id}`);
37
+ }
38
+ }
39
+ // Validate parent exists if provided (for threaded replies)
40
+ if (params.parent_id) {
41
+ const parent = conn.prepare('SELECT id FROM annotations WHERE id = ?').get(params.parent_id);
42
+ if (!parent) {
43
+ throw new Error(`Parent annotation not found: ${params.parent_id}`);
44
+ }
45
+ }
46
+ conn.prepare(`
47
+ INSERT INTO annotations (id, document_id, user_id, chunk_id, page_number, annotation_type, content, status, parent_id, created_at, updated_at)
48
+ VALUES (?, ?, ?, ?, ?, ?, ?, 'open', ?, ?, ?)
49
+ `).run(id, params.document_id, params.user_id ?? null, params.chunk_id ?? null, params.page_number ?? null, params.annotation_type, params.content, params.parent_id ?? null, now, now);
50
+ return conn.prepare('SELECT * FROM annotations WHERE id = ?').get(id);
51
+ }
52
+ /**
53
+ * Get an annotation by ID.
54
+ *
55
+ * @param conn - Database connection
56
+ * @param id - Annotation ID
57
+ * @returns The annotation row or null if not found
58
+ */
59
+ export function getAnnotation(conn, id) {
60
+ return conn.prepare('SELECT * FROM annotations WHERE id = ?').get(id) ?? null;
61
+ }
62
+ /**
63
+ * Get an annotation with its threaded replies.
64
+ *
65
+ * @param conn - Database connection
66
+ * @param id - Annotation ID
67
+ * @returns The annotation and its replies, or null if not found
68
+ */
69
+ export function getAnnotationWithThread(conn, id) {
70
+ const annotation = getAnnotation(conn, id);
71
+ if (!annotation)
72
+ return null;
73
+ const replies = conn.prepare('SELECT * FROM annotations WHERE parent_id = ? ORDER BY created_at ASC').all(id);
74
+ return { annotation, replies };
75
+ }
76
+ /**
77
+ * List annotations for a document with optional filters.
78
+ *
79
+ * @param conn - Database connection
80
+ * @param opts - Filter and pagination options
81
+ * @returns Paginated annotations and total count
82
+ */
83
+ export function listAnnotations(conn, opts) {
84
+ const conditions = ['document_id = ?'];
85
+ const params = [opts.document_id];
86
+ if (opts.annotation_type) {
87
+ conditions.push('annotation_type = ?');
88
+ params.push(opts.annotation_type);
89
+ }
90
+ if (opts.status) {
91
+ conditions.push('status = ?');
92
+ params.push(opts.status);
93
+ }
94
+ if (opts.user_id) {
95
+ conditions.push('user_id = ?');
96
+ params.push(opts.user_id);
97
+ }
98
+ if (opts.page_number !== undefined) {
99
+ conditions.push('page_number = ?');
100
+ params.push(opts.page_number);
101
+ }
102
+ const where = conditions.join(' AND ');
103
+ const totalRow = conn.prepare(`SELECT COUNT(*) as c FROM annotations WHERE ${where}`).get(...params);
104
+ const limit = Math.min(opts.limit ?? 50, 200);
105
+ const offset = opts.offset ?? 0;
106
+ const annotations = conn.prepare(`SELECT * FROM annotations WHERE ${where} ORDER BY created_at DESC LIMIT ? OFFSET ?`).all(...params, limit, offset);
107
+ return { annotations, total: totalRow.c };
108
+ }
109
+ /**
110
+ * Update an annotation's content and/or status.
111
+ *
112
+ * @param conn - Database connection
113
+ * @param id - Annotation ID
114
+ * @param updates - Fields to update (content and/or status)
115
+ * @returns The updated annotation row
116
+ * @throws Error if annotation not found
117
+ */
118
+ export function updateAnnotation(conn, id, updates) {
119
+ const annotation = getAnnotation(conn, id);
120
+ if (!annotation) {
121
+ throw new Error(`Annotation not found: ${id}`);
122
+ }
123
+ const sets = ['updated_at = ?'];
124
+ const params = [new Date().toISOString()];
125
+ if (updates.content !== undefined) {
126
+ sets.push('content = ?');
127
+ params.push(updates.content);
128
+ }
129
+ if (updates.status !== undefined) {
130
+ sets.push('status = ?');
131
+ params.push(updates.status);
132
+ }
133
+ params.push(id);
134
+ conn.prepare(`UPDATE annotations SET ${sets.join(', ')} WHERE id = ?`).run(...params);
135
+ return conn.prepare('SELECT * FROM annotations WHERE id = ?').get(id);
136
+ }
137
+ /**
138
+ * Delete an annotation by ID.
139
+ * Child annotations (replies) are cascade-deleted by the FK constraint.
140
+ *
141
+ * @param conn - Database connection
142
+ * @param id - Annotation ID
143
+ * @throws Error if annotation not found
144
+ */
145
+ export function deleteAnnotation(conn, id) {
146
+ const annotation = getAnnotation(conn, id);
147
+ if (!annotation) {
148
+ throw new Error(`Annotation not found: ${id}`);
149
+ }
150
+ conn.prepare('DELETE FROM annotations WHERE id = ?').run(id);
151
+ }
152
+ /**
153
+ * Get annotation summary statistics for a document.
154
+ *
155
+ * @param conn - Database connection
156
+ * @param documentId - Document ID
157
+ * @returns Summary with counts by type, status, and totals
158
+ */
159
+ export function getAnnotationSummary(conn, documentId) {
160
+ const byType = conn.prepare(`
161
+ SELECT annotation_type, status, COUNT(*) as count
162
+ FROM annotations WHERE document_id = ?
163
+ GROUP BY annotation_type, status
164
+ `).all(documentId);
165
+ const totalOpen = conn.prepare(`SELECT COUNT(*) as c FROM annotations WHERE document_id = ? AND status = 'open'`).get(documentId);
166
+ const totalResolved = conn.prepare(`SELECT COUNT(*) as c FROM annotations WHERE document_id = ? AND status = 'resolved'`).get(documentId);
167
+ const totalDismissed = conn.prepare(`SELECT COUNT(*) as c FROM annotations WHERE document_id = ? AND status = 'dismissed'`).get(documentId);
168
+ return {
169
+ document_id: documentId,
170
+ total_open: totalOpen.c,
171
+ total_resolved: totalResolved.c,
172
+ total_dismissed: totalDismissed.c,
173
+ total: totalOpen.c + totalResolved.c + totalDismissed.c,
174
+ by_type_and_status: byType,
175
+ };
176
+ }
177
+ //# sourceMappingURL=annotation-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-operations.js","sourceRoot":"","sources":["../../../../src/services/storage/database/annotation-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Approval Chain Database Operations
3
+ *
4
+ * Provides operations for creating reusable approval chains and tracking
5
+ * per-document approval progress through multi-step review processes.
6
+ *
7
+ * An approval chain defines a sequence of steps (roles) that must approve
8
+ * a document. When applied to a document, individual approval_steps rows
9
+ * are created. Steps are processed in order - the next step becomes active
10
+ * only when the previous step is approved.
11
+ *
12
+ * CRITICAL: NEVER use console.log() - stdout is reserved for JSON-RPC protocol.
13
+ *
14
+ * @module database/approval-operations
15
+ */
16
+ import type Database from 'better-sqlite3';
17
+ export interface ApprovalChainRow {
18
+ id: string;
19
+ name: string;
20
+ description: string | null;
21
+ steps_json: string;
22
+ created_at: string;
23
+ created_by: string | null;
24
+ }
25
+ export interface ApprovalStepRow {
26
+ id: string;
27
+ document_id: string;
28
+ chain_id: string;
29
+ step_order: number;
30
+ required_role: string;
31
+ status: string;
32
+ decided_by: string | null;
33
+ decided_at: string | null;
34
+ reason: string | null;
35
+ }
36
+ export interface ApprovalChainStep {
37
+ role: string;
38
+ required_approvals?: number;
39
+ auto_advance?: boolean;
40
+ }
41
+ export interface CreateApprovalChainParams {
42
+ name: string;
43
+ description?: string | null;
44
+ steps: ApprovalChainStep[];
45
+ created_by?: string | null;
46
+ }
47
+ export interface ApprovalProgress {
48
+ chain_id: string;
49
+ chain_name: string;
50
+ document_id: string;
51
+ steps: ApprovalStepRow[];
52
+ total_steps: number;
53
+ completed_steps: number;
54
+ current_step: ApprovalStepRow | null;
55
+ is_complete: boolean;
56
+ is_rejected: boolean;
57
+ }
58
+ /**
59
+ * Create a reusable approval chain with ordered steps.
60
+ *
61
+ * @param conn - Database connection
62
+ * @param params - Chain creation parameters
63
+ * @returns The created approval chain row
64
+ * @throws Error if name is empty or no steps provided
65
+ */
66
+ export declare function createApprovalChain(conn: Database.Database, params: CreateApprovalChainParams): ApprovalChainRow;
67
+ /**
68
+ * Get an approval chain by ID.
69
+ *
70
+ * @param conn - Database connection
71
+ * @param chainId - Approval chain ID
72
+ * @returns The approval chain row or null
73
+ */
74
+ export declare function getApprovalChain(conn: Database.Database, chainId: string): ApprovalChainRow | null;
75
+ /**
76
+ * List all approval chains.
77
+ *
78
+ * @param conn - Database connection
79
+ * @returns Array of approval chain rows
80
+ */
81
+ export declare function listApprovalChains(conn: Database.Database): ApprovalChainRow[];
82
+ /**
83
+ * Apply an approval chain to a document, creating approval_steps rows.
84
+ *
85
+ * Creates one approval_steps row per step in the chain, all starting
86
+ * with 'pending' status. Steps are ordered by step_order.
87
+ *
88
+ * @param conn - Database connection
89
+ * @param documentId - Document ID to apply the chain to
90
+ * @param chainId - Approval chain ID to apply
91
+ * @returns Array of created approval step rows
92
+ * @throws Error if document or chain not found, or chain already applied
93
+ */
94
+ export declare function applyApprovalChain(conn: Database.Database, documentId: string, chainId: string): ApprovalStepRow[];
95
+ /**
96
+ * Get the current (first pending) approval step for a document+chain.
97
+ *
98
+ * @param conn - Database connection
99
+ * @param documentId - Document ID
100
+ * @param chainId - Approval chain ID
101
+ * @returns The first pending step, or null if all steps are decided
102
+ */
103
+ export declare function getCurrentApprovalStep(conn: Database.Database, documentId: string, chainId: string): ApprovalStepRow | null;
104
+ /**
105
+ * Decide on an approval step (approve or reject).
106
+ *
107
+ * On approval: marks the step as 'approved' and returns it.
108
+ * On rejection: marks the step as 'rejected' and skips all subsequent
109
+ * pending steps (sets them to 'skipped').
110
+ *
111
+ * @param conn - Database connection
112
+ * @param stepId - Approval step ID to decide on
113
+ * @param decision - 'approved' or 'rejected'
114
+ * @param userId - User ID making the decision
115
+ * @param reason - Optional reason (required for rejection)
116
+ * @returns The updated approval step row
117
+ * @throws Error if step not found, not pending, or not the current step
118
+ */
119
+ export declare function decideApprovalStep(conn: Database.Database, stepId: string, decision: 'approved' | 'rejected', userId: string, reason?: string | null): ApprovalStepRow;
120
+ /**
121
+ * Get approval progress for a document and chain.
122
+ *
123
+ * Returns all steps with summary counts and the current pending step.
124
+ *
125
+ * @param conn - Database connection
126
+ * @param documentId - Document ID
127
+ * @param chainId - Approval chain ID
128
+ * @returns Approval progress with steps and summary
129
+ * @throws Error if chain not found or not applied to document
130
+ */
131
+ export declare function getApprovalProgress(conn: Database.Database, documentId: string, chainId: string): ApprovalProgress;
132
+ //# sourceMappingURL=approval-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-operations.d.ts","sourceRoot":"","sources":["../../../../src/services/storage/database/approval-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Approval Chain Database Operations
3
+ *
4
+ * Provides operations for creating reusable approval chains and tracking
5
+ * per-document approval progress through multi-step review processes.
6
+ *
7
+ * An approval chain defines a sequence of steps (roles) that must approve
8
+ * a document. When applied to a document, individual approval_steps rows
9
+ * are created. Steps are processed in order - the next step becomes active
10
+ * only when the previous step is approved.
11
+ *
12
+ * CRITICAL: NEVER use console.log() - stdout is reserved for JSON-RPC protocol.
13
+ *
14
+ * @module database/approval-operations
15
+ */
16
+ import { v4 as uuidv4 } from 'uuid';
17
+ // =============================================================================
18
+ // APPROVAL CHAIN OPERATIONS
19
+ // =============================================================================
20
+ /**
21
+ * Create a reusable approval chain with ordered steps.
22
+ *
23
+ * @param conn - Database connection
24
+ * @param params - Chain creation parameters
25
+ * @returns The created approval chain row
26
+ * @throws Error if name is empty or no steps provided
27
+ */
28
+ export function createApprovalChain(conn, params) {
29
+ if (!params.steps || params.steps.length === 0) {
30
+ throw new Error('Approval chain must have at least one step');
31
+ }
32
+ const id = uuidv4();
33
+ const now = new Date().toISOString();
34
+ const stepsJson = JSON.stringify(params.steps);
35
+ conn.prepare(`
36
+ INSERT INTO approval_chains (id, name, description, steps_json, created_at, created_by)
37
+ VALUES (?, ?, ?, ?, ?, ?)
38
+ `).run(id, params.name, params.description ?? null, stepsJson, now, params.created_by ?? null);
39
+ return conn.prepare('SELECT * FROM approval_chains WHERE id = ?').get(id);
40
+ }
41
+ /**
42
+ * Get an approval chain by ID.
43
+ *
44
+ * @param conn - Database connection
45
+ * @param chainId - Approval chain ID
46
+ * @returns The approval chain row or null
47
+ */
48
+ export function getApprovalChain(conn, chainId) {
49
+ return conn.prepare('SELECT * FROM approval_chains WHERE id = ?').get(chainId) ?? null;
50
+ }
51
+ /**
52
+ * List all approval chains.
53
+ *
54
+ * @param conn - Database connection
55
+ * @returns Array of approval chain rows
56
+ */
57
+ export function listApprovalChains(conn) {
58
+ return conn.prepare('SELECT * FROM approval_chains ORDER BY created_at DESC').all();
59
+ }
60
+ /**
61
+ * Apply an approval chain to a document, creating approval_steps rows.
62
+ *
63
+ * Creates one approval_steps row per step in the chain, all starting
64
+ * with 'pending' status. Steps are ordered by step_order.
65
+ *
66
+ * @param conn - Database connection
67
+ * @param documentId - Document ID to apply the chain to
68
+ * @param chainId - Approval chain ID to apply
69
+ * @returns Array of created approval step rows
70
+ * @throws Error if document or chain not found, or chain already applied
71
+ */
72
+ export function applyApprovalChain(conn, documentId, chainId) {
73
+ // Validate document exists
74
+ const doc = conn.prepare('SELECT id FROM documents WHERE id = ?').get(documentId);
75
+ if (!doc) {
76
+ throw new Error(`Document not found: ${documentId}`);
77
+ }
78
+ // Validate chain exists
79
+ const chain = getApprovalChain(conn, chainId);
80
+ if (!chain) {
81
+ throw new Error(`Approval chain not found: ${chainId}`);
82
+ }
83
+ // Check if chain is already applied to this document
84
+ const existing = conn.prepare('SELECT id FROM approval_steps WHERE document_id = ? AND chain_id = ? LIMIT 1').get(documentId, chainId);
85
+ if (existing) {
86
+ throw new Error(`Approval chain "${chain.name}" is already applied to document ${documentId}`);
87
+ }
88
+ const steps = JSON.parse(chain.steps_json);
89
+ const createdSteps = [];
90
+ const insertStmt = conn.prepare(`
91
+ INSERT INTO approval_steps (id, document_id, chain_id, step_order, required_role, status, decided_by, decided_at, reason)
92
+ VALUES (?, ?, ?, ?, ?, 'pending', NULL, NULL, NULL)
93
+ `);
94
+ const getStmt = conn.prepare('SELECT * FROM approval_steps WHERE id = ?');
95
+ for (let i = 0; i < steps.length; i++) {
96
+ const stepId = uuidv4();
97
+ insertStmt.run(stepId, documentId, chainId, i + 1, steps[i].role);
98
+ createdSteps.push(getStmt.get(stepId));
99
+ }
100
+ return createdSteps;
101
+ }
102
+ /**
103
+ * Get the current (first pending) approval step for a document+chain.
104
+ *
105
+ * @param conn - Database connection
106
+ * @param documentId - Document ID
107
+ * @param chainId - Approval chain ID
108
+ * @returns The first pending step, or null if all steps are decided
109
+ */
110
+ export function getCurrentApprovalStep(conn, documentId, chainId) {
111
+ return conn.prepare(`
112
+ SELECT * FROM approval_steps
113
+ WHERE document_id = ? AND chain_id = ? AND status = 'pending'
114
+ ORDER BY step_order ASC
115
+ LIMIT 1
116
+ `).get(documentId, chainId) ?? null;
117
+ }
118
+ /**
119
+ * Decide on an approval step (approve or reject).
120
+ *
121
+ * On approval: marks the step as 'approved' and returns it.
122
+ * On rejection: marks the step as 'rejected' and skips all subsequent
123
+ * pending steps (sets them to 'skipped').
124
+ *
125
+ * @param conn - Database connection
126
+ * @param stepId - Approval step ID to decide on
127
+ * @param decision - 'approved' or 'rejected'
128
+ * @param userId - User ID making the decision
129
+ * @param reason - Optional reason (required for rejection)
130
+ * @returns The updated approval step row
131
+ * @throws Error if step not found, not pending, or not the current step
132
+ */
133
+ export function decideApprovalStep(conn, stepId, decision, userId, reason) {
134
+ const step = conn.prepare('SELECT * FROM approval_steps WHERE id = ?').get(stepId);
135
+ if (!step) {
136
+ throw new Error(`Approval step not found: ${stepId}`);
137
+ }
138
+ if (step.status !== 'pending') {
139
+ throw new Error(`Approval step ${stepId} is already "${step.status}" and cannot be decided`);
140
+ }
141
+ // Ensure this is the current step (lowest pending step_order for this doc+chain)
142
+ const currentStep = getCurrentApprovalStep(conn, step.document_id, step.chain_id);
143
+ if (!currentStep || currentStep.id !== stepId) {
144
+ throw new Error(`Step ${stepId} (order ${step.step_order}) is not the current step. ` +
145
+ `Steps must be decided in order.`);
146
+ }
147
+ if (decision === 'rejected' && !reason) {
148
+ throw new Error('Reason is required when rejecting an approval step');
149
+ }
150
+ const now = new Date().toISOString();
151
+ // Update the step
152
+ conn.prepare(`
153
+ UPDATE approval_steps SET status = ?, decided_by = ?, decided_at = ?, reason = ?
154
+ WHERE id = ?
155
+ `).run(decision, userId, now, reason ?? null, stepId);
156
+ // On rejection, skip all subsequent pending steps
157
+ if (decision === 'rejected') {
158
+ conn.prepare(`
159
+ UPDATE approval_steps
160
+ SET status = 'skipped', decided_at = ?, reason = 'Skipped due to rejection at step ' || ?
161
+ WHERE document_id = ? AND chain_id = ? AND step_order > ? AND status = 'pending'
162
+ `).run(now, step.step_order, step.document_id, step.chain_id, step.step_order);
163
+ }
164
+ return conn.prepare('SELECT * FROM approval_steps WHERE id = ?').get(stepId);
165
+ }
166
+ /**
167
+ * Get approval progress for a document and chain.
168
+ *
169
+ * Returns all steps with summary counts and the current pending step.
170
+ *
171
+ * @param conn - Database connection
172
+ * @param documentId - Document ID
173
+ * @param chainId - Approval chain ID
174
+ * @returns Approval progress with steps and summary
175
+ * @throws Error if chain not found or not applied to document
176
+ */
177
+ export function getApprovalProgress(conn, documentId, chainId) {
178
+ const chain = getApprovalChain(conn, chainId);
179
+ if (!chain) {
180
+ throw new Error(`Approval chain not found: ${chainId}`);
181
+ }
182
+ const steps = conn.prepare(`
183
+ SELECT * FROM approval_steps
184
+ WHERE document_id = ? AND chain_id = ?
185
+ ORDER BY step_order ASC
186
+ `).all(documentId, chainId);
187
+ if (steps.length === 0) {
188
+ throw new Error(`Approval chain "${chain.name}" has not been applied to document ${documentId}`);
189
+ }
190
+ const completedSteps = steps.filter((s) => s.status === 'approved' || s.status === 'rejected' || s.status === 'skipped').length;
191
+ const currentStep = steps.find((s) => s.status === 'pending') ?? null;
192
+ const isRejected = steps.some((s) => s.status === 'rejected');
193
+ const isComplete = currentStep === null;
194
+ return {
195
+ chain_id: chainId,
196
+ chain_name: chain.name,
197
+ document_id: documentId,
198
+ steps,
199
+ total_steps: steps.length,
200
+ completed_steps: completedSteps,
201
+ current_step: currentStep,
202
+ is_complete: isComplete,
203
+ is_rejected: isRejected,
204
+ };
205
+ }
206
+ //# sourceMappingURL=approval-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-operations.js","sourceRoot":"","sources":["../../../../src/services/storage/database/approval-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Chunk operations for DatabaseService
3
+ *
4
+ * Handles all CRUD operations for text chunks including
5
+ * batch inserts, embedding status updates, filtered queries,
6
+ * and neighbor lookups.
7
+ */
8
+ import Database from 'better-sqlite3';
9
+ import { Chunk } from '../../../models/chunk.js';
10
+ /**
11
+ * Filter options for getChunksFiltered
12
+ */
13
+ export interface ChunkFilterOptions {
14
+ section_path_filter?: string;
15
+ heading_filter?: string;
16
+ content_type_filter?: string[];
17
+ min_quality_score?: number;
18
+ embedding_status?: 'pending' | 'complete' | 'failed';
19
+ is_atomic?: boolean;
20
+ page_range?: {
21
+ min_page?: number;
22
+ max_page?: number;
23
+ };
24
+ limit?: number;
25
+ offset?: number;
26
+ include_text?: boolean;
27
+ }
28
+ /**
29
+ * Insert a chunk
30
+ *
31
+ * @param db - Database connection
32
+ * @param chunk - Chunk data (created_at, embedding_status, embedded_at will be generated)
33
+ * @param updateMetadataCounts - Callback to update metadata counts
34
+ * @returns string - The chunk ID
35
+ */
36
+ export declare function insertChunk(db: Database.Database, chunk: Omit<Chunk, 'created_at' | 'embedding_status' | 'embedded_at'>, updateMetadataCounts: () => void): string;
37
+ /**
38
+ * Insert multiple chunks in a batch transaction
39
+ *
40
+ * @param db - Database connection
41
+ * @param chunks - Array of chunk data
42
+ * @param updateMetadataCounts - Callback to update metadata counts
43
+ * @param transaction - Transaction wrapper function
44
+ * @returns string[] - Array of chunk IDs
45
+ */
46
+ export declare function insertChunks(db: Database.Database, chunks: Omit<Chunk, 'created_at' | 'embedding_status' | 'embedded_at'>[], updateMetadataCounts: () => void, transaction: <T>(fn: () => T) => T): string[];
47
+ /**
48
+ * Get a chunk by ID
49
+ *
50
+ * @param db - Database connection
51
+ * @param id - Chunk ID
52
+ * @returns Chunk | null - The chunk or null if not found
53
+ */
54
+ export declare function getChunk(db: Database.Database, id: string): Chunk | null;
55
+ /**
56
+ * Check if a document has any chunks (M-9: avoids loading all chunk rows)
57
+ *
58
+ * @param db - Database connection
59
+ * @param documentId - Document ID
60
+ * @returns boolean - true if document has at least one chunk
61
+ */
62
+ export declare function hasChunksByDocumentId(db: Database.Database, documentId: string): boolean;
63
+ /**
64
+ * Get all chunks for a document
65
+ *
66
+ * @param db - Database connection
67
+ * @param documentId - Document ID
68
+ * @returns Chunk[] - Array of chunks ordered by chunk_index
69
+ */
70
+ export declare function getChunksByDocumentId(db: Database.Database, documentId: string, options?: {
71
+ limit?: number;
72
+ offset?: number;
73
+ }): Chunk[];
74
+ /**
75
+ * Get all chunks for an OCR result
76
+ *
77
+ * @param db - Database connection
78
+ * @param ocrResultId - OCR result ID
79
+ * @returns Chunk[] - Array of chunks ordered by chunk_index
80
+ */
81
+ export declare function getChunksByOCRResultId(db: Database.Database, ocrResultId: string, options?: {
82
+ limit?: number;
83
+ offset?: number;
84
+ }): Chunk[];
85
+ /**
86
+ * Get chunks pending embedding generation
87
+ *
88
+ * @param db - Database connection
89
+ * @param limit - Optional maximum number of chunks to return
90
+ * @returns Chunk[] - Array of pending chunks
91
+ */
92
+ export declare function getPendingEmbeddingChunks(db: Database.Database, limit?: number): Chunk[];
93
+ /**
94
+ * Update chunk embedding status
95
+ *
96
+ * @param db - Database connection
97
+ * @param id - Chunk ID
98
+ * @param status - New embedding status
99
+ * @param embeddedAt - Optional ISO 8601 timestamp when embedded
100
+ * @param updateMetadataModified - Callback to update metadata modified timestamp
101
+ */
102
+ export declare function updateChunkEmbeddingStatus(db: Database.Database, id: string, status: 'pending' | 'complete' | 'failed', embeddedAt: string | undefined, updateMetadataModified: () => void): void;
103
+ /**
104
+ * Get chunks for a document with dynamic filtering.
105
+ *
106
+ * Builds a parameterized WHERE clause from the provided filters.
107
+ * For content_type_filter, uses LIKE matching against the JSON-encoded
108
+ * content_types column (e.g., content_types LIKE '%table%').
109
+ *
110
+ * @param db - Database connection
111
+ * @param documentId - Document ID to filter by
112
+ * @param filters - Filter options
113
+ * @returns Object with chunks array and total count
114
+ */
115
+ export declare function getChunksFiltered(db: Database.Database, documentId: string, filters: ChunkFilterOptions): {
116
+ chunks: Chunk[];
117
+ total: number;
118
+ };
119
+ /**
120
+ * Get neighboring chunks around a given chunk index for context building.
121
+ *
122
+ * Returns chunks with chunk_index in range [chunkIndex - count, chunkIndex + count],
123
+ * ordered by chunk_index.
124
+ *
125
+ * @param db - Database connection
126
+ * @param documentId - Document ID
127
+ * @param chunkIndex - Center chunk index
128
+ * @param count - Number of neighbors on each side
129
+ * @returns Chunk[] - Array of neighboring chunks (including center)
130
+ */
131
+ export declare function getChunkNeighbors(db: Database.Database, documentId: string, chunkIndex: number, count: number): Chunk[];
132
+ //# sourceMappingURL=chunk-operations.d.ts.map