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,483 @@
1
+ /**
2
+ * Gemini API Client
3
+ * Implements the client patterns from gemini-flash-3-dev-guide.md
4
+ *
5
+ * Modes:
6
+ * - fast(): <2s target, temperature 0.0, JSON output
7
+ * - thinking(): 3-8s target, extended reasoning with thinkingLevel
8
+ * - multimodal(): 5-15s target, image/PDF analysis
9
+ */
10
+ import { GoogleGenAI } from '@google/genai';
11
+ import * as fs from 'fs';
12
+ import * as path from 'path';
13
+ import { loadGeminiConfig, GENERATION_PRESETS, ALLOWED_MIME_TYPES, MAX_FILE_SIZE, } from './config.js';
14
+ import { GeminiRateLimiter, estimateTokens } from './rate-limiter.js';
15
+ import { CircuitBreaker, CircuitBreakerOpenError } from './circuit-breaker.js';
16
+ // Re-export error type
17
+ export { CircuitBreakerOpenError };
18
+ /** Maximum number of entries in the in-memory context cache. */
19
+ const MAX_CACHE_SIZE = 50;
20
+ // ---- Shared singletons for rate limiting and circuit breaking ----
21
+ // These MUST be shared across all GeminiClient instances so that
22
+ // rate limits and circuit breaker state accumulate correctly.
23
+ let _sharedRateLimiter = null;
24
+ let _sharedCircuitBreaker = null;
25
+ let _sharedClient = null;
26
+ function getSharedRateLimiter() {
27
+ if (!_sharedRateLimiter) {
28
+ _sharedRateLimiter = new GeminiRateLimiter();
29
+ }
30
+ return _sharedRateLimiter;
31
+ }
32
+ function getSharedCircuitBreaker(config) {
33
+ if (!_sharedCircuitBreaker) {
34
+ _sharedCircuitBreaker = new CircuitBreaker(config);
35
+ }
36
+ return _sharedCircuitBreaker;
37
+ }
38
+ /**
39
+ * Get a shared GeminiClient singleton.
40
+ * Use this instead of `new GeminiClient()` for default config.
41
+ * Rate limiter and circuit breaker state persist across calls.
42
+ */
43
+ export function getSharedClient() {
44
+ if (!_sharedClient) {
45
+ _sharedClient = new GeminiClient();
46
+ }
47
+ return _sharedClient;
48
+ }
49
+ /** Reset all shared state (for testing) */
50
+ export function resetSharedClient() {
51
+ _sharedRateLimiter = null;
52
+ _sharedCircuitBreaker = null;
53
+ _sharedClient = null;
54
+ }
55
+ /**
56
+ * Gemini Client with rate limiting and circuit breaker
57
+ */
58
+ export class GeminiClient {
59
+ client;
60
+ config;
61
+ rateLimiter;
62
+ circuitBreaker;
63
+ _contextCache = new Map();
64
+ constructor(configOverrides) {
65
+ this.config = loadGeminiConfig(configOverrides);
66
+ if (!this.config.apiKey) {
67
+ throw new Error('GEMINI_API_KEY is required. Set it in .env file.');
68
+ }
69
+ this.client = new GoogleGenAI({
70
+ apiKey: this.config.apiKey,
71
+ httpOptions: { timeout: 600_000 },
72
+ });
73
+ // Use shared singletons so rate limits and circuit breaker state
74
+ // accumulate across all callers (tools, services, etc.)
75
+ this.rateLimiter = getSharedRateLimiter();
76
+ this.circuitBreaker = getSharedCircuitBreaker({
77
+ failureThreshold: this.config.circuitBreaker.failureThreshold,
78
+ recoveryTimeMs: this.config.circuitBreaker.recoveryTimeMs,
79
+ });
80
+ }
81
+ /**
82
+ * Fast mode: <2s target, temperature 0.0, JSON output
83
+ * Use for quick analysis tasks
84
+ *
85
+ * @param prompt - Text prompt
86
+ * @param schema - Optional JSON response schema
87
+ * @param options - Optional overrides (e.g. maxOutputTokens for large structured extraction)
88
+ */
89
+ async fast(prompt, schema, options) {
90
+ return this.generate([{ text: prompt }], {
91
+ ...GENERATION_PRESETS.fast,
92
+ maxOutputTokens: options?.maxOutputTokens ?? GENERATION_PRESETS.fast.maxOutputTokens,
93
+ responseSchema: schema,
94
+ requestTimeout: options?.requestTimeout,
95
+ });
96
+ }
97
+ /**
98
+ * Thinking mode: 3-8s target, extended reasoning
99
+ * Uses Gemini 3's thinkingLevel (HIGH or MINIMAL)
100
+ */
101
+ async thinking(prompt, level = 'HIGH') {
102
+ const preset = GENERATION_PRESETS.thinking(level);
103
+ return this.generate([{ text: prompt }], preset);
104
+ }
105
+ /**
106
+ * Multimodal mode: analyze image with prompt
107
+ * 5-15s target, supports images and PDFs
108
+ */
109
+ async analyzeImage(prompt, file, options = {}) {
110
+ const parts = [
111
+ { text: prompt },
112
+ {
113
+ inlineData: {
114
+ mimeType: file.mimeType,
115
+ data: file.data,
116
+ },
117
+ },
118
+ ];
119
+ const mediaResolution = options.mediaResolution || this.config.mediaResolution;
120
+ // When thinkingConfig is present, do NOT use the multimodal preset
121
+ // because its responseMimeType: 'application/json' is incompatible
122
+ // with thinking mode. Use a minimal config instead.
123
+ if (options.thinkingConfig) {
124
+ return this.generate(parts, {
125
+ temperature: 0.0,
126
+ maxOutputTokens: 16384,
127
+ thinkingConfig: options.thinkingConfig,
128
+ mediaResolution,
129
+ });
130
+ }
131
+ return this.generate(parts, {
132
+ ...GENERATION_PRESETS.multimodal,
133
+ responseSchema: options.schema,
134
+ mediaResolution,
135
+ });
136
+ }
137
+ /**
138
+ * Analyze a PDF document
139
+ */
140
+ async analyzePDF(prompt, file, schema) {
141
+ if (file.mimeType !== 'application/pdf') {
142
+ throw new Error('File must be a PDF (application/pdf)');
143
+ }
144
+ return this.analyzeImage(prompt, file, {
145
+ schema,
146
+ mediaResolution: 'MEDIA_RESOLUTION_HIGH', // Always high for PDFs
147
+ });
148
+ }
149
+ /**
150
+ * Core generation method with retry logic
151
+ */
152
+ async generate(parts, options) {
153
+ const startTime = Date.now();
154
+ // Estimate tokens for rate limiting
155
+ const estimatedTokens = this.estimateRequestTokens(parts, options.mediaResolution);
156
+ // Acquire rate limit
157
+ await this.rateLimiter.acquire(estimatedTokens);
158
+ // Execute with circuit breaker and retry
159
+ const response = await this.circuitBreaker.execute(() => this.executeWithRetry(parts, options, estimatedTokens));
160
+ return {
161
+ ...response,
162
+ processingTimeMs: Date.now() - startTime,
163
+ };
164
+ }
165
+ /**
166
+ * Execute request with exponential backoff retry
167
+ */
168
+ async executeWithRetry(parts, options, estimatedTokens) {
169
+ const { maxAttempts, baseDelayMs, maxDelayMs } = this.config.retry;
170
+ let lastError = null;
171
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
172
+ try {
173
+ // Estimate input size for logging
174
+ const inputChars = parts.reduce((sum, p) => sum + (p.text?.length ?? 0), 0);
175
+ console.error(`[GeminiClient] Attempt ${attempt + 1}/${maxAttempts}: ${inputChars} input chars, maxOutputTokens=${options.maxOutputTokens ?? 'default'}`);
176
+ const requestConfig = this.buildGenerationConfig(options);
177
+ // Per-request timeout override via httpOptions
178
+ if (options.requestTimeout) {
179
+ requestConfig.httpOptions = { timeout: options.requestTimeout };
180
+ }
181
+ const response = await this.client.models.generateContent({
182
+ model: this.config.model,
183
+ contents: [{ role: 'user', parts }],
184
+ config: requestConfig,
185
+ });
186
+ const text = response.text ?? '';
187
+ const usageMetadata = response.usageMetadata;
188
+ const usage = {
189
+ inputTokens: usageMetadata?.promptTokenCount ?? 0,
190
+ outputTokens: usageMetadata?.candidatesTokenCount ?? 0,
191
+ cachedTokens: usageMetadata?.cachedContentTokenCount ?? 0,
192
+ thinkingTokens: usageMetadata?.thoughtsTokenCount ?? 0,
193
+ totalTokens: usageMetadata?.totalTokenCount ?? 0,
194
+ };
195
+ // Update rate limiter with actual usage
196
+ this.rateLimiter.recordUsage(estimatedTokens, usage.totalTokens);
197
+ // Gemini 3 Flash known issue: returns HTTP 200 with finishReason=STOP
198
+ // but empty content parts or malformed JSON. Retry on bad responses
199
+ // instead of returning garbage that will cause downstream parse failures.
200
+ const hasJsonMode = options.responseMimeType === 'application/json' || options.responseSchema;
201
+ if (!text || text.trim().length === 0) {
202
+ if (hasJsonMode && attempt < maxAttempts - 1) {
203
+ const delay = Math.min(baseDelayMs * Math.pow(2, attempt), maxDelayMs);
204
+ console.error(`[GeminiClient] Empty response from Gemini (attempt ${attempt + 1}/${maxAttempts}, ` +
205
+ `inputTokens=${usage.inputTokens}, outputTokens=${usage.outputTokens}). ` +
206
+ `Known Gemini 3 Flash issue. Retrying in ${delay}ms...`);
207
+ await this.sleep(delay);
208
+ continue;
209
+ }
210
+ // Last attempt or non-JSON mode: return whatever we got
211
+ console.error(`[GeminiClient] Empty response on final attempt (${attempt + 1}/${maxAttempts}). ` +
212
+ `inputTokens=${usage.inputTokens}, outputTokens=${usage.outputTokens}`);
213
+ }
214
+ else if (hasJsonMode && attempt < maxAttempts - 1) {
215
+ // Validate JSON when JSON mode is active. Gemini sometimes returns
216
+ // truncated or whitespace-padded JSON that passes the empty check
217
+ // but fails JSON.parse. Retry instead of returning garbage.
218
+ const cleaned = text.replace(/```json\n?|\n?```/g, '').trim();
219
+ try {
220
+ JSON.parse(cleaned);
221
+ }
222
+ catch (parseError) {
223
+ const delay = Math.min(baseDelayMs * Math.pow(2, attempt), maxDelayMs);
224
+ console.error(`[GeminiClient] Malformed JSON response from Gemini (attempt ${attempt + 1}/${maxAttempts}, ` +
225
+ `inputTokens=${usage.inputTokens}, outputTokens=${usage.outputTokens}, ` +
226
+ `responseLength=${text.length}, parseError=${parseError instanceof Error ? parseError.message : String(parseError)}). Retrying in ${delay}ms...`);
227
+ await this.sleep(delay);
228
+ continue;
229
+ }
230
+ }
231
+ return { text, usage, model: this.config.model };
232
+ }
233
+ catch (error) {
234
+ lastError = error;
235
+ const errorMessage = lastError.message || String(error);
236
+ // Log detailed cause chain for network errors
237
+ const cause = error?.cause;
238
+ const causeMsg = cause ? ` cause=${cause.message || cause.constructor?.name}` : '';
239
+ const causeCode = cause?.code
240
+ ? ` code=${cause.code}`
241
+ : '';
242
+ console.error(`[GeminiClient] Attempt ${attempt + 1}/${maxAttempts} failed: ${errorMessage}${causeMsg}${causeCode}`);
243
+ // Check for rate limit error (429) or server errors (500/502/503).
244
+ // These all indicate server-side issues and get extended backoff.
245
+ const isServerStatus = /\b(429|500|502|503)\b/.test(errorMessage) ||
246
+ errorMessage.toLowerCase().includes('rate limit') ||
247
+ /server.?(error|overloaded|unavailable)|service.?unavailable|internal.?server/i.test(errorMessage);
248
+ if (isServerStatus) {
249
+ const delay = Math.min(baseDelayMs * Math.pow(2, attempt + 1), maxDelayMs);
250
+ const statusMatch = errorMessage.match(/\b(429|500|502|503)\b/);
251
+ const label = statusMatch ? `HTTP ${statusMatch[1]}` : 'server error';
252
+ console.error(`[GeminiClient] ${label}, waiting ${delay}ms`);
253
+ await this.sleep(delay);
254
+ continue;
255
+ }
256
+ // Check for context length error - don't retry
257
+ if (errorMessage.toLowerCase().includes('context length')) {
258
+ throw new Error('Context length exceeded. Consider batching the request.');
259
+ }
260
+ // Network errors get longer retry delays
261
+ const isNetworkError = /fetch failed|ECONNRESET|ETIMEDOUT|ENOTFOUND|socket hang up/i.test(`${errorMessage} ${cause?.message ?? ''}`);
262
+ if (attempt < maxAttempts - 1) {
263
+ const multiplier = isNetworkError ? 3 : 1;
264
+ const delay = Math.min(baseDelayMs * Math.pow(2, attempt) * multiplier, maxDelayMs);
265
+ console.error(`[GeminiClient] ${isNetworkError ? 'Network error, ' : ''}retrying in ${delay}ms`);
266
+ await this.sleep(delay);
267
+ }
268
+ }
269
+ }
270
+ throw lastError || new Error('All retry attempts failed');
271
+ }
272
+ /**
273
+ * Build generation config from options
274
+ */
275
+ buildGenerationConfig(options) {
276
+ const config = {
277
+ temperature: options.temperature ?? this.config.temperature,
278
+ maxOutputTokens: options.maxOutputTokens ?? this.config.maxOutputTokens,
279
+ };
280
+ if (options.responseMimeType) {
281
+ config.responseMimeType = options.responseMimeType;
282
+ }
283
+ if (options.responseSchema) {
284
+ config.responseSchema = options.responseSchema;
285
+ }
286
+ if (options.thinkingConfig) {
287
+ config.thinkingConfig = options.thinkingConfig;
288
+ }
289
+ if (options.mediaResolution) {
290
+ config.mediaResolution = options.mediaResolution;
291
+ }
292
+ return config;
293
+ }
294
+ /**
295
+ * Estimate tokens for a request
296
+ */
297
+ estimateRequestTokens(parts, mediaResolution) {
298
+ let textLength = 0;
299
+ let imageCount = 0;
300
+ for (const part of parts) {
301
+ if (part.text) {
302
+ textLength += part.text.length;
303
+ }
304
+ else if (part.inlineData) {
305
+ imageCount++;
306
+ }
307
+ }
308
+ const highRes = mediaResolution !== 'MEDIA_RESOLUTION_LOW';
309
+ return estimateTokens(textLength, imageCount, highRes);
310
+ }
311
+ /**
312
+ * Create FileRef from a file path
313
+ */
314
+ static fileRefFromPath(filePath) {
315
+ const ext = path.extname(filePath).toLowerCase().slice(1);
316
+ const mimeTypes = {
317
+ pdf: 'application/pdf',
318
+ png: 'image/png',
319
+ jpg: 'image/jpeg',
320
+ jpeg: 'image/jpeg',
321
+ gif: 'image/gif',
322
+ webp: 'image/webp',
323
+ };
324
+ const mimeType = mimeTypes[ext];
325
+ if (!mimeType) {
326
+ throw new Error(`Unsupported image format for VLM: '${ext}' (file: ${path.basename(filePath)}). ` +
327
+ `Gemini accepts: png, jpg, jpeg, gif, webp, pdf. ` +
328
+ `To convert EMF/WMF images, install LibreOffice: sudo apt install libreoffice-core`);
329
+ }
330
+ // Block scope lets buffer be GC'd before the base64 string is returned,
331
+ // avoiding ~2.33x file-size peak memory per call.
332
+ let sizeBytes;
333
+ let data;
334
+ {
335
+ const buffer = fs.readFileSync(filePath);
336
+ if (buffer.length > MAX_FILE_SIZE) {
337
+ throw new Error(`File too large: ${buffer.length} bytes. Max: ${MAX_FILE_SIZE} (20MB)`);
338
+ }
339
+ sizeBytes = buffer.length;
340
+ data = buffer.toString('base64');
341
+ }
342
+ return { mimeType, data, sizeBytes };
343
+ }
344
+ /**
345
+ * Create FileRef from a buffer
346
+ */
347
+ static fileRefFromBuffer(buffer, mimeType) {
348
+ if (!ALLOWED_MIME_TYPES.includes(mimeType)) {
349
+ throw new Error(`Unsupported MIME type: ${mimeType}. Allowed: ${ALLOWED_MIME_TYPES.join(', ')}`);
350
+ }
351
+ if (buffer.length > MAX_FILE_SIZE) {
352
+ throw new Error(`File too large: ${buffer.length} bytes. Max: ${MAX_FILE_SIZE} (20MB)`);
353
+ }
354
+ const sizeBytes = buffer.length;
355
+ const data = buffer.toString('base64');
356
+ return { mimeType, data, sizeBytes };
357
+ }
358
+ /**
359
+ * Create cached content for document context.
360
+ * Used when processing multiple images from the same document -
361
+ * cache the OCR text context once, then reference it for each image.
362
+ *
363
+ * @param contextText - Document OCR text to cache
364
+ * @param ttlSeconds - Cache TTL in seconds (default: 3600 = 1 hour)
365
+ * @returns Cache identifier for use with generateWithCache()
366
+ */
367
+ async createCachedContent(contextText, ttlSeconds = 3600) {
368
+ // Gemini Caching API requires minimum 1024 tokens (~4096 chars)
369
+ if (contextText.length < 4096) {
370
+ throw new Error('Context text too short for caching (minimum ~4096 characters / 1024 tokens). Use direct generation instead.');
371
+ }
372
+ // Periodic TTL cleanup: evict any expired entries before adding new ones
373
+ this.cleanExpiredCacheEntries();
374
+ // Evict oldest entry if at capacity
375
+ if (this._contextCache.size >= MAX_CACHE_SIZE) {
376
+ let oldestKey = null;
377
+ let oldestTime = Infinity;
378
+ for (const [key, entry] of this._contextCache) {
379
+ if (entry.createdAt < oldestTime) {
380
+ oldestTime = entry.createdAt;
381
+ oldestKey = key;
382
+ }
383
+ }
384
+ if (oldestKey) {
385
+ this._contextCache.delete(oldestKey);
386
+ console.error(`[GeminiClient] Cache at capacity (${MAX_CACHE_SIZE}), evicted oldest entry: ${oldestKey}`);
387
+ }
388
+ }
389
+ const cacheId = `cache_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
390
+ // Store context in memory for this session
391
+ this._contextCache.set(cacheId, {
392
+ text: contextText,
393
+ createdAt: Date.now(),
394
+ ttlMs: ttlSeconds * 1000,
395
+ });
396
+ console.error(`[GeminiClient] Created context cache ${cacheId} (${contextText.length} chars, TTL ${ttlSeconds}s, size=${this._contextCache.size}/${MAX_CACHE_SIZE})`);
397
+ return cacheId;
398
+ }
399
+ /**
400
+ * Remove all expired entries from the context cache.
401
+ * Called as periodic cleanup when createCachedContent is invoked.
402
+ */
403
+ cleanExpiredCacheEntries() {
404
+ const now = Date.now();
405
+ let evicted = 0;
406
+ for (const [key, entry] of this._contextCache) {
407
+ if (now - entry.createdAt > entry.ttlMs) {
408
+ this._contextCache.delete(key);
409
+ evicted++;
410
+ }
411
+ }
412
+ if (evicted > 0) {
413
+ console.error(`[GeminiClient] TTL cleanup: evicted ${evicted} expired cache entries`);
414
+ }
415
+ }
416
+ /**
417
+ * Generate content using cached context + new image.
418
+ * Prepends cached text context to the image analysis prompt.
419
+ */
420
+ async generateWithCache(cacheId, prompt, file, options = {}) {
421
+ const cached = this._contextCache.get(cacheId);
422
+ if (!cached) {
423
+ throw new Error(`Cache not found: ${cacheId}. Create a cache first with createCachedContent().`);
424
+ }
425
+ // Check TTL
426
+ if (Date.now() - cached.createdAt > cached.ttlMs) {
427
+ this._contextCache.delete(cacheId);
428
+ throw new Error(`Cache expired: ${cacheId}. Recreate with createCachedContent().`);
429
+ }
430
+ // Prepend cached context to prompt
431
+ const contextualPrompt = `Document context (from OCR):\n${cached.text.slice(0, 8000)}\n\n${prompt}`;
432
+ return this.analyzeImage(contextualPrompt, file, options);
433
+ }
434
+ /**
435
+ * Delete a cached context
436
+ */
437
+ deleteCachedContent(cacheId) {
438
+ return this._contextCache.delete(cacheId);
439
+ }
440
+ /**
441
+ * Process multiple image analysis requests efficiently.
442
+ * Handles rate limiting and provides progress tracking.
443
+ * NOT true async batch API (Gemini async batch requires server-side setup) -
444
+ * this is sequential with optimal rate limiting.
445
+ */
446
+ async batchAnalyzeImages(requests, onProgress) {
447
+ const results = [];
448
+ for (let i = 0; i < requests.length; i++) {
449
+ try {
450
+ const result = await this.analyzeImage(requests[i].prompt, requests[i].file, requests[i].options || {});
451
+ results.push({ index: i, result });
452
+ }
453
+ catch (error) {
454
+ const message = error instanceof Error ? error.message : String(error);
455
+ console.error(`[GeminiClient] Batch item ${i}/${requests.length} failed: ${message}`);
456
+ results.push({ index: i, error: message });
457
+ }
458
+ onProgress?.(i + 1, requests.length);
459
+ }
460
+ return results;
461
+ }
462
+ /**
463
+ * Get client status (rate limiter + circuit breaker)
464
+ */
465
+ getStatus() {
466
+ return {
467
+ model: this.config.model,
468
+ rateLimiter: this.rateLimiter.getStatus(),
469
+ circuitBreaker: this.circuitBreaker.getStatus(),
470
+ };
471
+ }
472
+ /**
473
+ * Reset rate limiter and circuit breaker (for testing)
474
+ */
475
+ reset() {
476
+ this.rateLimiter.reset();
477
+ this.circuitBreaker.reset();
478
+ }
479
+ sleep(ms) {
480
+ return new Promise((resolve) => setTimeout(resolve, ms));
481
+ }
482
+ }
483
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/gemini/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Gemini API Configuration
3
+ * Based on gemini-flash-3-dev-guide.md patterns
4
+ */
5
+ import { z } from 'zod';
6
+ export declare const GEMINI_MODELS: {
7
+ readonly FLASH_3: "gemini-3-flash-preview";
8
+ };
9
+ export type GeminiModelId = (typeof GEMINI_MODELS)[keyof typeof GEMINI_MODELS];
10
+ export declare const GEMINI_RATE_LIMIT: {
11
+ readonly RPM: 1000;
12
+ readonly TPM: 4000000;
13
+ };
14
+ export type ThinkingLevel = 'HIGH' | 'MEDIUM' | 'LOW' | 'MINIMAL';
15
+ export type GeminiMode = 'fast' | 'thinking' | 'multimodal';
16
+ export declare const ALLOWED_MIME_TYPES: readonly ["image/jpeg", "image/png", "image/webp", "image/gif", "application/pdf"];
17
+ export type AllowedMimeType = (typeof ALLOWED_MIME_TYPES)[number];
18
+ export declare const MAX_FILE_SIZE: number;
19
+ export type MediaResolution = 'MEDIA_RESOLUTION_HIGH' | 'MEDIA_RESOLUTION_LOW';
20
+ export declare const GeminiConfigSchema: z.ZodObject<{
21
+ apiKey: z.ZodString;
22
+ model: z.ZodDefault<z.ZodString>;
23
+ maxOutputTokens: z.ZodDefault<z.ZodNumber>;
24
+ temperature: z.ZodDefault<z.ZodNumber>;
25
+ mediaResolution: z.ZodDefault<z.ZodEnum<["MEDIA_RESOLUTION_HIGH", "MEDIA_RESOLUTION_LOW"]>>;
26
+ retry: z.ZodDefault<z.ZodObject<{
27
+ maxAttempts: z.ZodDefault<z.ZodNumber>;
28
+ baseDelayMs: z.ZodDefault<z.ZodNumber>;
29
+ maxDelayMs: z.ZodDefault<z.ZodNumber>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ baseDelayMs: number;
32
+ maxDelayMs: number;
33
+ maxAttempts: number;
34
+ }, {
35
+ baseDelayMs?: number | undefined;
36
+ maxDelayMs?: number | undefined;
37
+ maxAttempts?: number | undefined;
38
+ }>>;
39
+ circuitBreaker: z.ZodDefault<z.ZodObject<{
40
+ failureThreshold: z.ZodDefault<z.ZodNumber>;
41
+ recoveryTimeMs: z.ZodDefault<z.ZodNumber>;
42
+ }, "strip", z.ZodTypeAny, {
43
+ failureThreshold: number;
44
+ recoveryTimeMs: number;
45
+ }, {
46
+ failureThreshold?: number | undefined;
47
+ recoveryTimeMs?: number | undefined;
48
+ }>>;
49
+ }, "strip", z.ZodTypeAny, {
50
+ apiKey: string;
51
+ model: string;
52
+ maxOutputTokens: number;
53
+ temperature: number;
54
+ mediaResolution: "MEDIA_RESOLUTION_HIGH" | "MEDIA_RESOLUTION_LOW";
55
+ retry: {
56
+ baseDelayMs: number;
57
+ maxDelayMs: number;
58
+ maxAttempts: number;
59
+ };
60
+ circuitBreaker: {
61
+ failureThreshold: number;
62
+ recoveryTimeMs: number;
63
+ };
64
+ }, {
65
+ apiKey: string;
66
+ model?: string | undefined;
67
+ maxOutputTokens?: number | undefined;
68
+ temperature?: number | undefined;
69
+ mediaResolution?: "MEDIA_RESOLUTION_HIGH" | "MEDIA_RESOLUTION_LOW" | undefined;
70
+ retry?: {
71
+ baseDelayMs?: number | undefined;
72
+ maxDelayMs?: number | undefined;
73
+ maxAttempts?: number | undefined;
74
+ } | undefined;
75
+ circuitBreaker?: {
76
+ failureThreshold?: number | undefined;
77
+ recoveryTimeMs?: number | undefined;
78
+ } | undefined;
79
+ }>;
80
+ export type GeminiConfig = z.infer<typeof GeminiConfigSchema>;
81
+ /**
82
+ * Load configuration from environment variables.
83
+ *
84
+ * Checks for GEMINI_API_KEY before Zod validation to provide a clear,
85
+ * actionable error message instead of a cryptic Zod validation failure.
86
+ */
87
+ export declare function loadGeminiConfig(overrides?: Partial<GeminiConfig>): GeminiConfig;
88
+ /**
89
+ * Generation config presets from the guide
90
+ */
91
+ export declare const GENERATION_PRESETS: {
92
+ readonly fast: {
93
+ readonly temperature: 0;
94
+ readonly maxOutputTokens: 8192;
95
+ readonly responseMimeType: "application/json";
96
+ readonly thinkingConfig: {
97
+ readonly thinkingLevel: ThinkingLevel;
98
+ };
99
+ };
100
+ readonly thinking: (level?: ThinkingLevel) => {
101
+ temperature: number;
102
+ maxOutputTokens: number;
103
+ thinkingConfig: {
104
+ thinkingLevel: ThinkingLevel;
105
+ };
106
+ };
107
+ readonly multimodal: {
108
+ readonly temperature: 0.3;
109
+ readonly maxOutputTokens: 8192;
110
+ readonly responseMimeType: "application/json";
111
+ readonly thinkingConfig: {
112
+ readonly thinkingLevel: ThinkingLevel;
113
+ };
114
+ };
115
+ };
116
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/services/gemini/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,aAAa;;CAEhB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAG/E,eAAO,MAAM,iBAAiB;;;CAGpB,CAAC;AAGX,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAGlE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;AAG5D,eAAO,MAAM,kBAAkB,oFAMrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGlE,eAAO,MAAM,aAAa,QAAmB,CAAC;AAG9C,MAAM,MAAM,eAAe,GAAG,uBAAuB,GAAG,sBAAsB,CAAC;AAG/E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAgB9D;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAmBhF;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;oCAOmB,aAAa;;;gCAI3C,aAAa;;;;;;;;;;;;oCAciB,aAAa;;;CAKrD,CAAC"}