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