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.
- package/.env.example +55 -0
- package/LICENSE +78 -0
- package/README.md +1154 -0
- package/dist/bin-http.d.ts +24 -0
- package/dist/bin-http.d.ts.map +1 -0
- package/dist/bin-http.js +275 -0
- package/dist/bin-http.js.map +1 -0
- package/dist/bin-setup.d.ts +11 -0
- package/dist/bin-setup.d.ts.map +1 -0
- package/dist/bin-setup.js +610 -0
- package/dist/bin-setup.js.map +1 -0
- package/dist/bin.d.ts +16 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +16 -0
- package/dist/bin.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -0
- package/dist/index.js.map +1 -0
- package/dist/models/chunk.d.ts +136 -0
- package/dist/models/chunk.d.ts.map +1 -0
- package/dist/models/chunk.js +27 -0
- package/dist/models/chunk.js.map +1 -0
- package/dist/models/cluster.d.ts +79 -0
- package/dist/models/cluster.d.ts.map +1 -0
- package/dist/models/cluster.js +10 -0
- package/dist/models/cluster.js.map +1 -0
- package/dist/models/comparison.d.ts +62 -0
- package/dist/models/comparison.d.ts.map +1 -0
- package/dist/models/comparison.js +8 -0
- package/dist/models/comparison.js.map +1 -0
- package/dist/models/document.d.ts +104 -0
- package/dist/models/document.d.ts.map +1 -0
- package/dist/models/document.js +15 -0
- package/dist/models/document.js.map +1 -0
- package/dist/models/embedding.d.ts +87 -0
- package/dist/models/embedding.d.ts.map +1 -0
- package/dist/models/embedding.js +23 -0
- package/dist/models/embedding.js.map +1 -0
- package/dist/models/extraction.d.ts +15 -0
- package/dist/models/extraction.d.ts.map +1 -0
- package/dist/models/extraction.js +2 -0
- package/dist/models/extraction.js.map +1 -0
- package/dist/models/form-fill.d.ts +23 -0
- package/dist/models/form-fill.d.ts.map +1 -0
- package/dist/models/form-fill.js +2 -0
- package/dist/models/form-fill.js.map +1 -0
- package/dist/models/image.d.ts +177 -0
- package/dist/models/image.d.ts.map +1 -0
- package/dist/models/image.js +8 -0
- package/dist/models/image.js.map +1 -0
- package/dist/models/index.d.ts +14 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +22 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/provenance.d.ts +174 -0
- package/dist/models/provenance.d.ts.map +1 -0
- package/dist/models/provenance.js +53 -0
- package/dist/models/provenance.js.map +1 -0
- package/dist/models/uploaded-file.d.ts +20 -0
- package/dist/models/uploaded-file.d.ts.map +1 -0
- package/dist/models/uploaded-file.js +2 -0
- package/dist/models/uploaded-file.js.map +1 -0
- package/dist/server/errors.d.ts +93 -0
- package/dist/server/errors.d.ts.map +1 -0
- package/dist/server/errors.js +256 -0
- package/dist/server/errors.js.map +1 -0
- package/dist/server/events.d.ts +36 -0
- package/dist/server/events.d.ts.map +1 -0
- package/dist/server/events.js +48 -0
- package/dist/server/events.js.map +1 -0
- package/dist/server/permissions.d.ts +26 -0
- package/dist/server/permissions.d.ts.map +1 -0
- package/dist/server/permissions.js +194 -0
- package/dist/server/permissions.js.map +1 -0
- package/dist/server/register-tools.d.ts +25 -0
- package/dist/server/register-tools.d.ts.map +1 -0
- package/dist/server/register-tools.js +102 -0
- package/dist/server/register-tools.js.map +1 -0
- package/dist/server/startup.d.ts +16 -0
- package/dist/server/startup.d.ts.map +1 -0
- package/dist/server/startup.js +37 -0
- package/dist/server/startup.js.map +1 -0
- package/dist/server/state.d.ts +166 -0
- package/dist/server/state.d.ts.map +1 -0
- package/dist/server/state.js +424 -0
- package/dist/server/state.js.map +1 -0
- package/dist/server/transports/http-transport.d.ts +37 -0
- package/dist/server/transports/http-transport.d.ts.map +1 -0
- package/dist/server/transports/http-transport.js +204 -0
- package/dist/server/transports/http-transport.js.map +1 -0
- package/dist/server/transports/index.d.ts +9 -0
- package/dist/server/transports/index.d.ts.map +1 -0
- package/dist/server/transports/index.js +9 -0
- package/dist/server/transports/index.js.map +1 -0
- package/dist/server/transports/session-manager.d.ts +40 -0
- package/dist/server/transports/session-manager.d.ts.map +1 -0
- package/dist/server/transports/session-manager.js +74 -0
- package/dist/server/transports/session-manager.js.map +1 -0
- package/dist/server/types.d.ts +82 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +14 -0
- package/dist/server/types.js.map +1 -0
- package/dist/services/audit.d.ts +26 -0
- package/dist/services/audit.d.ts.map +1 -0
- package/dist/services/audit.js +43 -0
- package/dist/services/audit.js.map +1 -0
- package/dist/services/chunking/chunk-deduplicator.d.ts +33 -0
- package/dist/services/chunking/chunk-deduplicator.d.ts.map +1 -0
- package/dist/services/chunking/chunk-deduplicator.js +46 -0
- package/dist/services/chunking/chunk-deduplicator.js.map +1 -0
- package/dist/services/chunking/chunk-merger.d.ts +26 -0
- package/dist/services/chunking/chunk-merger.d.ts.map +1 -0
- package/dist/services/chunking/chunk-merger.js +94 -0
- package/dist/services/chunking/chunk-merger.js.map +1 -0
- package/dist/services/chunking/chunker.d.ts +62 -0
- package/dist/services/chunking/chunker.d.ts.map +1 -0
- package/dist/services/chunking/chunker.js +566 -0
- package/dist/services/chunking/chunker.js.map +1 -0
- package/dist/services/chunking/heading-normalizer.d.ts +33 -0
- package/dist/services/chunking/heading-normalizer.d.ts.map +1 -0
- package/dist/services/chunking/heading-normalizer.js +101 -0
- package/dist/services/chunking/heading-normalizer.js.map +1 -0
- package/dist/services/chunking/json-block-analyzer.d.ts +163 -0
- package/dist/services/chunking/json-block-analyzer.d.ts.map +1 -0
- package/dist/services/chunking/json-block-analyzer.js +1033 -0
- package/dist/services/chunking/json-block-analyzer.js.map +1 -0
- package/dist/services/chunking/markdown-parser.d.ts +75 -0
- package/dist/services/chunking/markdown-parser.d.ts.map +1 -0
- package/dist/services/chunking/markdown-parser.js +428 -0
- package/dist/services/chunking/markdown-parser.js.map +1 -0
- package/dist/services/chunking/text-normalizer.d.ts +20 -0
- package/dist/services/chunking/text-normalizer.d.ts.map +1 -0
- package/dist/services/chunking/text-normalizer.js +36 -0
- package/dist/services/chunking/text-normalizer.js.map +1 -0
- package/dist/services/clm/contract-schemas.d.ts +36 -0
- package/dist/services/clm/contract-schemas.d.ts.map +1 -0
- package/dist/services/clm/contract-schemas.js +92 -0
- package/dist/services/clm/contract-schemas.js.map +1 -0
- package/dist/services/clm/summarization.d.ts +46 -0
- package/dist/services/clm/summarization.d.ts.map +1 -0
- package/dist/services/clm/summarization.js +61 -0
- package/dist/services/clm/summarization.js.map +1 -0
- package/dist/services/clustering/clustering-service.d.ts +58 -0
- package/dist/services/clustering/clustering-service.d.ts.map +1 -0
- package/dist/services/clustering/clustering-service.js +467 -0
- package/dist/services/clustering/clustering-service.js.map +1 -0
- package/dist/services/comparison/diff-service.d.ts +41 -0
- package/dist/services/comparison/diff-service.d.ts.map +1 -0
- package/dist/services/comparison/diff-service.js +120 -0
- package/dist/services/comparison/diff-service.js.map +1 -0
- package/dist/services/embedding/embedder.d.ts +55 -0
- package/dist/services/embedding/embedder.d.ts.map +1 -0
- package/dist/services/embedding/embedder.js +202 -0
- package/dist/services/embedding/embedder.js.map +1 -0
- package/dist/services/embedding/nomic.d.ts +67 -0
- package/dist/services/embedding/nomic.d.ts.map +1 -0
- package/dist/services/embedding/nomic.js +280 -0
- package/dist/services/embedding/nomic.js.map +1 -0
- package/dist/services/gemini/circuit-breaker.d.ts +106 -0
- package/dist/services/gemini/circuit-breaker.d.ts.map +1 -0
- package/dist/services/gemini/circuit-breaker.js +237 -0
- package/dist/services/gemini/circuit-breaker.js.map +1 -0
- package/dist/services/gemini/client.d.ts +173 -0
- package/dist/services/gemini/client.d.ts.map +1 -0
- package/dist/services/gemini/client.js +483 -0
- package/dist/services/gemini/client.js.map +1 -0
- package/dist/services/gemini/config.d.ts +116 -0
- package/dist/services/gemini/config.d.ts.map +1 -0
- package/dist/services/gemini/config.js +118 -0
- package/dist/services/gemini/config.js.map +1 -0
- package/dist/services/gemini/index.d.ts +9 -0
- package/dist/services/gemini/index.d.ts.map +1 -0
- package/dist/services/gemini/index.js +13 -0
- package/dist/services/gemini/index.js.map +1 -0
- package/dist/services/gemini/rate-limiter.d.ts +62 -0
- package/dist/services/gemini/rate-limiter.d.ts.map +1 -0
- package/dist/services/gemini/rate-limiter.js +120 -0
- package/dist/services/gemini/rate-limiter.js.map +1 -0
- package/dist/services/images/extractor.d.ts +88 -0
- package/dist/services/images/extractor.d.ts.map +1 -0
- package/dist/services/images/extractor.js +340 -0
- package/dist/services/images/extractor.js.map +1 -0
- package/dist/services/images/optimizer.d.ts +130 -0
- package/dist/services/images/optimizer.d.ts.map +1 -0
- package/dist/services/images/optimizer.js +228 -0
- package/dist/services/images/optimizer.js.map +1 -0
- package/dist/services/ocr/datalab.d.ts +64 -0
- package/dist/services/ocr/datalab.d.ts.map +1 -0
- package/dist/services/ocr/datalab.js +425 -0
- package/dist/services/ocr/datalab.js.map +1 -0
- package/dist/services/ocr/errors.d.ts +38 -0
- package/dist/services/ocr/errors.d.ts.map +1 -0
- package/dist/services/ocr/errors.js +83 -0
- package/dist/services/ocr/errors.js.map +1 -0
- package/dist/services/ocr/file-manager.d.ts +76 -0
- package/dist/services/ocr/file-manager.d.ts.map +1 -0
- package/dist/services/ocr/file-manager.js +238 -0
- package/dist/services/ocr/file-manager.js.map +1 -0
- package/dist/services/ocr/form-fill.d.ts +48 -0
- package/dist/services/ocr/form-fill.d.ts.map +1 -0
- package/dist/services/ocr/form-fill.js +213 -0
- package/dist/services/ocr/form-fill.js.map +1 -0
- package/dist/services/ocr/processor.d.ts +95 -0
- package/dist/services/ocr/processor.d.ts.map +1 -0
- package/dist/services/ocr/processor.js +259 -0
- package/dist/services/ocr/processor.js.map +1 -0
- package/dist/services/provenance/agent-metadata.d.ts +82 -0
- package/dist/services/provenance/agent-metadata.d.ts.map +1 -0
- package/dist/services/provenance/agent-metadata.js +106 -0
- package/dist/services/provenance/agent-metadata.js.map +1 -0
- package/dist/services/provenance/chain-hash.d.ts +57 -0
- package/dist/services/provenance/chain-hash.d.ts.map +1 -0
- package/dist/services/provenance/chain-hash.js +131 -0
- package/dist/services/provenance/chain-hash.js.map +1 -0
- package/dist/services/provenance/exporter.d.ts +202 -0
- package/dist/services/provenance/exporter.d.ts.map +1 -0
- package/dist/services/provenance/exporter.js +457 -0
- package/dist/services/provenance/exporter.js.map +1 -0
- package/dist/services/provenance/index.d.ts +15 -0
- package/dist/services/provenance/index.d.ts.map +1 -0
- package/dist/services/provenance/index.js +17 -0
- package/dist/services/provenance/index.js.map +1 -0
- package/dist/services/provenance/tracker.d.ts +138 -0
- package/dist/services/provenance/tracker.d.ts.map +1 -0
- package/dist/services/provenance/tracker.js +293 -0
- package/dist/services/provenance/tracker.js.map +1 -0
- package/dist/services/provenance/verifier.d.ts +153 -0
- package/dist/services/provenance/verifier.d.ts.map +1 -0
- package/dist/services/provenance/verifier.js +536 -0
- package/dist/services/provenance/verifier.js.map +1 -0
- package/dist/services/python-pool.d.ts +70 -0
- package/dist/services/python-pool.d.ts.map +1 -0
- package/dist/services/python-pool.js +265 -0
- package/dist/services/python-pool.js.map +1 -0
- package/dist/services/search/bm25.d.ts +180 -0
- package/dist/services/search/bm25.d.ts.map +1 -0
- package/dist/services/search/bm25.js +656 -0
- package/dist/services/search/bm25.js.map +1 -0
- package/dist/services/search/fusion.d.ts +103 -0
- package/dist/services/search/fusion.d.ts.map +1 -0
- package/dist/services/search/fusion.js +122 -0
- package/dist/services/search/fusion.js.map +1 -0
- package/dist/services/search/local-reranker.d.ts +30 -0
- package/dist/services/search/local-reranker.d.ts.map +1 -0
- package/dist/services/search/local-reranker.js +123 -0
- package/dist/services/search/local-reranker.js.map +1 -0
- package/dist/services/search/quality.d.ts +11 -0
- package/dist/services/search/quality.d.ts.map +1 -0
- package/dist/services/search/quality.js +17 -0
- package/dist/services/search/quality.js.map +1 -0
- package/dist/services/search/query-classifier.d.ts +34 -0
- package/dist/services/search/query-classifier.d.ts.map +1 -0
- package/dist/services/search/query-classifier.js +114 -0
- package/dist/services/search/query-classifier.js.map +1 -0
- package/dist/services/search/query-expander.d.ts +73 -0
- package/dist/services/search/query-expander.d.ts.map +1 -0
- package/dist/services/search/query-expander.js +281 -0
- package/dist/services/search/query-expander.js.map +1 -0
- package/dist/services/search/reranker.d.ts +44 -0
- package/dist/services/search/reranker.d.ts.map +1 -0
- package/dist/services/search/reranker.js +101 -0
- package/dist/services/search/reranker.js.map +1 -0
- package/dist/services/storage/database/annotation-operations.d.ts +113 -0
- package/dist/services/storage/database/annotation-operations.d.ts.map +1 -0
- package/dist/services/storage/database/annotation-operations.js +177 -0
- package/dist/services/storage/database/annotation-operations.js.map +1 -0
- package/dist/services/storage/database/approval-operations.d.ts +132 -0
- package/dist/services/storage/database/approval-operations.d.ts.map +1 -0
- package/dist/services/storage/database/approval-operations.js +206 -0
- package/dist/services/storage/database/approval-operations.js.map +1 -0
- package/dist/services/storage/database/chunk-operations.d.ts +132 -0
- package/dist/services/storage/database/chunk-operations.d.ts.map +1 -0
- package/dist/services/storage/database/chunk-operations.js +306 -0
- package/dist/services/storage/database/chunk-operations.js.map +1 -0
- package/dist/services/storage/database/cluster-operations.d.ts +97 -0
- package/dist/services/storage/database/cluster-operations.d.ts.map +1 -0
- package/dist/services/storage/database/cluster-operations.js +258 -0
- package/dist/services/storage/database/cluster-operations.js.map +1 -0
- package/dist/services/storage/database/comparison-operations.d.ts +41 -0
- package/dist/services/storage/database/comparison-operations.d.ts.map +1 -0
- package/dist/services/storage/database/comparison-operations.js +65 -0
- package/dist/services/storage/database/comparison-operations.js.map +1 -0
- package/dist/services/storage/database/converters.d.ts +36 -0
- package/dist/services/storage/database/converters.d.ts.map +1 -0
- package/dist/services/storage/database/converters.js +244 -0
- package/dist/services/storage/database/converters.js.map +1 -0
- package/dist/services/storage/database/document-operations.d.ts +145 -0
- package/dist/services/storage/database/document-operations.d.ts.map +1 -0
- package/dist/services/storage/database/document-operations.js +498 -0
- package/dist/services/storage/database/document-operations.js.map +1 -0
- package/dist/services/storage/database/embedding-operations.d.ts +130 -0
- package/dist/services/storage/database/embedding-operations.d.ts.map +1 -0
- package/dist/services/storage/database/embedding-operations.js +315 -0
- package/dist/services/storage/database/embedding-operations.js.map +1 -0
- package/dist/services/storage/database/extraction-operations.d.ts +47 -0
- package/dist/services/storage/database/extraction-operations.d.ts.map +1 -0
- package/dist/services/storage/database/extraction-operations.js +85 -0
- package/dist/services/storage/database/extraction-operations.js.map +1 -0
- package/dist/services/storage/database/form-fill-operations.d.ts +58 -0
- package/dist/services/storage/database/form-fill-operations.d.ts.map +1 -0
- package/dist/services/storage/database/form-fill-operations.js +116 -0
- package/dist/services/storage/database/form-fill-operations.js.map +1 -0
- package/dist/services/storage/database/helpers.d.ts +29 -0
- package/dist/services/storage/database/helpers.d.ts.map +1 -0
- package/dist/services/storage/database/helpers.js +55 -0
- package/dist/services/storage/database/helpers.js.map +1 -0
- package/dist/services/storage/database/image-operations.d.ts +202 -0
- package/dist/services/storage/database/image-operations.d.ts.map +1 -0
- package/dist/services/storage/database/image-operations.js +484 -0
- package/dist/services/storage/database/image-operations.js.map +1 -0
- package/dist/services/storage/database/index.d.ts +13 -0
- package/dist/services/storage/database/index.d.ts.map +1 -0
- package/dist/services/storage/database/index.js +16 -0
- package/dist/services/storage/database/index.js.map +1 -0
- package/dist/services/storage/database/lock-operations.d.ts +59 -0
- package/dist/services/storage/database/lock-operations.d.ts.map +1 -0
- package/dist/services/storage/database/lock-operations.js +89 -0
- package/dist/services/storage/database/lock-operations.js.map +1 -0
- package/dist/services/storage/database/obligation-operations.d.ts +88 -0
- package/dist/services/storage/database/obligation-operations.d.ts.map +1 -0
- package/dist/services/storage/database/obligation-operations.js +206 -0
- package/dist/services/storage/database/obligation-operations.js.map +1 -0
- package/dist/services/storage/database/ocr-operations.d.ts +33 -0
- package/dist/services/storage/database/ocr-operations.d.ts.map +1 -0
- package/dist/services/storage/database/ocr-operations.js +70 -0
- package/dist/services/storage/database/ocr-operations.js.map +1 -0
- package/dist/services/storage/database/playbook-operations.d.ts +72 -0
- package/dist/services/storage/database/playbook-operations.d.ts.map +1 -0
- package/dist/services/storage/database/playbook-operations.js +247 -0
- package/dist/services/storage/database/playbook-operations.js.map +1 -0
- package/dist/services/storage/database/provenance-operations.d.ts +112 -0
- package/dist/services/storage/database/provenance-operations.d.ts.map +1 -0
- package/dist/services/storage/database/provenance-operations.js +251 -0
- package/dist/services/storage/database/provenance-operations.js.map +1 -0
- package/dist/services/storage/database/service.d.ts +142 -0
- package/dist/services/storage/database/service.d.ts.map +1 -0
- package/dist/services/storage/database/service.js +310 -0
- package/dist/services/storage/database/service.js.map +1 -0
- package/dist/services/storage/database/static-operations.d.ts +30 -0
- package/dist/services/storage/database/static-operations.d.ts.map +1 -0
- package/dist/services/storage/database/static-operations.js +218 -0
- package/dist/services/storage/database/static-operations.js.map +1 -0
- package/dist/services/storage/database/stats-operations.d.ts +101 -0
- package/dist/services/storage/database/stats-operations.d.ts.map +1 -0
- package/dist/services/storage/database/stats-operations.js +394 -0
- package/dist/services/storage/database/stats-operations.js.map +1 -0
- package/dist/services/storage/database/tag-operations.d.ts +76 -0
- package/dist/services/storage/database/tag-operations.d.ts.map +1 -0
- package/dist/services/storage/database/tag-operations.js +178 -0
- package/dist/services/storage/database/tag-operations.js.map +1 -0
- package/dist/services/storage/database/types.d.ts +286 -0
- package/dist/services/storage/database/types.d.ts.map +1 -0
- package/dist/services/storage/database/types.js +39 -0
- package/dist/services/storage/database/types.js.map +1 -0
- package/dist/services/storage/database/upload-operations.d.ts +71 -0
- package/dist/services/storage/database/upload-operations.d.ts.map +1 -0
- package/dist/services/storage/database/upload-operations.js +124 -0
- package/dist/services/storage/database/upload-operations.js.map +1 -0
- package/dist/services/storage/database/user-operations.d.ts +102 -0
- package/dist/services/storage/database/user-operations.d.ts.map +1 -0
- package/dist/services/storage/database/user-operations.js +151 -0
- package/dist/services/storage/database/user-operations.js.map +1 -0
- package/dist/services/storage/database/workflow-operations.d.ts +98 -0
- package/dist/services/storage/database/workflow-operations.d.ts.map +1 -0
- package/dist/services/storage/database/workflow-operations.js +157 -0
- package/dist/services/storage/database/workflow-operations.js.map +1 -0
- package/dist/services/storage/database.d.ts +16 -0
- package/dist/services/storage/database.d.ts.map +1 -0
- package/dist/services/storage/database.js +15 -0
- package/dist/services/storage/database.js.map +1 -0
- package/dist/services/storage/index.d.ts +10 -0
- package/dist/services/storage/index.d.ts.map +1 -0
- package/dist/services/storage/index.js +10 -0
- package/dist/services/storage/index.js.map +1 -0
- package/dist/services/storage/migrations/index.d.ts +16 -0
- package/dist/services/storage/migrations/index.d.ts.map +1 -0
- package/dist/services/storage/migrations/index.js +20 -0
- package/dist/services/storage/migrations/index.js.map +1 -0
- package/dist/services/storage/migrations/operations.d.ts +40 -0
- package/dist/services/storage/migrations/operations.d.ts.map +1 -0
- package/dist/services/storage/migrations/operations.js +2910 -0
- package/dist/services/storage/migrations/operations.js.map +1 -0
- package/dist/services/storage/migrations/schema-definitions.d.ts +306 -0
- package/dist/services/storage/migrations/schema-definitions.d.ts.map +1 -0
- package/dist/services/storage/migrations/schema-definitions.js +1006 -0
- package/dist/services/storage/migrations/schema-definitions.js.map +1 -0
- package/dist/services/storage/migrations/schema-helpers.d.ts +50 -0
- package/dist/services/storage/migrations/schema-helpers.d.ts.map +1 -0
- package/dist/services/storage/migrations/schema-helpers.js +176 -0
- package/dist/services/storage/migrations/schema-helpers.js.map +1 -0
- package/dist/services/storage/migrations/types.d.ts +15 -0
- package/dist/services/storage/migrations/types.d.ts.map +1 -0
- package/dist/services/storage/migrations/types.js +21 -0
- package/dist/services/storage/migrations/types.js.map +1 -0
- package/dist/services/storage/migrations/verification.d.ts +20 -0
- package/dist/services/storage/migrations/verification.d.ts.map +1 -0
- package/dist/services/storage/migrations/verification.js +78 -0
- package/dist/services/storage/migrations/verification.js.map +1 -0
- package/dist/services/storage/migrations.d.ts +16 -0
- package/dist/services/storage/migrations.d.ts.map +1 -0
- package/dist/services/storage/migrations.js +17 -0
- package/dist/services/storage/migrations.js.map +1 -0
- package/dist/services/storage/types.d.ts +12 -0
- package/dist/services/storage/types.d.ts.map +1 -0
- package/dist/services/storage/types.js +5 -0
- package/dist/services/storage/types.js.map +1 -0
- package/dist/services/storage/vector.d.ts +208 -0
- package/dist/services/storage/vector.d.ts.map +1 -0
- package/dist/services/storage/vector.js +526 -0
- package/dist/services/storage/vector.js.map +1 -0
- package/dist/services/vlm/pipeline.d.ts +194 -0
- package/dist/services/vlm/pipeline.d.ts.map +1 -0
- package/dist/services/vlm/pipeline.js +800 -0
- package/dist/services/vlm/pipeline.js.map +1 -0
- package/dist/services/vlm/prompts.d.ts +171 -0
- package/dist/services/vlm/prompts.d.ts.map +1 -0
- package/dist/services/vlm/prompts.js +229 -0
- package/dist/services/vlm/prompts.js.map +1 -0
- package/dist/services/vlm/service.d.ts +174 -0
- package/dist/services/vlm/service.d.ts.map +1 -0
- package/dist/services/vlm/service.js +256 -0
- package/dist/services/vlm/service.js.map +1 -0
- package/dist/services/webhook-delivery.d.ts +4 -0
- package/dist/services/webhook-delivery.d.ts.map +1 -0
- package/dist/services/webhook-delivery.js +140 -0
- package/dist/services/webhook-delivery.js.map +1 -0
- package/dist/tools/chunks.d.ts +19 -0
- package/dist/tools/chunks.d.ts.map +1 -0
- package/dist/tools/chunks.js +392 -0
- package/dist/tools/chunks.js.map +1 -0
- package/dist/tools/clm.d.ts +16 -0
- package/dist/tools/clm.d.ts.map +1 -0
- package/dist/tools/clm.js +668 -0
- package/dist/tools/clm.js.map +1 -0
- package/dist/tools/clustering.d.ts +13 -0
- package/dist/tools/clustering.d.ts.map +1 -0
- package/dist/tools/clustering.js +498 -0
- package/dist/tools/clustering.js.map +1 -0
- package/dist/tools/collaboration.d.ts +15 -0
- package/dist/tools/collaboration.d.ts.map +1 -0
- package/dist/tools/collaboration.js +516 -0
- package/dist/tools/collaboration.js.map +1 -0
- package/dist/tools/comparison.d.ts +13 -0
- package/dist/tools/comparison.d.ts.map +1 -0
- package/dist/tools/comparison.js +735 -0
- package/dist/tools/comparison.js.map +1 -0
- package/dist/tools/compliance.d.ts +15 -0
- package/dist/tools/compliance.d.ts.map +1 -0
- package/dist/tools/compliance.js +640 -0
- package/dist/tools/compliance.js.map +1 -0
- package/dist/tools/config.d.ts +19 -0
- package/dist/tools/config.d.ts.map +1 -0
- package/dist/tools/config.js +213 -0
- package/dist/tools/config.js.map +1 -0
- package/dist/tools/database.d.ts +62 -0
- package/dist/tools/database.d.ts.map +1 -0
- package/dist/tools/database.js +288 -0
- package/dist/tools/database.js.map +1 -0
- package/dist/tools/documents.d.ts +61 -0
- package/dist/tools/documents.d.ts.map +1 -0
- package/dist/tools/documents.js +1624 -0
- package/dist/tools/documents.js.map +1 -0
- package/dist/tools/embeddings.d.ts +14 -0
- package/dist/tools/embeddings.d.ts.map +1 -0
- package/dist/tools/embeddings.js +626 -0
- package/dist/tools/embeddings.js.map +1 -0
- package/dist/tools/evaluation.d.ts +25 -0
- package/dist/tools/evaluation.d.ts.map +1 -0
- package/dist/tools/evaluation.js +523 -0
- package/dist/tools/evaluation.js.map +1 -0
- package/dist/tools/events.d.ts +16 -0
- package/dist/tools/events.d.ts.map +1 -0
- package/dist/tools/events.js +493 -0
- package/dist/tools/events.js.map +1 -0
- package/dist/tools/extraction-structured.d.ts +13 -0
- package/dist/tools/extraction-structured.d.ts.map +1 -0
- package/dist/tools/extraction-structured.js +390 -0
- package/dist/tools/extraction-structured.js.map +1 -0
- package/dist/tools/extraction.d.ts +24 -0
- package/dist/tools/extraction.d.ts.map +1 -0
- package/dist/tools/extraction.js +424 -0
- package/dist/tools/extraction.js.map +1 -0
- package/dist/tools/file-management.d.ts +14 -0
- package/dist/tools/file-management.d.ts.map +1 -0
- package/dist/tools/file-management.js +523 -0
- package/dist/tools/file-management.js.map +1 -0
- package/dist/tools/form-fill.d.ts +13 -0
- package/dist/tools/form-fill.d.ts.map +1 -0
- package/dist/tools/form-fill.js +250 -0
- package/dist/tools/form-fill.js.map +1 -0
- package/dist/tools/health.d.ts +19 -0
- package/dist/tools/health.d.ts.map +1 -0
- package/dist/tools/health.js +229 -0
- package/dist/tools/health.js.map +1 -0
- package/dist/tools/images.d.ts +54 -0
- package/dist/tools/images.d.ts.map +1 -0
- package/dist/tools/images.js +787 -0
- package/dist/tools/images.js.map +1 -0
- package/dist/tools/ingestion.d.ts +94 -0
- package/dist/tools/ingestion.d.ts.map +1 -0
- package/dist/tools/ingestion.js +1659 -0
- package/dist/tools/ingestion.js.map +1 -0
- package/dist/tools/intelligence.d.ts +18 -0
- package/dist/tools/intelligence.d.ts.map +1 -0
- package/dist/tools/intelligence.js +1039 -0
- package/dist/tools/intelligence.js.map +1 -0
- package/dist/tools/provenance.d.ts +51 -0
- package/dist/tools/provenance.d.ts.map +1 -0
- package/dist/tools/provenance.js +691 -0
- package/dist/tools/provenance.js.map +1 -0
- package/dist/tools/reports.d.ts +41 -0
- package/dist/tools/reports.d.ts.map +1 -0
- package/dist/tools/reports.js +1394 -0
- package/dist/tools/reports.js.map +1 -0
- package/dist/tools/search.d.ts +35 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +2528 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/shared.d.ts +52 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +54 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/tags.d.ts +15 -0
- package/dist/tools/tags.d.ts.map +1 -0
- package/dist/tools/tags.js +287 -0
- package/dist/tools/tags.js.map +1 -0
- package/dist/tools/timeline.d.ts +15 -0
- package/dist/tools/timeline.d.ts.map +1 -0
- package/dist/tools/timeline.js +14 -0
- package/dist/tools/timeline.js.map +1 -0
- package/dist/tools/users.d.ts +14 -0
- package/dist/tools/users.d.ts.map +1 -0
- package/dist/tools/users.js +257 -0
- package/dist/tools/users.js.map +1 -0
- package/dist/tools/vlm.d.ts +40 -0
- package/dist/tools/vlm.d.ts.map +1 -0
- package/dist/tools/vlm.js +475 -0
- package/dist/tools/vlm.js.map +1 -0
- package/dist/tools/workflow.d.ts +16 -0
- package/dist/tools/workflow.d.ts.map +1 -0
- package/dist/tools/workflow.js +495 -0
- package/dist/tools/workflow.js.map +1 -0
- package/dist/utils/backoff.d.ts +53 -0
- package/dist/utils/backoff.d.ts.map +1 -0
- package/dist/utils/backoff.js +78 -0
- package/dist/utils/backoff.js.map +1 -0
- package/dist/utils/config-persistence.d.ts +33 -0
- package/dist/utils/config-persistence.d.ts.map +1 -0
- package/dist/utils/config-persistence.js +61 -0
- package/dist/utils/config-persistence.js.map +1 -0
- package/dist/utils/hash.d.ts +65 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +146 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/math.d.ts +21 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +39 -0
- package/dist/utils/math.js.map +1 -0
- package/dist/utils/validation.d.ts +697 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +529 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +96 -0
- package/python/.gitkeep +0 -0
- package/python/__init__.py +104 -0
- package/python/clustering_worker.py +440 -0
- package/python/docx_image_extractor.py +524 -0
- package/python/embedding_worker.py +552 -0
- package/python/file_manager_worker.py +564 -0
- package/python/form_fill_worker.py +399 -0
- package/python/gpu_utils.py +582 -0
- package/python/image_extractor.py +317 -0
- package/python/image_optimizer.py +444 -0
- package/python/ocr_worker.py +712 -0
- package/python/pyproject.toml +76 -0
- package/python/requirements.txt +51 -0
- package/python/reranker_worker.py +87 -0
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image operations for DatabaseService
|
|
3
|
+
*
|
|
4
|
+
* Handles all CRUD operations for extracted images including
|
|
5
|
+
* insert, get, list, update VLM results, and delete.
|
|
6
|
+
*/
|
|
7
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
8
|
+
import { DatabaseError, DatabaseErrorCode } from './types.js';
|
|
9
|
+
import { rowToImage } from './converters.js';
|
|
10
|
+
/**
|
|
11
|
+
* Insert a new image reference
|
|
12
|
+
*
|
|
13
|
+
* @param db - Database connection
|
|
14
|
+
* @param image - Image data (id and timestamps will be generated)
|
|
15
|
+
* @returns ImageReference - The created image with generated fields
|
|
16
|
+
*/
|
|
17
|
+
export function insertImage(db, image) {
|
|
18
|
+
const id = uuidv4();
|
|
19
|
+
const created_at = new Date().toISOString();
|
|
20
|
+
const stmt = db.prepare(`
|
|
21
|
+
INSERT INTO images (
|
|
22
|
+
id, document_id, ocr_result_id, page_number,
|
|
23
|
+
bbox_x, bbox_y, bbox_width, bbox_height,
|
|
24
|
+
image_index, format, width, height,
|
|
25
|
+
extracted_path, file_size, vlm_status,
|
|
26
|
+
context_text, provenance_id, created_at,
|
|
27
|
+
block_type, is_header_footer, content_hash
|
|
28
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?, ?, ?)
|
|
29
|
+
`);
|
|
30
|
+
stmt.run(id, image.document_id, image.ocr_result_id, image.page_number, image.bounding_box.x, image.bounding_box.y, image.bounding_box.width, image.bounding_box.height, image.image_index, image.format, image.dimensions.width, image.dimensions.height, image.extracted_path ?? null, image.file_size ?? null, image.context_text ?? null, image.provenance_id ?? null, created_at, image.block_type ?? null, image.is_header_footer ? 1 : 0, image.content_hash ?? null);
|
|
31
|
+
return {
|
|
32
|
+
...image,
|
|
33
|
+
id,
|
|
34
|
+
created_at,
|
|
35
|
+
vlm_status: 'pending',
|
|
36
|
+
vlm_description: null,
|
|
37
|
+
vlm_structured_data: null,
|
|
38
|
+
vlm_embedding_id: null,
|
|
39
|
+
vlm_model: null,
|
|
40
|
+
vlm_confidence: null,
|
|
41
|
+
vlm_processed_at: null,
|
|
42
|
+
vlm_tokens_used: null,
|
|
43
|
+
error_message: null,
|
|
44
|
+
block_type: image.block_type ?? null,
|
|
45
|
+
is_header_footer: image.is_header_footer ?? false,
|
|
46
|
+
content_hash: image.content_hash ?? null,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Insert multiple images in a batch
|
|
51
|
+
*
|
|
52
|
+
* @param db - Database connection
|
|
53
|
+
* @param images - Array of image data to insert
|
|
54
|
+
* @returns ImageReference[] - Array of created images
|
|
55
|
+
*/
|
|
56
|
+
export function insertImageBatch(db, images) {
|
|
57
|
+
const results = [];
|
|
58
|
+
const insertFn = db.transaction(() => {
|
|
59
|
+
for (const image of images) {
|
|
60
|
+
results.push(insertImage(db, image));
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
insertFn();
|
|
64
|
+
return results;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get an image by ID
|
|
68
|
+
*
|
|
69
|
+
* @param db - Database connection
|
|
70
|
+
* @param id - Image ID
|
|
71
|
+
* @returns ImageReference | null - The image or null if not found
|
|
72
|
+
*/
|
|
73
|
+
export function getImage(db, id) {
|
|
74
|
+
const stmt = db.prepare('SELECT * FROM images WHERE id = ?');
|
|
75
|
+
const row = stmt.get(id);
|
|
76
|
+
return row ? rowToImage(row) : null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get images for a document with optional filtering
|
|
80
|
+
*
|
|
81
|
+
* @param db - Database connection
|
|
82
|
+
* @param documentId - Document ID
|
|
83
|
+
* @param options - Optional filters: vlmStatus, limit
|
|
84
|
+
* @returns ImageReference[] - Array of images ordered by page and index
|
|
85
|
+
*/
|
|
86
|
+
export function getImagesByDocument(db, documentId, options) {
|
|
87
|
+
const params = [documentId];
|
|
88
|
+
let sql = 'SELECT * FROM images WHERE document_id = ?';
|
|
89
|
+
if (options?.vlmStatus) {
|
|
90
|
+
sql += ' AND vlm_status = ?';
|
|
91
|
+
params.push(options.vlmStatus);
|
|
92
|
+
}
|
|
93
|
+
sql += ' ORDER BY page_number, image_index';
|
|
94
|
+
if (options?.limit && options.limit > 0) {
|
|
95
|
+
sql += ' LIMIT ?';
|
|
96
|
+
params.push(options.limit);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
sql += ' LIMIT 5000'; // Default bound to prevent unbounded image loading
|
|
100
|
+
}
|
|
101
|
+
const stmt = db.prepare(sql);
|
|
102
|
+
const rows = stmt.all(...params);
|
|
103
|
+
return rows.map(rowToImage);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get all images for an OCR result
|
|
107
|
+
*
|
|
108
|
+
* @param db - Database connection
|
|
109
|
+
* @param ocrResultId - OCR result ID
|
|
110
|
+
* @returns ImageReference[] - Array of images ordered by page and index
|
|
111
|
+
*/
|
|
112
|
+
export function getImagesByOCRResult(db, ocrResultId) {
|
|
113
|
+
const stmt = db.prepare(`
|
|
114
|
+
SELECT * FROM images
|
|
115
|
+
WHERE ocr_result_id = ?
|
|
116
|
+
ORDER BY page_number, image_index
|
|
117
|
+
LIMIT 5000
|
|
118
|
+
`);
|
|
119
|
+
const rows = stmt.all(ocrResultId);
|
|
120
|
+
return rows.map(rowToImage);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get pending images for VLM processing
|
|
124
|
+
*
|
|
125
|
+
* @param db - Database connection
|
|
126
|
+
* @param limit - Maximum number of images to return
|
|
127
|
+
* @returns ImageReference[] - Array of pending images ordered by creation time
|
|
128
|
+
*/
|
|
129
|
+
export function getPendingImages(db, limit = 100) {
|
|
130
|
+
const stmt = db.prepare(`
|
|
131
|
+
SELECT * FROM images
|
|
132
|
+
WHERE vlm_status = 'pending'
|
|
133
|
+
ORDER BY created_at
|
|
134
|
+
LIMIT ?
|
|
135
|
+
`);
|
|
136
|
+
const rows = stmt.all(limit);
|
|
137
|
+
return rows.map(rowToImage);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* List images with optional filtering
|
|
141
|
+
*
|
|
142
|
+
* @param db - Database connection
|
|
143
|
+
* @param options - Optional filter options
|
|
144
|
+
* @returns ImageReference[] - Array of images
|
|
145
|
+
*/
|
|
146
|
+
export function listImages(db, options) {
|
|
147
|
+
let query = 'SELECT * FROM images';
|
|
148
|
+
const params = [];
|
|
149
|
+
if (options?.vlmStatus) {
|
|
150
|
+
query += ' WHERE vlm_status = ?';
|
|
151
|
+
params.push(options.vlmStatus);
|
|
152
|
+
}
|
|
153
|
+
query += ' ORDER BY created_at DESC';
|
|
154
|
+
const limit = options?.limit ?? 10000;
|
|
155
|
+
query += ' LIMIT ?';
|
|
156
|
+
params.push(limit);
|
|
157
|
+
if (options?.offset !== undefined) {
|
|
158
|
+
query += ' OFFSET ?';
|
|
159
|
+
params.push(options.offset);
|
|
160
|
+
}
|
|
161
|
+
const stmt = db.prepare(query);
|
|
162
|
+
const rows = stmt.all(...params);
|
|
163
|
+
return rows.map(rowToImage);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Update image VLM status to processing
|
|
167
|
+
*
|
|
168
|
+
* @param db - Database connection
|
|
169
|
+
* @param id - Image ID
|
|
170
|
+
*/
|
|
171
|
+
export function setImageProcessing(db, id) {
|
|
172
|
+
const stmt = db.prepare(`
|
|
173
|
+
UPDATE images SET vlm_status = 'processing'
|
|
174
|
+
WHERE id = ? AND vlm_status = 'pending'
|
|
175
|
+
`);
|
|
176
|
+
const result = stmt.run(id);
|
|
177
|
+
// Returns false if image not found or already processing/complete/failed
|
|
178
|
+
return result.changes > 0;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Update image with VLM results
|
|
182
|
+
*
|
|
183
|
+
* @param db - Database connection
|
|
184
|
+
* @param id - Image ID
|
|
185
|
+
* @param result - VLM processing result
|
|
186
|
+
*/
|
|
187
|
+
export function updateImageVLMResult(db, id, result) {
|
|
188
|
+
const vlm_processed_at = new Date().toISOString();
|
|
189
|
+
const stmt = db.prepare(`
|
|
190
|
+
UPDATE images SET
|
|
191
|
+
vlm_status = 'complete',
|
|
192
|
+
vlm_description = ?,
|
|
193
|
+
vlm_structured_data = ?,
|
|
194
|
+
vlm_embedding_id = ?,
|
|
195
|
+
vlm_model = ?,
|
|
196
|
+
vlm_confidence = ?,
|
|
197
|
+
vlm_tokens_used = ?,
|
|
198
|
+
vlm_processed_at = ?,
|
|
199
|
+
error_message = NULL
|
|
200
|
+
WHERE id = ?
|
|
201
|
+
`);
|
|
202
|
+
const changes = stmt.run(result.description, JSON.stringify(result.structuredData), result.embeddingId, result.model, result.confidence, result.tokensUsed, vlm_processed_at, id).changes;
|
|
203
|
+
if (changes === 0) {
|
|
204
|
+
throw new DatabaseError(`Image "${id}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Mark image as complete but intentionally skipped by relevance filtering.
|
|
209
|
+
* Sets vlm_status='complete' with vlm_description='[SKIPPED]' so the image
|
|
210
|
+
* is not reprocessed by retry_failed, and does not inflate failure counts.
|
|
211
|
+
*
|
|
212
|
+
* @param db - Database connection
|
|
213
|
+
* @param id - Image ID
|
|
214
|
+
* @param skipReason - Reason the image was skipped (stored in error_message for diagnostics)
|
|
215
|
+
*/
|
|
216
|
+
export function setImageVLMSkipped(db, id, skipReason) {
|
|
217
|
+
const stmt = db.prepare(`
|
|
218
|
+
UPDATE images SET
|
|
219
|
+
vlm_status = 'complete',
|
|
220
|
+
vlm_description = '[SKIPPED]',
|
|
221
|
+
vlm_tokens_used = 0,
|
|
222
|
+
vlm_processed_at = ?,
|
|
223
|
+
error_message = ?
|
|
224
|
+
WHERE id = ?
|
|
225
|
+
`);
|
|
226
|
+
const result = stmt.run(new Date().toISOString(), skipReason, id);
|
|
227
|
+
if (result.changes === 0) {
|
|
228
|
+
throw new DatabaseError(`Image "${id}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Mark image VLM processing as failed
|
|
233
|
+
*
|
|
234
|
+
* @param db - Database connection
|
|
235
|
+
* @param id - Image ID
|
|
236
|
+
* @param errorMessage - Error message
|
|
237
|
+
*/
|
|
238
|
+
export function setImageVLMFailed(db, id, errorMessage) {
|
|
239
|
+
const stmt = db.prepare(`
|
|
240
|
+
UPDATE images SET
|
|
241
|
+
vlm_status = 'failed',
|
|
242
|
+
error_message = ?
|
|
243
|
+
WHERE id = ?
|
|
244
|
+
`);
|
|
245
|
+
const result = stmt.run(errorMessage, id);
|
|
246
|
+
if (result.changes === 0) {
|
|
247
|
+
throw new DatabaseError(`Image "${id}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Update image context text
|
|
252
|
+
*
|
|
253
|
+
* @param db - Database connection
|
|
254
|
+
* @param id - Image ID
|
|
255
|
+
* @param contextText - Surrounding text from document
|
|
256
|
+
*/
|
|
257
|
+
export function updateImageContext(db, id, contextText) {
|
|
258
|
+
const stmt = db.prepare(`
|
|
259
|
+
UPDATE images SET context_text = ?
|
|
260
|
+
WHERE id = ?
|
|
261
|
+
`);
|
|
262
|
+
const result = stmt.run(contextText, id);
|
|
263
|
+
if (result.changes === 0) {
|
|
264
|
+
throw new DatabaseError(`Image "${id}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Update image provenance_id
|
|
269
|
+
*
|
|
270
|
+
* @param db - Database connection
|
|
271
|
+
* @param id - Image ID
|
|
272
|
+
* @param provenanceId - Provenance record ID to set
|
|
273
|
+
*/
|
|
274
|
+
export function updateImageProvenance(db, id, provenanceId) {
|
|
275
|
+
const result = db
|
|
276
|
+
.prepare('UPDATE images SET provenance_id = ? WHERE id = ?')
|
|
277
|
+
.run(provenanceId, id);
|
|
278
|
+
if (result.changes === 0) {
|
|
279
|
+
throw new DatabaseError(`Image "${id}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Get image statistics
|
|
284
|
+
*
|
|
285
|
+
* @param db - Database connection
|
|
286
|
+
* @returns ImageStats - Statistics about images in database
|
|
287
|
+
*/
|
|
288
|
+
export function getImageStats(db) {
|
|
289
|
+
return db
|
|
290
|
+
.prepare(`
|
|
291
|
+
SELECT
|
|
292
|
+
COUNT(*) as total,
|
|
293
|
+
COUNT(CASE WHEN vlm_status = 'complete' THEN 1 END) as processed,
|
|
294
|
+
COUNT(CASE WHEN vlm_status = 'pending' THEN 1 END) as pending,
|
|
295
|
+
COUNT(CASE WHEN vlm_status = 'processing' THEN 1 END) as processing,
|
|
296
|
+
COUNT(CASE WHEN vlm_status = 'failed' THEN 1 END) as failed
|
|
297
|
+
FROM images
|
|
298
|
+
`)
|
|
299
|
+
.get();
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Delete an image by ID
|
|
303
|
+
*
|
|
304
|
+
* @param db - Database connection
|
|
305
|
+
* @param id - Image ID
|
|
306
|
+
* @returns boolean - True if image was deleted
|
|
307
|
+
*/
|
|
308
|
+
export function deleteImage(db, id) {
|
|
309
|
+
const stmt = db.prepare('DELETE FROM images WHERE id = ?');
|
|
310
|
+
return stmt.run(id).changes > 0;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Delete an image and all its derived data (embeddings, vectors, provenance).
|
|
314
|
+
* Performs a full cascade deletion to prevent orphaned records.
|
|
315
|
+
*
|
|
316
|
+
* @param db - Database connection
|
|
317
|
+
* @param imageId - Image ID to delete
|
|
318
|
+
*/
|
|
319
|
+
export function deleteImageCascade(db, imageId) {
|
|
320
|
+
// 1. Delete vec_embeddings for this image's embeddings
|
|
321
|
+
db.prepare('DELETE FROM vec_embeddings WHERE embedding_id IN (SELECT id FROM embeddings WHERE image_id = ?)').run(imageId);
|
|
322
|
+
// 2. Break circular FK: images.vlm_embedding_id -> embeddings AND embeddings.image_id -> images
|
|
323
|
+
db.prepare('UPDATE images SET vlm_embedding_id = NULL WHERE id = ?').run(imageId);
|
|
324
|
+
// 3. Delete embeddings (safe now that vlm_embedding_id is NULLed)
|
|
325
|
+
db.prepare('DELETE FROM embeddings WHERE image_id = ?').run(imageId);
|
|
326
|
+
// 4. Collect image provenance_id, then delete image (removes FK to provenance)
|
|
327
|
+
const img = db.prepare('SELECT provenance_id FROM images WHERE id = ?').get(imageId);
|
|
328
|
+
db.prepare('DELETE FROM images WHERE id = ?').run(imageId);
|
|
329
|
+
// 5. Delete provenance chain deepest-first: EMBEDDING(4) -> VLM_DESCRIPTION(3) -> IMAGE(2)
|
|
330
|
+
// Embedding provenance (deleted in step 3) was also a grandchild here, so the
|
|
331
|
+
// grandchild DELETE is a no-op for it but catches any other depth-4 descendants.
|
|
332
|
+
if (img?.provenance_id) {
|
|
333
|
+
db.prepare('DELETE FROM provenance WHERE parent_id IN (SELECT id FROM provenance WHERE parent_id = ?)').run(img.provenance_id);
|
|
334
|
+
db.prepare('DELETE FROM provenance WHERE parent_id = ?').run(img.provenance_id);
|
|
335
|
+
db.prepare('DELETE FROM provenance WHERE id = ?').run(img.provenance_id);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Delete all images for a document and all their derived data (embeddings, vectors, provenance).
|
|
340
|
+
* Performs a full cascade deletion to prevent orphaned records.
|
|
341
|
+
*
|
|
342
|
+
* @param db - Database connection
|
|
343
|
+
* @param documentId - Document ID
|
|
344
|
+
* @returns number - Number of images deleted
|
|
345
|
+
*/
|
|
346
|
+
export function deleteImagesByDocumentCascade(db, documentId) {
|
|
347
|
+
// 1. Delete vec_embeddings for these images' embeddings
|
|
348
|
+
db.prepare(`DELETE FROM vec_embeddings WHERE embedding_id IN (
|
|
349
|
+
SELECT e.id FROM embeddings e
|
|
350
|
+
JOIN images i ON e.image_id = i.id
|
|
351
|
+
WHERE i.document_id = ?
|
|
352
|
+
)`).run(documentId);
|
|
353
|
+
// 2. Break circular FK: images.vlm_embedding_id -> embeddings AND embeddings.image_id -> images
|
|
354
|
+
db.prepare('UPDATE images SET vlm_embedding_id = NULL WHERE document_id = ?').run(documentId);
|
|
355
|
+
// 3. Delete embeddings (safe now that vlm_embedding_id is NULLed)
|
|
356
|
+
db.prepare('DELETE FROM embeddings WHERE image_id IN (SELECT id FROM images WHERE document_id = ?)').run(documentId);
|
|
357
|
+
// 4. Collect image provenance IDs before deleting images
|
|
358
|
+
const imageProvIds = db
|
|
359
|
+
.prepare('SELECT provenance_id FROM images WHERE document_id = ? AND provenance_id IS NOT NULL')
|
|
360
|
+
.all(documentId);
|
|
361
|
+
// 5. Delete images (removes FK references to their provenance)
|
|
362
|
+
const result = db.prepare('DELETE FROM images WHERE document_id = ?').run(documentId);
|
|
363
|
+
// 6. Delete provenance chains deepest-first: EMBEDDING(4) -> VLM_DESCRIPTION(3) -> IMAGE(2)
|
|
364
|
+
// This covers embedding provenance (grandchildren) that was freed in step 3,
|
|
365
|
+
// VLM_DESCRIPTION provenance (children), and the IMAGE provenance itself.
|
|
366
|
+
for (const { provenance_id } of imageProvIds) {
|
|
367
|
+
db.prepare('DELETE FROM provenance WHERE parent_id IN (SELECT id FROM provenance WHERE parent_id = ?)').run(provenance_id);
|
|
368
|
+
db.prepare('DELETE FROM provenance WHERE parent_id = ?').run(provenance_id);
|
|
369
|
+
db.prepare('DELETE FROM provenance WHERE id = ?').run(provenance_id);
|
|
370
|
+
}
|
|
371
|
+
return result.changes;
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Delete all images for a document
|
|
375
|
+
*
|
|
376
|
+
* @param db - Database connection
|
|
377
|
+
* @param documentId - Document ID
|
|
378
|
+
* @returns number - Number of images deleted
|
|
379
|
+
*/
|
|
380
|
+
export function deleteImagesByDocument(db, documentId) {
|
|
381
|
+
const stmt = db.prepare('DELETE FROM images WHERE document_id = ?');
|
|
382
|
+
return stmt.run(documentId).changes;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Count images by document
|
|
386
|
+
*
|
|
387
|
+
* @param db - Database connection
|
|
388
|
+
* @param documentId - Document ID
|
|
389
|
+
* @returns number - Number of images for this document
|
|
390
|
+
*/
|
|
391
|
+
export function countImagesByDocument(db, documentId) {
|
|
392
|
+
const row = db
|
|
393
|
+
.prepare(`
|
|
394
|
+
SELECT COUNT(*) as count FROM images WHERE document_id = ?
|
|
395
|
+
`)
|
|
396
|
+
.get(documentId);
|
|
397
|
+
return row.count;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Reset VLM status to pending for failed images
|
|
401
|
+
*
|
|
402
|
+
* @param db - Database connection
|
|
403
|
+
* @param documentId - Optional document ID to filter
|
|
404
|
+
* @returns number - Number of images reset
|
|
405
|
+
*/
|
|
406
|
+
export function resetFailedImages(db, documentId) {
|
|
407
|
+
let query = `
|
|
408
|
+
UPDATE images SET
|
|
409
|
+
vlm_status = 'pending',
|
|
410
|
+
error_message = NULL
|
|
411
|
+
WHERE vlm_status = 'failed'
|
|
412
|
+
`;
|
|
413
|
+
if (documentId) {
|
|
414
|
+
query += ' AND document_id = ?';
|
|
415
|
+
return db.prepare(query).run(documentId).changes;
|
|
416
|
+
}
|
|
417
|
+
return db.prepare(query).run().changes;
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Reset VLM status to pending for images stuck in 'processing' state
|
|
421
|
+
*
|
|
422
|
+
* @param db - Database connection
|
|
423
|
+
* @param documentId - Optional document ID to filter
|
|
424
|
+
* @returns number - Number of images reset
|
|
425
|
+
*/
|
|
426
|
+
export function resetProcessingImages(db, documentId) {
|
|
427
|
+
let query = `
|
|
428
|
+
UPDATE images SET
|
|
429
|
+
vlm_status = 'pending',
|
|
430
|
+
error_message = 'Reset from stuck processing state'
|
|
431
|
+
WHERE vlm_status = 'processing'
|
|
432
|
+
`;
|
|
433
|
+
if (documentId) {
|
|
434
|
+
query += ' AND document_id = ?';
|
|
435
|
+
return db.prepare(query).run(documentId).changes;
|
|
436
|
+
}
|
|
437
|
+
return db.prepare(query).run().changes;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Find a VLM-complete image with the same content hash (for deduplication).
|
|
441
|
+
* Returns the first matching image or null.
|
|
442
|
+
*
|
|
443
|
+
* @param db - Database connection
|
|
444
|
+
* @param contentHash - SHA-256 hash to search for
|
|
445
|
+
* @param excludeId - Optional image ID to exclude from results
|
|
446
|
+
* @returns ImageReference | null
|
|
447
|
+
*/
|
|
448
|
+
export function findByContentHash(db, contentHash, excludeId) {
|
|
449
|
+
const query = excludeId
|
|
450
|
+
? `SELECT * FROM images WHERE content_hash = ? AND vlm_status = 'complete' AND vlm_description != '[SKIPPED]' AND id != ? LIMIT 1`
|
|
451
|
+
: `SELECT * FROM images WHERE content_hash = ? AND vlm_status = 'complete' AND vlm_description != '[SKIPPED]' LIMIT 1`;
|
|
452
|
+
const row = excludeId
|
|
453
|
+
? db.prepare(query).get(contentHash, excludeId)
|
|
454
|
+
: db.prepare(query).get(contentHash);
|
|
455
|
+
return row ? rowToImage(row) : null;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Copy VLM results from one image to another (deduplication).
|
|
459
|
+
* Sets vlm_status='complete', vlm_tokens_used=0 (no API call made).
|
|
460
|
+
*
|
|
461
|
+
* @param db - Database connection
|
|
462
|
+
* @param targetId - Image ID to copy results TO
|
|
463
|
+
* @param source - Source image to copy results FROM
|
|
464
|
+
*/
|
|
465
|
+
export function copyVLMResult(db, targetId, source) {
|
|
466
|
+
const stmt = db.prepare(`
|
|
467
|
+
UPDATE images SET
|
|
468
|
+
vlm_status = 'complete',
|
|
469
|
+
vlm_description = ?,
|
|
470
|
+
vlm_structured_data = ?,
|
|
471
|
+
vlm_embedding_id = ?,
|
|
472
|
+
vlm_model = ?,
|
|
473
|
+
vlm_confidence = ?,
|
|
474
|
+
vlm_tokens_used = 0,
|
|
475
|
+
vlm_processed_at = ?,
|
|
476
|
+
error_message = NULL
|
|
477
|
+
WHERE id = ?
|
|
478
|
+
`);
|
|
479
|
+
const changes = stmt.run(source.vlm_description, source.vlm_structured_data ? JSON.stringify(source.vlm_structured_data) : null, source.vlm_embedding_id, source.vlm_model, source.vlm_confidence, new Date().toISOString(), targetId).changes;
|
|
480
|
+
if (changes === 0) {
|
|
481
|
+
throw new DatabaseError(`Image "${targetId}" not found`, DatabaseErrorCode.IMAGE_NOT_FOUND);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
//# sourceMappingURL=image-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-operations.js","sourceRoot":"","sources":["../../../../src/services/storage/database/image-operations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAOpC,OAAO,EAA+B,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,EAAqB,EAAE,KAA2B;IAC5E,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IACpB,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE5C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;GASvB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CACN,EAAE,EACF,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,CAAC,CAAC,EACpB,KAAK,CAAC,YAAY,CAAC,CAAC,EACpB,KAAK,CAAC,YAAY,CAAC,KAAK,EACxB,KAAK,CAAC,YAAY,CAAC,MAAM,EACzB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,UAAU,CAAC,KAAK,EACtB,KAAK,CAAC,UAAU,CAAC,MAAM,EACvB,KAAK,CAAC,cAAc,IAAI,IAAI,EAC5B,KAAK,CAAC,SAAS,IAAI,IAAI,EACvB,KAAK,CAAC,YAAY,IAAI,IAAI,EAC1B,KAAK,CAAC,aAAa,IAAI,IAAI,EAC3B,UAAU,EACV,KAAK,CAAC,UAAU,IAAI,IAAI,EACxB,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC9B,KAAK,CAAC,YAAY,IAAI,IAAI,CAC3B,CAAC;IAEF,OAAO;QACL,GAAG,KAAK;QACR,EAAE;QACF,UAAU;QACV,UAAU,EAAE,SAAS;QACrB,eAAe,EAAE,IAAI;QACrB,mBAAmB,EAAE,IAAI;QACzB,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,IAAI;QACtB,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;QACpC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,KAAK;QACjD,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,IAAI;KACzC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,EAAqB,EACrB,MAA8B;IAE9B,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,EAAE,CAAC;IACX,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAqB,EAAE,EAAU;IACxD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAyB,CAAC;IACjD,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAAqB,EACrB,UAAkB,EAClB,OAAgD;IAEhD,MAAM,MAAM,GAAc,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,GAAG,GAAG,4CAA4C,CAAC;IAEvD,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,GAAG,IAAI,qBAAqB,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,IAAI,oCAAoC,CAAC;IAE5C,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACxC,GAAG,IAAI,UAAU,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,GAAG,IAAI,aAAa,CAAC,CAAC,mDAAmD;IAC3E,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAe,CAAC;IAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAqB,EAAE,WAAmB;IAC7E,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKvB,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAe,CAAC;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAqB,EAAE,QAAgB,GAAG;IACzE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKvB,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAe,CAAC;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,EAAqB,EAAE,OAA2B;IAC3E,IAAI,KAAK,GAAG,sBAAsB,CAAC;IACnC,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,KAAK,IAAI,uBAAuB,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,IAAI,2BAA2B,CAAC;IAErC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;IACtC,KAAK,IAAI,UAAU,CAAC;IACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnB,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,KAAK,IAAI,WAAW,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAe,CAAC;IAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAqB,EAAE,EAAU;IAClE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,yEAAyE;IACzE,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAqB,EAAE,EAAU,EAAE,MAAiB;IACvF,MAAM,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAElD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;GAYvB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,MAAM,CAAC,WAAW,EAClB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,EACrC,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,EACjB,gBAAgB,EAChB,EAAE,CACH,CAAC,OAAO,CAAC;IAEV,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAqB,EAAE,EAAU,EAAE,UAAkB;IACtF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;GAQvB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAqB,EAAE,EAAU,EAAE,YAAoB;IACvF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKvB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAqB,EAAE,EAAU,EAAE,WAAmB;IACvF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,EAAqB,EACrB,EAAU,EACV,YAAoB;IAEpB,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,kDAAkD,CAAC;SAC3D,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACzB,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,OAAO,EAAE;SACN,OAAO,CACN;;;;;;;;GAQH,CACE;SACA,GAAG,EAAgB,CAAC;AACzB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,EAAqB,EAAE,EAAU;IAC3D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAqB,EAAE,OAAe;IACvE,uDAAuD;IACvD,EAAE,CAAC,OAAO,CACR,iGAAiG,CAClG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEf,gGAAgG;IAChG,EAAE,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAElF,kEAAkE;IAClE,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAErE,+EAA+E;IAC/E,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,CAAC,OAAO,CAEtE,CAAC;IACd,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE3D,2FAA2F;IAC3F,8EAA8E;IAC9E,iFAAiF;IACjF,IAAI,GAAG,EAAE,aAAa,EAAE,CAAC;QACvB,EAAE,CAAC,OAAO,CACR,2FAA2F,CAC5F,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzB,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAChF,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,6BAA6B,CAAC,EAAqB,EAAE,UAAkB;IACrF,wDAAwD;IACxD,EAAE,CAAC,OAAO,CACR;;;;MAIE,CACH,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAElB,gGAAgG;IAChG,EAAE,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE9F,kEAAkE;IAClE,EAAE,CAAC,OAAO,CACR,wFAAwF,CACzF,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAElB,yDAAyD;IACzD,MAAM,YAAY,GAAG,EAAE;SACpB,OAAO,CAAC,sFAAsF,CAAC;SAC/F,GAAG,CAAC,UAAU,CAAgC,CAAC;IAElD,+DAA+D;IAC/D,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEtF,4FAA4F;IAC5F,6EAA6E;IAC7E,0EAA0E;IAC1E,KAAK,MAAM,EAAE,aAAa,EAAE,IAAI,YAAY,EAAE,CAAC;QAC7C,EAAE,CAAC,OAAO,CACR,2FAA2F,CAC5F,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACrB,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC5E,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAqB,EAAE,UAAkB;IAC9E,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAqB,EAAE,UAAkB;IAC7E,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CACN;;GAEH,CACE;SACA,GAAG,CAAC,UAAU,CAAsB,CAAC;IACxC,OAAO,GAAG,CAAC,KAAK,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAqB,EAAE,UAAmB;IAC1E,IAAI,KAAK,GAAG;;;;;GAKX,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,IAAI,sBAAsB,CAAC;QAChC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;IACnD,CAAC;IAED,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAqB,EAAE,UAAmB;IAC9E,IAAI,KAAK,GAAG;;;;;GAKX,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,IAAI,sBAAsB,CAAC;QAChC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;IACnD,CAAC;IAED,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;AACzC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAqB,EACrB,WAAmB,EACnB,SAAkB;IAElB,MAAM,KAAK,GAAG,SAAS;QACrB,CAAC,CAAC,gIAAgI;QAClI,CAAC,CAAC,oHAAoH,CAAC;IAEzH,MAAM,GAAG,GAAG,SAAS;QACnB,CAAC,CAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAA0B;QACzE,CAAC,CAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,CAA0B,CAAC;IAEjE,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,EAAqB,EACrB,QAAgB,EAChB,MAAsB;IAEtB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;GAYvB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,EAC9E,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,cAAc,EACrB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EACxB,QAAQ,CACT,CAAC,OAAO,CAAC;IAEV,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,aAAa,CAAC,UAAU,QAAQ,aAAa,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Module - Public API
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all public types, classes, and functions from the database module.
|
|
5
|
+
* This file serves as the facade for backwards compatibility.
|
|
6
|
+
*/
|
|
7
|
+
export { MigrationError } from '../migrations.js';
|
|
8
|
+
export type { DatabaseInfo, DatabaseStats, ListDocumentsOptions, ListImagesOptions, } from './types.js';
|
|
9
|
+
export { DatabaseErrorCode, DatabaseError } from './types.js';
|
|
10
|
+
export { DatabaseService } from './service.js';
|
|
11
|
+
export { insertImage, insertImageBatch, getImage, getImagesByDocument, getImagesByOCRResult, getPendingImages, listImages, setImageProcessing, updateImageVLMResult, setImageVLMFailed, updateImageContext, getImageStats, deleteImage, deleteImagesByDocument, countImagesByDocument, resetFailedImages, } from './image-operations.js';
|
|
12
|
+
export { rowToImage } from './converters.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/storage/database/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,YAAY,EACV,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Module - Public API
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all public types, classes, and functions from the database module.
|
|
5
|
+
* This file serves as the facade for backwards compatibility.
|
|
6
|
+
*/
|
|
7
|
+
// Re-export MigrationError from migrations for convenience
|
|
8
|
+
export { MigrationError } from '../migrations.js';
|
|
9
|
+
export { DatabaseErrorCode, DatabaseError } from './types.js';
|
|
10
|
+
// Export the main service class
|
|
11
|
+
export { DatabaseService } from './service.js';
|
|
12
|
+
// Export image operations
|
|
13
|
+
export { insertImage, insertImageBatch, getImage, getImagesByDocument, getImagesByOCRResult, getPendingImages, listImages, setImageProcessing, updateImageVLMResult, setImageVLMFailed, updateImageContext, getImageStats, deleteImage, deleteImagesByDocument, countImagesByDocument, resetFailedImages, } from './image-operations.js';
|
|
14
|
+
// Export converters
|
|
15
|
+
export { rowToImage } from './converters.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/storage/database/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,2DAA2D;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASlD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D,gCAAgC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,0BAA0B;AAC1B,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAE/B,oBAAoB;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Document Lock Operations
|
|
3
|
+
*
|
|
4
|
+
* Provides database operations for document-level locking to prevent
|
|
5
|
+
* concurrent edits. Supports exclusive and shared lock types with
|
|
6
|
+
* automatic expiry via TTL.
|
|
7
|
+
*
|
|
8
|
+
* CRITICAL: NEVER use console.log() - stdout is reserved for JSON-RPC protocol.
|
|
9
|
+
*
|
|
10
|
+
* @module database/lock-operations
|
|
11
|
+
*/
|
|
12
|
+
import type Database from 'better-sqlite3';
|
|
13
|
+
export interface LockRow {
|
|
14
|
+
document_id: string;
|
|
15
|
+
user_id: string;
|
|
16
|
+
session_id: string;
|
|
17
|
+
lock_type: string;
|
|
18
|
+
reason: string | null;
|
|
19
|
+
acquired_at: string;
|
|
20
|
+
expires_at: string;
|
|
21
|
+
}
|
|
22
|
+
export interface AcquireLockParams {
|
|
23
|
+
document_id: string;
|
|
24
|
+
user_id: string;
|
|
25
|
+
session_id: string;
|
|
26
|
+
lock_type: string;
|
|
27
|
+
reason?: string;
|
|
28
|
+
ttl_minutes?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Acquire a lock on a document.
|
|
32
|
+
*
|
|
33
|
+
* Exclusive locks prevent any other lock. Shared locks allow other shared
|
|
34
|
+
* locks but block exclusive locks. Expired locks are cleaned up first.
|
|
35
|
+
*
|
|
36
|
+
* @param conn - Database connection
|
|
37
|
+
* @param params - Lock parameters
|
|
38
|
+
* @returns The acquired lock row
|
|
39
|
+
* @throws Error if document not found or lock conflict
|
|
40
|
+
*/
|
|
41
|
+
export declare function acquireLock(conn: Database.Database, params: AcquireLockParams): LockRow;
|
|
42
|
+
/**
|
|
43
|
+
* Release a lock on a document.
|
|
44
|
+
*
|
|
45
|
+
* @param conn - Database connection
|
|
46
|
+
* @param documentId - Document ID
|
|
47
|
+
* @throws Error if no lock found
|
|
48
|
+
*/
|
|
49
|
+
export declare function releaseLock(conn: Database.Database, documentId: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Get the current lock status for a document.
|
|
52
|
+
* Cleans up expired locks before checking.
|
|
53
|
+
*
|
|
54
|
+
* @param conn - Database connection
|
|
55
|
+
* @param documentId - Document ID
|
|
56
|
+
* @returns Lock row or null if no active lock
|
|
57
|
+
*/
|
|
58
|
+
export declare function getLockStatus(conn: Database.Database, documentId: string): LockRow | null;
|
|
59
|
+
//# sourceMappingURL=lock-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock-operations.d.ts","sourceRoot":"","sources":["../../../../src/services/storage/database/lock-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAM3C,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CA2DvF;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAQ7E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAOzF"}
|