mcard-js 2.1.12 → 2.1.13
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.
- package/README.md +14 -0
- package/dist/hash/HashValidator.d.ts +14 -0
- package/dist/hash/HashValidator.d.ts.map +1 -0
- package/dist/hash/HashValidator.js +57 -0
- package/dist/hash/HashValidator.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/model/CardCollection.d.ts +92 -0
- package/dist/model/CardCollection.d.ts.map +1 -0
- package/dist/model/CardCollection.js +217 -0
- package/dist/model/CardCollection.js.map +1 -0
- package/dist/model/ContentTypeInterpreter.d.ts +23 -0
- package/dist/model/ContentTypeInterpreter.d.ts.map +1 -0
- package/dist/model/ContentTypeInterpreter.js +140 -0
- package/dist/model/ContentTypeInterpreter.js.map +1 -0
- package/dist/model/EventProducer.d.ts +10 -0
- package/dist/model/EventProducer.d.ts.map +1 -0
- package/dist/model/EventProducer.js +46 -0
- package/dist/model/EventProducer.js.map +1 -0
- package/dist/model/GTime.d.ts +44 -0
- package/dist/model/GTime.d.ts.map +1 -0
- package/dist/model/GTime.js +91 -0
- package/dist/model/GTime.js.map +1 -0
- package/dist/model/Handle.d.ts +37 -0
- package/dist/model/Handle.d.ts.map +1 -0
- package/dist/model/Handle.js +90 -0
- package/dist/model/Handle.js.map +1 -0
- package/dist/model/MCard.d.ts +43 -0
- package/dist/model/MCard.d.ts.map +1 -0
- package/dist/model/MCard.js +76 -0
- package/dist/model/MCard.js.map +1 -0
- package/dist/model/constants.d.ts +45 -0
- package/dist/model/constants.d.ts.map +1 -0
- package/dist/model/constants.js +27 -0
- package/dist/model/constants.js.map +1 -0
- package/dist/model/detectors/BaseDetector.d.ts +26 -0
- package/dist/model/detectors/BaseDetector.d.ts.map +1 -0
- package/dist/model/detectors/BaseDetector.js +5 -0
- package/dist/model/detectors/BaseDetector.js.map +1 -0
- package/dist/model/detectors/BinaryDetector.d.ts +12 -0
- package/dist/model/detectors/BinaryDetector.d.ts.map +1 -0
- package/dist/model/detectors/BinaryDetector.js +82 -0
- package/dist/model/detectors/BinaryDetector.js.map +1 -0
- package/dist/model/detectors/ContentTypeInterpreter.d.ts +11 -0
- package/dist/model/detectors/ContentTypeInterpreter.d.ts.map +1 -0
- package/dist/model/detectors/ContentTypeInterpreter.js +51 -0
- package/dist/model/detectors/ContentTypeInterpreter.js.map +1 -0
- package/dist/model/detectors/DataFormatDetectors.d.ts +29 -0
- package/dist/model/detectors/DataFormatDetectors.d.ts.map +1 -0
- package/dist/model/detectors/DataFormatDetectors.js +223 -0
- package/dist/model/detectors/DataFormatDetectors.js.map +1 -0
- package/dist/model/detectors/LanguageDetector.d.ts +11 -0
- package/dist/model/detectors/LanguageDetector.d.ts.map +1 -0
- package/dist/model/detectors/LanguageDetector.js +148 -0
- package/dist/model/detectors/LanguageDetector.js.map +1 -0
- package/dist/model/detectors/MarkupDetectors.d.ts +22 -0
- package/dist/model/detectors/MarkupDetectors.d.ts.map +1 -0
- package/dist/model/detectors/MarkupDetectors.js +132 -0
- package/dist/model/detectors/MarkupDetectors.js.map +1 -0
- package/dist/model/detectors/OBJDetector.d.ts +8 -0
- package/dist/model/detectors/OBJDetector.d.ts.map +1 -0
- package/dist/model/detectors/OBJDetector.js +48 -0
- package/dist/model/detectors/OBJDetector.js.map +1 -0
- package/dist/model/detectors/registry.d.ts +13 -0
- package/dist/model/detectors/registry.d.ts.map +1 -0
- package/dist/model/detectors/registry.js +67 -0
- package/dist/model/detectors/registry.js.map +1 -0
- package/dist/monads/Either.d.ts +51 -0
- package/dist/monads/Either.d.ts.map +1 -0
- package/dist/monads/Either.js +82 -0
- package/dist/monads/Either.js.map +1 -0
- package/dist/monads/IO.d.ts +38 -0
- package/dist/monads/IO.d.ts.map +1 -0
- package/dist/monads/IO.js +66 -0
- package/dist/monads/IO.js.map +1 -0
- package/dist/monads/Maybe.d.ts +45 -0
- package/dist/monads/Maybe.d.ts.map +1 -0
- package/dist/monads/Maybe.js +73 -0
- package/dist/monads/Maybe.js.map +1 -0
- package/dist/monads/Reader.d.ts +29 -0
- package/dist/monads/Reader.d.ts.map +1 -0
- package/dist/monads/Reader.js +44 -0
- package/dist/monads/Reader.js.map +1 -0
- package/dist/monads/State.d.ts +33 -0
- package/dist/monads/State.d.ts.map +1 -0
- package/dist/monads/State.js +50 -0
- package/dist/monads/State.js.map +1 -0
- package/dist/monads/Writer.d.ts +29 -0
- package/dist/monads/Writer.d.ts.map +1 -0
- package/dist/monads/Writer.js +46 -0
- package/dist/monads/Writer.js.map +1 -0
- package/dist/ptr/FaroSidecar.d.ts +56 -0
- package/dist/ptr/FaroSidecar.d.ts.map +1 -0
- package/dist/ptr/FaroSidecar.js +102 -0
- package/dist/ptr/FaroSidecar.js.map +1 -0
- package/dist/ptr/LensProtocol.d.ts +84 -0
- package/dist/ptr/LensProtocol.d.ts.map +1 -0
- package/dist/ptr/LensProtocol.js +98 -0
- package/dist/ptr/LensProtocol.js.map +1 -0
- package/dist/ptr/SandboxWorker.d.ts +54 -0
- package/dist/ptr/SandboxWorker.d.ts.map +1 -0
- package/dist/ptr/SandboxWorker.js +172 -0
- package/dist/ptr/SandboxWorker.js.map +1 -0
- package/dist/ptr/common_types.d.ts +39 -0
- package/dist/ptr/common_types.d.ts.map +1 -0
- package/dist/ptr/common_types.js +12 -0
- package/dist/ptr/common_types.js.map +1 -0
- package/dist/ptr/lambda/AlphaConversion.d.ts +42 -0
- package/dist/ptr/lambda/AlphaConversion.d.ts.map +1 -0
- package/dist/ptr/lambda/AlphaConversion.js +244 -0
- package/dist/ptr/lambda/AlphaConversion.js.map +1 -0
- package/dist/ptr/lambda/BetaReduction.d.ts +73 -0
- package/dist/ptr/lambda/BetaReduction.d.ts.map +1 -0
- package/dist/ptr/lambda/BetaReduction.js +322 -0
- package/dist/ptr/lambda/BetaReduction.js.map +1 -0
- package/dist/ptr/lambda/EtaConversion.d.ts +65 -0
- package/dist/ptr/lambda/EtaConversion.d.ts.map +1 -0
- package/dist/ptr/lambda/EtaConversion.js +228 -0
- package/dist/ptr/lambda/EtaConversion.js.map +1 -0
- package/dist/ptr/lambda/FreeVariables.d.ts +44 -0
- package/dist/ptr/lambda/FreeVariables.d.ts.map +1 -0
- package/dist/ptr/lambda/FreeVariables.js +207 -0
- package/dist/ptr/lambda/FreeVariables.js.map +1 -0
- package/dist/ptr/lambda/LambdaRuntime.d.ts +80 -0
- package/dist/ptr/lambda/LambdaRuntime.d.ts.map +1 -0
- package/dist/ptr/lambda/LambdaRuntime.js +433 -0
- package/dist/ptr/lambda/LambdaRuntime.js.map +1 -0
- package/dist/ptr/lambda/LambdaTerm.d.ts +95 -0
- package/dist/ptr/lambda/LambdaTerm.d.ts.map +1 -0
- package/dist/ptr/lambda/LambdaTerm.js +159 -0
- package/dist/ptr/lambda/LambdaTerm.js.map +1 -0
- package/dist/ptr/lambda/index.d.ts +24 -0
- package/dist/ptr/lambda/index.d.ts.map +1 -0
- package/dist/ptr/lambda/index.js +34 -0
- package/dist/ptr/lambda/index.js.map +1 -0
- package/dist/ptr/llm/Config.d.ts +57 -0
- package/dist/ptr/llm/Config.d.ts.map +1 -0
- package/dist/ptr/llm/Config.js +183 -0
- package/dist/ptr/llm/Config.js.map +1 -0
- package/dist/ptr/llm/LLMRuntime.d.ts +35 -0
- package/dist/ptr/llm/LLMRuntime.d.ts.map +1 -0
- package/dist/ptr/llm/LLMRuntime.js +176 -0
- package/dist/ptr/llm/LLMRuntime.js.map +1 -0
- package/dist/ptr/llm/providers/LLMProvider.d.ts +43 -0
- package/dist/ptr/llm/providers/LLMProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/LLMProvider.js +31 -0
- package/dist/ptr/llm/providers/LLMProvider.js.map +1 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.d.ts +22 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.js +155 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.js.map +1 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.d.ts +20 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.js +42 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.js.map +1 -0
- package/dist/ptr/llm/providers/OllamaProvider.d.ts +21 -0
- package/dist/ptr/llm/providers/OllamaProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/OllamaProvider.js +158 -0
- package/dist/ptr/llm/providers/OllamaProvider.js.map +1 -0
- package/dist/ptr/llm/providers/WebLLMProvider.d.ts +22 -0
- package/dist/ptr/llm/providers/WebLLMProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/WebLLMProvider.js +151 -0
- package/dist/ptr/llm/providers/WebLLMProvider.js.map +1 -0
- package/dist/ptr/node/Action.d.ts +426 -0
- package/dist/ptr/node/Action.d.ts.map +1 -0
- package/dist/ptr/node/Action.js +711 -0
- package/dist/ptr/node/Action.js.map +1 -0
- package/dist/ptr/node/CLMLoader.d.ts +18 -0
- package/dist/ptr/node/CLMLoader.d.ts.map +1 -0
- package/dist/ptr/node/CLMLoader.js +18 -0
- package/dist/ptr/node/CLMLoader.js.map +1 -0
- package/dist/ptr/node/CLMRunner.d.ts +34 -0
- package/dist/ptr/node/CLMRunner.d.ts.map +1 -0
- package/dist/ptr/node/CLMRunner.js +36 -0
- package/dist/ptr/node/CLMRunner.js.map +1 -0
- package/dist/ptr/node/FileSystemUtils.d.ts +40 -0
- package/dist/ptr/node/FileSystemUtils.d.ts.map +1 -0
- package/dist/ptr/node/FileSystemUtils.js +170 -0
- package/dist/ptr/node/FileSystemUtils.js.map +1 -0
- package/dist/ptr/node/NetworkConfig.d.ts +191 -0
- package/dist/ptr/node/NetworkConfig.d.ts.map +1 -0
- package/dist/ptr/node/NetworkConfig.js +8 -0
- package/dist/ptr/node/NetworkConfig.js.map +1 -0
- package/dist/ptr/node/NetworkRuntime.d.ts +38 -0
- package/dist/ptr/node/NetworkRuntime.d.ts.map +1 -0
- package/dist/ptr/node/NetworkRuntime.js +871 -0
- package/dist/ptr/node/NetworkRuntime.js.map +1 -0
- package/dist/ptr/node/P2PChatSession.d.ts +53 -0
- package/dist/ptr/node/P2PChatSession.d.ts.map +1 -0
- package/dist/ptr/node/P2PChatSession.js +154 -0
- package/dist/ptr/node/P2PChatSession.js.map +1 -0
- package/dist/ptr/node/RuntimeInterface.d.ts +4 -0
- package/dist/ptr/node/RuntimeInterface.d.ts.map +1 -0
- package/dist/ptr/node/RuntimeInterface.js +2 -0
- package/dist/ptr/node/RuntimeInterface.js.map +1 -0
- package/dist/ptr/node/Runtimes.d.ts +34 -0
- package/dist/ptr/node/Runtimes.d.ts.map +1 -0
- package/dist/ptr/node/Runtimes.js +38 -0
- package/dist/ptr/node/Runtimes.js.map +1 -0
- package/dist/ptr/node/SignalingServer.d.ts +37 -0
- package/dist/ptr/node/SignalingServer.d.ts.map +1 -0
- package/dist/ptr/node/SignalingServer.js +218 -0
- package/dist/ptr/node/SignalingServer.js.map +1 -0
- package/dist/ptr/node/cli.d.ts +3 -0
- package/dist/ptr/node/cli.d.ts.map +1 -0
- package/dist/ptr/node/cli.js +266 -0
- package/dist/ptr/node/cli.js.map +1 -0
- package/dist/ptr/node/clm/builtins/handle.d.ts +14 -0
- package/dist/ptr/node/clm/builtins/handle.d.ts.map +1 -0
- package/dist/ptr/node/clm/builtins/handle.js +177 -0
- package/dist/ptr/node/clm/builtins/handle.js.map +1 -0
- package/dist/ptr/node/clm/builtins/index.d.ts +20 -0
- package/dist/ptr/node/clm/builtins/index.d.ts.map +1 -0
- package/dist/ptr/node/clm/builtins/index.js +60 -0
- package/dist/ptr/node/clm/builtins/index.js.map +1 -0
- package/dist/ptr/node/clm/index.d.ts +25 -0
- package/dist/ptr/node/clm/index.d.ts.map +1 -0
- package/dist/ptr/node/clm/index.js +28 -0
- package/dist/ptr/node/clm/index.js.map +1 -0
- package/dist/ptr/node/clm/loader.d.ts +25 -0
- package/dist/ptr/node/clm/loader.d.ts.map +1 -0
- package/dist/ptr/node/clm/loader.js +146 -0
- package/dist/ptr/node/clm/loader.js.map +1 -0
- package/dist/ptr/node/clm/multiruntime.d.ts +9 -0
- package/dist/ptr/node/clm/multiruntime.d.ts.map +1 -0
- package/dist/ptr/node/clm/multiruntime.js +121 -0
- package/dist/ptr/node/clm/multiruntime.js.map +1 -0
- package/dist/ptr/node/clm/runner.d.ts +70 -0
- package/dist/ptr/node/clm/runner.d.ts.map +1 -0
- package/dist/ptr/node/clm/runner.js +324 -0
- package/dist/ptr/node/clm/runner.js.map +1 -0
- package/dist/ptr/node/clm/types.d.ts +166 -0
- package/dist/ptr/node/clm/types.d.ts.map +1 -0
- package/dist/ptr/node/clm/types.js +5 -0
- package/dist/ptr/node/clm/types.js.map +1 -0
- package/dist/ptr/node/clm/utils.d.ts +29 -0
- package/dist/ptr/node/clm/utils.d.ts.map +1 -0
- package/dist/ptr/node/clm/utils.js +88 -0
- package/dist/ptr/node/clm/utils.js.map +1 -0
- package/dist/ptr/node/network/HttpClient.d.ts +14 -0
- package/dist/ptr/node/network/HttpClient.d.ts.map +1 -0
- package/dist/ptr/node/network/HttpClient.js +139 -0
- package/dist/ptr/node/network/HttpClient.js.map +1 -0
- package/dist/ptr/node/network/MCardSerialization.d.ts +19 -0
- package/dist/ptr/node/network/MCardSerialization.d.ts.map +1 -0
- package/dist/ptr/node/network/MCardSerialization.js +41 -0
- package/dist/ptr/node/network/MCardSerialization.js.map +1 -0
- package/dist/ptr/node/network/NetworkInfrastructure.d.ts +37 -0
- package/dist/ptr/node/network/NetworkInfrastructure.d.ts.map +1 -0
- package/dist/ptr/node/network/NetworkInfrastructure.js +121 -0
- package/dist/ptr/node/network/NetworkInfrastructure.js.map +1 -0
- package/dist/ptr/node/network/NetworkSecurity.d.ts +24 -0
- package/dist/ptr/node/network/NetworkSecurity.d.ts.map +1 -0
- package/dist/ptr/node/network/NetworkSecurity.js +104 -0
- package/dist/ptr/node/network/NetworkSecurity.js.map +1 -0
- package/dist/ptr/node/runtimes/base.d.ts +31 -0
- package/dist/ptr/node/runtimes/base.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/base.js +33 -0
- package/dist/ptr/node/runtimes/base.js.map +1 -0
- package/dist/ptr/node/runtimes/binary.d.ts +10 -0
- package/dist/ptr/node/runtimes/binary.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/binary.js +16 -0
- package/dist/ptr/node/runtimes/binary.js.map +1 -0
- package/dist/ptr/node/runtimes/factory.d.ts +22 -0
- package/dist/ptr/node/runtimes/factory.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/factory.js +152 -0
- package/dist/ptr/node/runtimes/factory.js.map +1 -0
- package/dist/ptr/node/runtimes/index.d.ts +28 -0
- package/dist/ptr/node/runtimes/index.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/index.js +30 -0
- package/dist/ptr/node/runtimes/index.js.map +1 -0
- package/dist/ptr/node/runtimes/javascript.d.ts +22 -0
- package/dist/ptr/node/runtimes/javascript.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/javascript.js +125 -0
- package/dist/ptr/node/runtimes/javascript.js.map +1 -0
- package/dist/ptr/node/runtimes/lean.d.ts +10 -0
- package/dist/ptr/node/runtimes/lean.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/lean.js +60 -0
- package/dist/ptr/node/runtimes/lean.js.map +1 -0
- package/dist/ptr/node/runtimes/loader.d.ts +21 -0
- package/dist/ptr/node/runtimes/loader.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/loader.js +126 -0
- package/dist/ptr/node/runtimes/loader.js.map +1 -0
- package/dist/ptr/node/runtimes/python.d.ts +14 -0
- package/dist/ptr/node/runtimes/python.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/python.js +100 -0
- package/dist/ptr/node/runtimes/python.js.map +1 -0
- package/dist/ptr/node/runtimes/wasm.d.ts +10 -0
- package/dist/ptr/node/runtimes/wasm.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/wasm.js +55 -0
- package/dist/ptr/node/runtimes/wasm.js.map +1 -0
- package/dist/rag/GraphRAGEngine.d.ts +26 -0
- package/dist/rag/GraphRAGEngine.d.ts.map +1 -0
- package/dist/rag/GraphRAGEngine.js +166 -0
- package/dist/rag/GraphRAGEngine.js.map +1 -0
- package/dist/rag/HandleVectorStore.d.ts +201 -0
- package/dist/rag/HandleVectorStore.d.ts.map +1 -0
- package/dist/rag/HandleVectorStore.js +527 -0
- package/dist/rag/HandleVectorStore.js.map +1 -0
- package/dist/rag/PersistentIndexer.d.ts +148 -0
- package/dist/rag/PersistentIndexer.d.ts.map +1 -0
- package/dist/rag/PersistentIndexer.js +302 -0
- package/dist/rag/PersistentIndexer.js.map +1 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.d.ts +87 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.d.ts.map +1 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.js +164 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.js.map +1 -0
- package/dist/rag/graph/community.d.ts +56 -0
- package/dist/rag/graph/community.d.ts.map +1 -0
- package/dist/rag/graph/community.js +247 -0
- package/dist/rag/graph/community.js.map +1 -0
- package/dist/rag/graph/extractor.d.ts +99 -0
- package/dist/rag/graph/extractor.d.ts.map +1 -0
- package/dist/rag/graph/extractor.js +210 -0
- package/dist/rag/graph/extractor.js.map +1 -0
- package/dist/rag/graph/store.d.ts +176 -0
- package/dist/rag/graph/store.d.ts.map +1 -0
- package/dist/rag/graph/store.js +504 -0
- package/dist/rag/graph/store.js.map +1 -0
- package/dist/rag/index.d.ts +20 -0
- package/dist/rag/index.d.ts.map +1 -0
- package/dist/rag/index.js +26 -0
- package/dist/rag/index.js.map +1 -0
- package/dist/rag/semanticVersioning.d.ts +187 -0
- package/dist/rag/semanticVersioning.d.ts.map +1 -0
- package/dist/rag/semanticVersioning.js +253 -0
- package/dist/rag/semanticVersioning.js.map +1 -0
- package/dist/storage/IndexedDBEngine.d.ts +33 -0
- package/dist/storage/IndexedDBEngine.d.ts.map +1 -0
- package/dist/storage/IndexedDBEngine.js +198 -0
- package/dist/storage/IndexedDBEngine.js.map +1 -0
- package/dist/storage/SqliteNodeEngine.d.ts +123 -0
- package/dist/storage/SqliteNodeEngine.d.ts.map +1 -0
- package/dist/storage/SqliteNodeEngine.js +385 -0
- package/dist/storage/SqliteNodeEngine.js.map +1 -0
- package/dist/storage/SqliteWasmEngine.d.ts +60 -0
- package/dist/storage/SqliteWasmEngine.d.ts.map +1 -0
- package/dist/storage/SqliteWasmEngine.js +193 -0
- package/dist/storage/SqliteWasmEngine.js.map +1 -0
- package/dist/storage/StorageAdapter.d.ts +42 -0
- package/dist/storage/StorageAdapter.d.ts.map +1 -0
- package/dist/storage/StorageAdapter.js +2 -0
- package/dist/storage/StorageAdapter.js.map +1 -0
- package/dist/storage/VectorStore.d.ts +202 -0
- package/dist/storage/VectorStore.d.ts.map +1 -0
- package/dist/storage/VectorStore.js +557 -0
- package/dist/storage/VectorStore.js.map +1 -0
- package/dist/storage/schema.d.ts +162 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +373 -0
- package/dist/storage/schema.js.map +1 -0
- package/dist/util/FileIO.d.ts +44 -0
- package/dist/util/FileIO.d.ts.map +1 -0
- package/dist/util/FileIO.js +203 -0
- package/dist/util/FileIO.js.map +1 -0
- package/dist/util/Loader.d.ts +34 -0
- package/dist/util/Loader.d.ts.map +1 -0
- package/dist/util/Loader.js +168 -0
- package/dist/util/Loader.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/ptr/node/runtimes/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,SAAS,EACZ,MAAM,uBAAuB,CAAC;AAE/B,MAAM,OAAO,aAAa;IACtB;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,OAAgB,EAAE,MAAW;QACtD,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACzE,MAAM,GAAG,GAAG,OAAkC,CAAC;QAC/C,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9F,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;QAEtD,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAE9F,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,SAAS,EAAE,EAAE,CAAC;QACjF,CAAC;QAED,IAAI,CAAC;YACD,IAAI,cAAc,GAAG,MAAM,CAAC;YAC5B,IAAI,MAAM,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9D,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxB,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7C,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;YAE9C,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE;gBACpE,SAAS;gBACT,kBAAkB,EAAE,KAAK;aAC5B,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACL,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,UAAU;oBAC5C,iBAAiB,EAAE,YAAY,CAAC,OAAO,CAAC,gBAAgB;oBACxD,gBAAgB,EAAE,YAAY,CAAC,OAAO,CAAC,eAAe;oBACtD,gBAAgB,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACjF,WAAW,EAAE,CAAC;iBACjB;gBACD,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClC,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,YAAY,EAAE,CAAC,CAAC,WAAW;oBAC3B,UAAU,EAAE,CAAC,CAAC,IAAI;oBAClB,IAAI,EAAE,CAAC,CAAC,QAAQ;iBACnB,CAAC,CAAC;aACN,CAAC;YAEF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,QAAQ,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACvF,CAAC;IACL,CAAC;CACJ;AAED,MAAM,OAAO,uBAAuB;IAChC;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,OAAgB,EAAE,MAAW;QACtD,MAAM,GAAG,GAAG,OAAkC,CAAC;QAC/C,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,EAAE;YAC1C,SAAS,EAAE,wCAAwC;YACnD,MAAM,EAAE,oBAAoB;SAC/B,CAAC,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,EAAE,GAAG,YAAY,CAAC;QAE7E,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAE9F,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,SAAS,EAAE,EAAE,CAAC;QACjF,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEzF,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;YAE9C,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC/C,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAC1C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;oBACzD,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC3B,QAAQ,IAAI,CAAC,CAAC;gBAClB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,OAAO,IAAI,CAAC,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpF,CAAC;YACL,CAAC;YAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAE1D,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE;oBACJ,WAAW,EAAE,KAAK,CAAC,MAAM;oBACzB,QAAQ;oBACR,OAAO;oBACP,MAAM;iBACT;gBACD,cAAc,EAAE;oBACZ,OAAO,EAAE,cAAc;oBACvB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,aAAa,EAAE,OAAO,CAAC,aAAa;iBACvC;aACJ,CAAC;QACN,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACvF,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python runtime executor.
|
|
3
|
+
*
|
|
4
|
+
* Executes Python code via subprocess with automatic entry point detection.
|
|
5
|
+
*/
|
|
6
|
+
import { Runtime } from './base.js';
|
|
7
|
+
export declare class PythonRuntime implements Runtime {
|
|
8
|
+
execute(code: string, context: unknown, config: any): Promise<unknown>;
|
|
9
|
+
/**
|
|
10
|
+
* Create Python wrapper script with entry point invocation.
|
|
11
|
+
*/
|
|
12
|
+
private createWrapper;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=python.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../../src/ptr/node/runtimes/python.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,OAAO,EAAyB,MAAM,WAAW,CAAC;AAM3D,qBAAa,aAAc,YAAW,OAAO;IACnC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B5E;;OAEG;IACH,OAAO,CAAC,aAAa;CAsDxB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python runtime executor.
|
|
3
|
+
*
|
|
4
|
+
* Executes Python code via subprocess with automatic entry point detection.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import * as util from 'util';
|
|
9
|
+
import { execFile, parseOutput } from './base.js';
|
|
10
|
+
import { findProjectRoot } from '../FileSystemUtils.js';
|
|
11
|
+
const writeFile = util.promisify(fs.writeFile);
|
|
12
|
+
const unlink = util.promisify(fs.unlink);
|
|
13
|
+
export class PythonRuntime {
|
|
14
|
+
async execute(code, context, config) {
|
|
15
|
+
const entryPoint = config.entry_point || 'add';
|
|
16
|
+
const contextStr = JSON.stringify(context);
|
|
17
|
+
const projectRoot = findProjectRoot();
|
|
18
|
+
const wrapper = this.createWrapper(code, entryPoint);
|
|
19
|
+
const tmpFile = path.resolve(process.cwd(), `tmp_${Date.now()}.py`);
|
|
20
|
+
await writeFile(tmpFile, wrapper);
|
|
21
|
+
try {
|
|
22
|
+
const { stdout, stderr } = await execFile('python3', [tmpFile, contextStr], {
|
|
23
|
+
cwd: projectRoot,
|
|
24
|
+
env: {
|
|
25
|
+
...process.env,
|
|
26
|
+
PYTHONPATH: `${projectRoot}${path.delimiter}${process.env.PYTHONPATH || ''}`
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
if (stderr)
|
|
30
|
+
console.error('[Python Stderr]', stderr);
|
|
31
|
+
return parseOutput(stdout);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
const stderr = error.stderr ? `\nStderr: ${error.stderr.toString()}` : '';
|
|
35
|
+
const stdout = error.stdout ? `\nStdout: ${error.stdout.toString()}` : '';
|
|
36
|
+
throw new Error(`Python execution failed: ${error.message}${stderr}${stdout}`);
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
await unlink(tmpFile);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create Python wrapper script with entry point invocation.
|
|
44
|
+
*/
|
|
45
|
+
createWrapper(code, entryPoint) {
|
|
46
|
+
return `
|
|
47
|
+
import sys
|
|
48
|
+
import json
|
|
49
|
+
|
|
50
|
+
try:
|
|
51
|
+
context = json.loads(sys.argv[1])
|
|
52
|
+
target = context
|
|
53
|
+
|
|
54
|
+
if isinstance(target, str):
|
|
55
|
+
target = target.encode('utf-8')
|
|
56
|
+
except:
|
|
57
|
+
context = {}
|
|
58
|
+
target = {}
|
|
59
|
+
pass
|
|
60
|
+
|
|
61
|
+
# User logic
|
|
62
|
+
${code}
|
|
63
|
+
|
|
64
|
+
# Entry point invocation
|
|
65
|
+
def _is_arg_error(e):
|
|
66
|
+
msg = str(e).lower()
|
|
67
|
+
return 'positional argument' in msg or 'required argument' in msg or 'takes' in msg and 'argument' in msg
|
|
68
|
+
|
|
69
|
+
try:
|
|
70
|
+
fn = None
|
|
71
|
+
if '${entryPoint}' in dir():
|
|
72
|
+
fn = ${entryPoint}
|
|
73
|
+
elif '${entryPoint}' in globals():
|
|
74
|
+
fn = globals()['${entryPoint}']
|
|
75
|
+
|
|
76
|
+
if fn is not None:
|
|
77
|
+
try:
|
|
78
|
+
res = fn(context)
|
|
79
|
+
except TypeError as e:
|
|
80
|
+
if not _is_arg_error(e):
|
|
81
|
+
raise
|
|
82
|
+
try:
|
|
83
|
+
res = fn(target)
|
|
84
|
+
except TypeError as e2:
|
|
85
|
+
if not _is_arg_error(e2):
|
|
86
|
+
raise
|
|
87
|
+
res = fn()
|
|
88
|
+
print(json.dumps(res))
|
|
89
|
+
else:
|
|
90
|
+
if 'result' in dir() or 'result' in globals():
|
|
91
|
+
print(json.dumps(result if 'result' in dir() else globals().get('result')))
|
|
92
|
+
else:
|
|
93
|
+
print(json.dumps(None))
|
|
94
|
+
except Exception as e:
|
|
95
|
+
print(json.dumps({"error": str(e)}))
|
|
96
|
+
sys.exit(1)
|
|
97
|
+
`;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=python.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../../../src/ptr/node/runtimes/python.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAW,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAEzC,MAAM,OAAO,aAAa;IACtB,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAAgB,EAAE,MAAW;QACrD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;QAEtC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpE,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAElC,IAAI,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;gBACxE,GAAG,EAAE,WAAW;gBAChB,GAAG,EAAE;oBACD,GAAG,OAAO,CAAC,GAAG;oBACd,UAAU,EAAE,GAAG,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE;iBAC/E;aACJ,CAAC,CAAC;YACH,IAAI,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAErD,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACP,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,IAAY,EAAE,UAAkB;QAClD,OAAO;;;;;;;;;;;;;;;;EAgBb,IAAI;;;;;;;;;UASI,UAAU;eACL,UAAU;YACb,UAAU;0BACI,UAAU;;;;;;;;;;;;;;;;;;;;;;;CAuBnC,CAAC;IACE,CAAC;CACJ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WASM runtime executor.
|
|
3
|
+
*
|
|
4
|
+
* Executes WebAssembly modules via wasmtime CLI.
|
|
5
|
+
*/
|
|
6
|
+
import { Runtime } from './base.js';
|
|
7
|
+
export declare class WasmRuntime implements Runtime {
|
|
8
|
+
execute(wasmPath: string, context: unknown, config: any, chapterDir: string): Promise<unknown>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=wasm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../../../src/ptr/node/runtimes/wasm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,qBAAa,WAAY,YAAW,OAAO;IACjC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAsDvG"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WASM runtime executor.
|
|
3
|
+
*
|
|
4
|
+
* Executes WebAssembly modules via wasmtime CLI.
|
|
5
|
+
*/
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import * as child_process from 'child_process';
|
|
8
|
+
export class WasmRuntime {
|
|
9
|
+
async execute(wasmPath, context, config, chapterDir) {
|
|
10
|
+
const fullPath = path.resolve(chapterDir, wasmPath);
|
|
11
|
+
const contextStr = typeof context === 'string' ? context : JSON.stringify(context ?? {});
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
const proc = child_process.spawn('wasmtime', [fullPath, contextStr]);
|
|
14
|
+
// Close stdin immediately - WASM programs don't read from stdin
|
|
15
|
+
proc.stdin.end();
|
|
16
|
+
let stdout = '';
|
|
17
|
+
let stderr = '';
|
|
18
|
+
proc.stdout.on('data', (data) => {
|
|
19
|
+
stdout += data.toString('utf-8');
|
|
20
|
+
});
|
|
21
|
+
proc.stderr.on('data', (data) => {
|
|
22
|
+
stderr += data.toString('utf-8');
|
|
23
|
+
});
|
|
24
|
+
proc.on('error', (err) => {
|
|
25
|
+
reject(err);
|
|
26
|
+
});
|
|
27
|
+
proc.on('close', (code) => {
|
|
28
|
+
if (code !== 0) {
|
|
29
|
+
if (stderr.includes('command not found') || stderr.includes('wasmtime: not found')) {
|
|
30
|
+
return reject(new Error('WASM runtime requires wasmtime CLI. Install it, e.g. with: brew install wasmtime'));
|
|
31
|
+
}
|
|
32
|
+
return reject(new Error(`wasmtime exited with code ${code}: ${stderr || stdout}`));
|
|
33
|
+
}
|
|
34
|
+
const out = stdout.trim();
|
|
35
|
+
if (!out) {
|
|
36
|
+
return resolve(undefined);
|
|
37
|
+
}
|
|
38
|
+
// Try numeric first (for arithmetic chapters)
|
|
39
|
+
const numeric = out.trim();
|
|
40
|
+
if (numeric && !Number.isNaN(Number(numeric))) {
|
|
41
|
+
return resolve(Number(numeric));
|
|
42
|
+
}
|
|
43
|
+
// Try JSON
|
|
44
|
+
try {
|
|
45
|
+
return resolve(JSON.parse(out));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Fallback: raw string
|
|
49
|
+
return resolve(out);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=wasm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../../../src/ptr/node/runtimes/wasm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,aAAa,MAAM,eAAe,CAAC;AAG/C,MAAM,OAAO,WAAW;IACpB,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,OAAgB,EAAE,MAAW,EAAE,UAAkB;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAEzF,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;YAErE,gEAAgE;YAChE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAEjB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACpC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACpC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACrB,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACtB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACb,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;wBACjF,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC,CAAC;oBACjH,CAAC;oBACD,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,IAAI,KAAK,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;gBACvF,CAAC;gBAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;oBACP,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC9B,CAAC;gBAED,8CAA8C;gBAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC3B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;oBAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBACpC,CAAC;gBAED,WAAW;gBACX,IAAI,CAAC;oBACD,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpC,CAAC;gBAAC,MAAM,CAAC;oBACL,uBAAuB;oBACvB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { GraphStore } from './graph/store';
|
|
2
|
+
import { GraphExtractor } from './graph/extractor';
|
|
3
|
+
import { MCardVectorStore } from '../storage/VectorStore';
|
|
4
|
+
import { MCard } from '../model/MCard';
|
|
5
|
+
export interface GraphRAGResponse {
|
|
6
|
+
answer: string;
|
|
7
|
+
sources: string[];
|
|
8
|
+
entities: any[];
|
|
9
|
+
relationships: any[];
|
|
10
|
+
graphContext: string;
|
|
11
|
+
vectorContext: string;
|
|
12
|
+
confidence: number;
|
|
13
|
+
metadata?: any;
|
|
14
|
+
}
|
|
15
|
+
export declare class GraphRAGEngine {
|
|
16
|
+
vectorStore: MCardVectorStore;
|
|
17
|
+
graphStore: GraphStore;
|
|
18
|
+
extractor: GraphExtractor;
|
|
19
|
+
llmModel: string;
|
|
20
|
+
config: any;
|
|
21
|
+
constructor(vectorDbPath: string, graphDbPath?: string | null, llmModel?: string, config?: any);
|
|
22
|
+
index(mcard: MCard, extractGraph?: boolean, force?: boolean): Promise<any>;
|
|
23
|
+
query(question: string, k?: number, useGraph?: boolean): Promise<GraphRAGResponse>;
|
|
24
|
+
private _getGraphContext;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=GraphRAGEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphRAGEngine.d.ts","sourceRoot":"","sources":["../../src/rag/GraphRAGEngine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA2D,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAsB,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AA6BvC,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,aAAa,EAAE,GAAG,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAClB;AAED,qBAAa,cAAc;IACvB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,cAAc,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;gBAGR,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,MAAM,GAAG,IAAW,EACjC,QAAQ,GAAE,MAAwB,EAClC,MAAM,GAAE,GAAQ;IAoBd,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,GAAE,OAAc,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,GAAG,CAAC;IAqBvF,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;YA0EnF,gBAAgB;CAiDjC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { GraphStore, storeExtractionResult } from './graph/store';
|
|
2
|
+
import { GraphExtractor } from './graph/extractor';
|
|
3
|
+
import { MCardVectorStore } from '../storage/VectorStore';
|
|
4
|
+
import { chatMonad } from '../ptr/llm/LLMRuntime';
|
|
5
|
+
const GRAPHRAG_SYSTEM_PROMPT = `You are a helpful assistant that answers questions using both document context and a knowledge graph.
|
|
6
|
+
|
|
7
|
+
You have access to:
|
|
8
|
+
1. DOCUMENT CONTEXT: Relevant text passages from the knowledge base
|
|
9
|
+
2. GRAPH CONTEXT: Entities and their relationships from the knowledge graph
|
|
10
|
+
|
|
11
|
+
Use both sources to provide comprehensive, accurate answers.
|
|
12
|
+
- Cite sources [1], [2], etc. for document context
|
|
13
|
+
- Reference entities by name when using graph information
|
|
14
|
+
- If the graph shows relationships that help answer the question, describe them
|
|
15
|
+
|
|
16
|
+
Be thorough but concise. Acknowledge if information is incomplete.`;
|
|
17
|
+
const GRAPH_QUERY_PROMPT = `Question: {question}
|
|
18
|
+
|
|
19
|
+
=== DOCUMENT CONTEXT ===
|
|
20
|
+
{vector_context}
|
|
21
|
+
|
|
22
|
+
=== KNOWLEDGE GRAPH ===
|
|
23
|
+
Entities: {entities}
|
|
24
|
+
Relationships: {relationships}
|
|
25
|
+
|
|
26
|
+
Please provide a comprehensive answer using both the document context and knowledge graph information.`;
|
|
27
|
+
export class GraphRAGEngine {
|
|
28
|
+
vectorStore;
|
|
29
|
+
graphStore;
|
|
30
|
+
extractor;
|
|
31
|
+
llmModel;
|
|
32
|
+
config;
|
|
33
|
+
constructor(vectorDbPath, graphDbPath = null, llmModel = 'gemma3:latest', config = {}) {
|
|
34
|
+
this.config = config;
|
|
35
|
+
this.llmModel = llmModel;
|
|
36
|
+
// Init vector store
|
|
37
|
+
this.vectorStore = new MCardVectorStore(vectorDbPath, config);
|
|
38
|
+
// Init graph store
|
|
39
|
+
const gPath = graphDbPath || vectorDbPath;
|
|
40
|
+
this.graphStore = new GraphStore(gPath);
|
|
41
|
+
// Init extractor
|
|
42
|
+
// GraphExtractor constructor expects config object
|
|
43
|
+
this.extractor = new GraphExtractor({ model: llmModel, ...config });
|
|
44
|
+
}
|
|
45
|
+
async index(mcard, extractGraph = true, force = false) {
|
|
46
|
+
const stats = { vectors: 0, entities: 0, relationships: 0 };
|
|
47
|
+
let content = mcard.getContentAsText();
|
|
48
|
+
// Vector index
|
|
49
|
+
// We always index (INSERT OR REPLACE)
|
|
50
|
+
stats.vectors = await this.vectorStore.index(mcard.hash, content);
|
|
51
|
+
// Graph extract
|
|
52
|
+
if (extractGraph && (force || !(await this.graphStore.isExtracted(mcard.hash)))) {
|
|
53
|
+
const result = await this.extractor.extract(content);
|
|
54
|
+
if (result.success) {
|
|
55
|
+
const [entCount, relCount] = storeExtractionResult(this.graphStore, result, mcard.hash);
|
|
56
|
+
stats.entities = entCount;
|
|
57
|
+
stats.relationships = relCount;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return stats;
|
|
61
|
+
}
|
|
62
|
+
async query(question, k = 5, useGraph = true) {
|
|
63
|
+
// Vector Search
|
|
64
|
+
const results = await this.vectorStore.search(question, k);
|
|
65
|
+
const contextParts = [];
|
|
66
|
+
const sources = [];
|
|
67
|
+
results.forEach((r, i) => {
|
|
68
|
+
const chunk = r.content || `[Content from ${r.hash.substring(0, 8)}]`;
|
|
69
|
+
contextParts.push(`[${i + 1}] ${chunk}`);
|
|
70
|
+
sources.push(r.hash);
|
|
71
|
+
});
|
|
72
|
+
const vectorContext = contextParts.join('\n\n');
|
|
73
|
+
// Graph Search
|
|
74
|
+
let entities = [];
|
|
75
|
+
let relationships = [];
|
|
76
|
+
let graphContext = "";
|
|
77
|
+
if (useGraph) {
|
|
78
|
+
const graphData = await this._getGraphContext(question, sources);
|
|
79
|
+
entities = graphData.entities;
|
|
80
|
+
relationships = graphData.relationships;
|
|
81
|
+
if (entities.length > 0) {
|
|
82
|
+
const entStr = entities.slice(0, 10).map(e => `${e.name} (${e.type})`).join(', ');
|
|
83
|
+
const relStr = relationships.slice(0, 15).map(r => `${r.source} --${r.relationship}-> ${r.target}`).join('\n');
|
|
84
|
+
graphContext = `Entities: ${entStr}\nRelationships:\n${relStr}`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// LLM Generation
|
|
88
|
+
let answer = "";
|
|
89
|
+
if (!vectorContext && entities.length === 0) {
|
|
90
|
+
answer = "I couldn't find relevant information.";
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const entStr = entities.length ? entities.map(e => `${e.name} (${e.type})`).join(', ') : "None found";
|
|
94
|
+
const relStr = relationships.length ? relationships.map(r => ` - ${r.source} --${r.relationship}-> ${r.target}`).join('\n') : "None found";
|
|
95
|
+
const prompt = GRAPH_QUERY_PROMPT
|
|
96
|
+
.replace('{question}', question)
|
|
97
|
+
.replace('{vector_context}', vectorContext || "No document context available.")
|
|
98
|
+
.replace('{entities}', entStr)
|
|
99
|
+
.replace('{relationships}', relStr);
|
|
100
|
+
const monad = chatMonad(null, // messages null
|
|
101
|
+
prompt, GRAPHRAG_SYSTEM_PROMPT, { model: this.llmModel, temperature: 0.3 });
|
|
102
|
+
const result = await monad.run();
|
|
103
|
+
if (result.isRight) {
|
|
104
|
+
const val = result.right;
|
|
105
|
+
answer = typeof val === 'object' ? val.content : val;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
answer = `Error: ${result.left}`;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
answer,
|
|
113
|
+
sources,
|
|
114
|
+
entities,
|
|
115
|
+
relationships,
|
|
116
|
+
graphContext,
|
|
117
|
+
vectorContext,
|
|
118
|
+
confidence: 0.8 // placeholder
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
async _getGraphContext(query, sourceHashes) {
|
|
122
|
+
const entities = [];
|
|
123
|
+
const seenIds = new Set();
|
|
124
|
+
// Word search
|
|
125
|
+
const words = query.split(/\s+/).filter(w => w.length > 3);
|
|
126
|
+
const uniqueWords = [...new Set(words)]; // dedupe words
|
|
127
|
+
for (const word of uniqueWords) {
|
|
128
|
+
// Check if searchEntities exists on GraphStore
|
|
129
|
+
const found = await this.graphStore.searchEntities(word, undefined, 5);
|
|
130
|
+
for (const ent of found) {
|
|
131
|
+
if (!seenIds.has(ent.id)) {
|
|
132
|
+
seenIds.add(ent.id);
|
|
133
|
+
entities.push(ent);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Source search
|
|
138
|
+
const uniquesources = [...new Set(sourceHashes)].slice(0, 3);
|
|
139
|
+
for (const hash of uniquesources) {
|
|
140
|
+
const found = await this.graphStore.getEntitiesBySource(hash);
|
|
141
|
+
for (const ent of found) {
|
|
142
|
+
if (!seenIds.has(ent.id)) {
|
|
143
|
+
seenIds.add(ent.id);
|
|
144
|
+
entities.push(ent);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Get Relationships
|
|
149
|
+
const relationships = [];
|
|
150
|
+
for (const ent of entities) {
|
|
151
|
+
const outRels = await this.graphStore.getRelationshipsFrom(ent.id);
|
|
152
|
+
for (const r of outRels) {
|
|
153
|
+
relationships.push({
|
|
154
|
+
source: ent.name,
|
|
155
|
+
relationship: r.relationship,
|
|
156
|
+
target: r.targetName
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
// Limit per entity to avoid explosion
|
|
160
|
+
if (relationships.length > 50)
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
return { entities, relationships };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=GraphRAGEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphRAGEngine.js","sourceRoot":"","sources":["../../src/rag/GraphRAGEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handle-Aware Vector Store for Semantic Versioning
|
|
3
|
+
*
|
|
4
|
+
* Extends VectorStore to enable semantic similarity detection
|
|
5
|
+
* across MCard versions linked to handles.
|
|
6
|
+
*
|
|
7
|
+
* Key Features:
|
|
8
|
+
* - Link MCards to handles during indexing
|
|
9
|
+
* - Compare versions within a handle by semantic similarity
|
|
10
|
+
* - Filter searches by handle
|
|
11
|
+
* - Sort version history by distance to current or query
|
|
12
|
+
* - Automatic upgrade type classification based on semantic delta
|
|
13
|
+
*
|
|
14
|
+
* @module mcard-js/rag/HandleVectorStore
|
|
15
|
+
*/
|
|
16
|
+
import { MCard } from '../model/MCard';
|
|
17
|
+
import { MCardVectorStore, VectorStoreConfig } from '../storage/VectorStore';
|
|
18
|
+
export { VectorStoreConfig } from '../storage/VectorStore';
|
|
19
|
+
/**
|
|
20
|
+
* A version in a handle's history with embedding info.
|
|
21
|
+
*/
|
|
22
|
+
export interface HandleVersion {
|
|
23
|
+
hash: string;
|
|
24
|
+
versionOrder: number;
|
|
25
|
+
isCurrent: boolean;
|
|
26
|
+
createdAt: string;
|
|
27
|
+
parentHash?: string;
|
|
28
|
+
embeddingId?: number;
|
|
29
|
+
semanticDelta?: number;
|
|
30
|
+
upgradeType?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Result from version similarity comparison.
|
|
34
|
+
*/
|
|
35
|
+
export interface VersionSimilarityResult {
|
|
36
|
+
hash: string;
|
|
37
|
+
versionOrder: number;
|
|
38
|
+
similarityToCurrent: number;
|
|
39
|
+
distanceToCurrent: number;
|
|
40
|
+
similarityToQuery?: number;
|
|
41
|
+
parentHash?: string;
|
|
42
|
+
upgradeType?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Classify upgrade type based on semantic similarity to parent.
|
|
46
|
+
*
|
|
47
|
+
* Thresholds:
|
|
48
|
+
* - >= 0.95: trivial (formatting, typo fixes)
|
|
49
|
+
* - 0.85 - 0.94: minor (small edits, clarifications)
|
|
50
|
+
* - 0.70 - 0.84: major (significant content changes)
|
|
51
|
+
* - < 0.70: breaking (major semantic drift)
|
|
52
|
+
*
|
|
53
|
+
* @param semanticDelta Cosine similarity to parent version
|
|
54
|
+
* @returns Upgrade type string
|
|
55
|
+
*/
|
|
56
|
+
export declare function classifyUpgradeType(semanticDelta: number): string;
|
|
57
|
+
/**
|
|
58
|
+
* Calculate Euclidean distance between two vectors.
|
|
59
|
+
*/
|
|
60
|
+
export declare function euclideanDistance(a: number[], b: number[]): number;
|
|
61
|
+
/**
|
|
62
|
+
* Extended vector store with handle-aware version similarity.
|
|
63
|
+
*
|
|
64
|
+
* This class implements the Handle-Hash Duality pattern with semantic
|
|
65
|
+
* awareness, enabling:
|
|
66
|
+
*
|
|
67
|
+
* - Version tracking via handles
|
|
68
|
+
* - Semantic similarity detection across versions
|
|
69
|
+
* - Intelligent upgrade classification
|
|
70
|
+
* - Cross-version semantic search
|
|
71
|
+
*
|
|
72
|
+
* Architecture:
|
|
73
|
+
* - Handles remain stable identifiers (Proxy Pattern)
|
|
74
|
+
* - Hashes reference immutable content (Content-Addressing)
|
|
75
|
+
* - Embeddings enable semantic understanding (Vector Search)
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const store = new HandleVectorStore(':memory:');
|
|
80
|
+
*
|
|
81
|
+
* // Index with handle association
|
|
82
|
+
* await store.indexWithHandle(mcard, 'my_document');
|
|
83
|
+
*
|
|
84
|
+
* // Get versions sorted by similarity to current
|
|
85
|
+
* const versions = await store.getVersionsBySimilarity('my_document');
|
|
86
|
+
*
|
|
87
|
+
* // Find versions similar to a query
|
|
88
|
+
* const results = await store.searchHandleVersions('my_document', 'machine learning');
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export declare class HandleVectorStore extends MCardVectorStore {
|
|
92
|
+
constructor(dbPath?: string, config?: Partial<VectorStoreConfig>);
|
|
93
|
+
/**
|
|
94
|
+
* Create handle-vector bridge tables for semantic versioning.
|
|
95
|
+
*/
|
|
96
|
+
private initHandleTables;
|
|
97
|
+
/**
|
|
98
|
+
* Index an MCard and associate it with a handle.
|
|
99
|
+
*
|
|
100
|
+
* This method:
|
|
101
|
+
* 1. Indexes the MCard content with embeddings (via base class)
|
|
102
|
+
* 2. Links the MCard hash to the handle with version tracking
|
|
103
|
+
* 3. Computes semantic delta from parent version (if exists)
|
|
104
|
+
* 4. Classifies the upgrade type based on similarity
|
|
105
|
+
*
|
|
106
|
+
* @param mcard MCard to index
|
|
107
|
+
* @param handle Handle name to associate with
|
|
108
|
+
* @param isCurrent Whether this is the current version
|
|
109
|
+
* @param chunk Whether to chunk long content
|
|
110
|
+
* @returns Number of vectors indexed (0 if content couldn't be indexed)
|
|
111
|
+
*/
|
|
112
|
+
indexWithHandle(mcard: MCard, handle: string, isCurrent?: boolean, chunk?: boolean): Promise<number>;
|
|
113
|
+
/**
|
|
114
|
+
* Get all versions for a handle.
|
|
115
|
+
*
|
|
116
|
+
* @param handle Handle name to query
|
|
117
|
+
* @returns List of HandleVersion objects, ordered by version_order (0 = current)
|
|
118
|
+
*/
|
|
119
|
+
getHandleVersions(handle: string): HandleVersion[];
|
|
120
|
+
/**
|
|
121
|
+
* Get all version hashes for a handle.
|
|
122
|
+
*
|
|
123
|
+
* @param handle Handle name to query
|
|
124
|
+
* @returns List of hashes, ordered by version_order
|
|
125
|
+
*/
|
|
126
|
+
getHandleVersionHashes(handle: string): string[];
|
|
127
|
+
/**
|
|
128
|
+
* Get the current version for a handle.
|
|
129
|
+
*
|
|
130
|
+
* @param handle Handle name to query
|
|
131
|
+
* @returns HandleVersion for current version, or undefined if handle not found
|
|
132
|
+
*/
|
|
133
|
+
getCurrentVersion(handle: string): HandleVersion | undefined;
|
|
134
|
+
/**
|
|
135
|
+
* Get versions for a handle, sorted by similarity to a reference.
|
|
136
|
+
*
|
|
137
|
+
* @param handle Handle name
|
|
138
|
+
* @param referenceHash Hash to compare against (default: current version)
|
|
139
|
+
* @param metric 'cosine' (higher = more similar) or 'euclidean' (lower = more similar)
|
|
140
|
+
* @returns List of VersionSimilarityResult, sorted by similarity
|
|
141
|
+
*/
|
|
142
|
+
getVersionsBySimilarity(handle: string, referenceHash?: string, metric?: 'cosine' | 'euclidean'): VersionSimilarityResult[];
|
|
143
|
+
/**
|
|
144
|
+
* Search within a handle's versions by semantic query.
|
|
145
|
+
*
|
|
146
|
+
* Useful for finding which version of a document best matches
|
|
147
|
+
* a specific concept or topic.
|
|
148
|
+
*
|
|
149
|
+
* @param handle Handle name to filter by
|
|
150
|
+
* @param query Search query text
|
|
151
|
+
* @param k Number of results
|
|
152
|
+
* @returns List of VersionSimilarityResult with query similarity scores
|
|
153
|
+
*/
|
|
154
|
+
searchHandleVersions(handle: string, query: string, k?: number): Promise<VersionSimilarityResult[]>;
|
|
155
|
+
/**
|
|
156
|
+
* Compute pairwise cosine similarities between all versions of a handle.
|
|
157
|
+
*
|
|
158
|
+
* Optionally caches results in the version_similarity_cache table.
|
|
159
|
+
*
|
|
160
|
+
* @param handle Handle name
|
|
161
|
+
* @param cache Whether to cache computed similarities
|
|
162
|
+
* @returns Map of (hash_a, hash_b) string key to cosine similarity
|
|
163
|
+
*/
|
|
164
|
+
computeVersionDistances(handle: string, cache?: boolean): Map<string, number>;
|
|
165
|
+
/**
|
|
166
|
+
* Get embedding vector for a hash.
|
|
167
|
+
*
|
|
168
|
+
* @param hash MCard hash
|
|
169
|
+
* @param chunkIndex Chunk index (default 0 for first/whole chunk)
|
|
170
|
+
* @returns Embedding vector as array of floats, or undefined if not found
|
|
171
|
+
*/
|
|
172
|
+
private getEmbedding;
|
|
173
|
+
/**
|
|
174
|
+
* List all handles with indexed versions.
|
|
175
|
+
*
|
|
176
|
+
* @returns List of unique handle names
|
|
177
|
+
*/
|
|
178
|
+
listHandles(): string[];
|
|
179
|
+
/**
|
|
180
|
+
* Count versions for a handle.
|
|
181
|
+
*
|
|
182
|
+
* @param handle Handle name
|
|
183
|
+
* @returns Number of versions
|
|
184
|
+
*/
|
|
185
|
+
countVersions(handle: string): number;
|
|
186
|
+
/**
|
|
187
|
+
* Delete all version records for a handle.
|
|
188
|
+
*
|
|
189
|
+
* Note: This only removes the handle-version associations,
|
|
190
|
+
* not the underlying MCard embeddings.
|
|
191
|
+
*
|
|
192
|
+
* @param handle Handle name
|
|
193
|
+
* @returns Number of version records deleted
|
|
194
|
+
*/
|
|
195
|
+
deleteHandle(handle: string): number;
|
|
196
|
+
/**
|
|
197
|
+
* Get extended vector store information including handle stats.
|
|
198
|
+
*/
|
|
199
|
+
getInfo(): Record<string, unknown>;
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=HandleVectorStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HandleVectorStore.d.ts","sourceRoot":"","sources":["../../src/rag/HandleVectorStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAmG,MAAM,wBAAwB,CAAC;AAI9K,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAM3D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAUjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAUlE;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;gBAEvC,MAAM,GAAE,MAAmB,EAAE,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAKhF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;;;;;;;;;;;;;OAcG;IACG,eAAe,CACjB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,OAAc,EACzB,KAAK,GAAE,OAAc,GACtB,OAAO,CAAC,MAAM,CAAC;IAgHlB;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE;IA8BlD;;;;;OAKG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAKhD;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAsC5D;;;;;;;OAOG;IACH,uBAAuB,CACnB,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,GAAE,QAAQ,GAAG,WAAsB,GAC1C,uBAAuB,EAAE;IA6D5B;;;;;;;;;;OAUG;IACG,oBAAoB,CACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,CAAC,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,uBAAuB,EAAE,CAAC;IA2CrC;;;;;;;;OAQG;IACH,uBAAuB,CACnB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,OAAc,GACtB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAsDtB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IA4BpB;;;;OAIG;IACH,WAAW,IAAI,MAAM,EAAE;IAOvB;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOrC;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAepC;;OAEG;IACM,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAqB9C"}
|