@rbalchii/anchor-engine 4.7.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.
- package/LICENSE +609 -0
- package/README.md +317 -0
- package/anchor.bat +5 -0
- package/docs/API.md +314 -0
- package/docs/DEPLOYMENT.md +448 -0
- package/docs/INDEX.md +226 -0
- package/docs/STAR_Whitepaper_Executive.md +216 -0
- package/docs/TROUBLESHOOTING.md +535 -0
- package/docs/archive/GIT_BACKUP_VERIFICATION.md +297 -0
- package/docs/archive/adoption-guide.md +264 -0
- package/docs/archive/adoption-preparation.md +179 -0
- package/docs/archive/agent-harness-integration.md +227 -0
- package/docs/archive/api-reference.md +106 -0
- package/docs/archive/api_flows_diagram.md +118 -0
- package/docs/archive/architecture.md +410 -0
- package/docs/archive/architecture_diagram.md +174 -0
- package/docs/archive/broader-adoption-preparation.md +175 -0
- package/docs/archive/browser-paradigm-architecture.md +163 -0
- package/docs/archive/chat-integration.md +124 -0
- package/docs/archive/community-adoption-materials.md +103 -0
- package/docs/archive/community-adoption.md +147 -0
- package/docs/archive/comparison-with-siloed-solutions.md +192 -0
- package/docs/archive/comprehensive-docs.md +156 -0
- package/docs/archive/data_flow_diagram.md +251 -0
- package/docs/archive/enhancement-implementation-summary.md +146 -0
- package/docs/archive/evolution-summary.md +141 -0
- package/docs/archive/ingestion_pipeline_diagram.md +198 -0
- package/docs/archive/native-module-profiling-results.md +135 -0
- package/docs/archive/positioning-document.md +158 -0
- package/docs/archive/positioning.md +175 -0
- package/docs/archive/query-builder-documentation.md +218 -0
- package/docs/archive/quick-reference.md +40 -0
- package/docs/archive/quickstart.md +63 -0
- package/docs/archive/relationship-narrative-discovery.md +141 -0
- package/docs/archive/search-logic-improvement-plan.md +336 -0
- package/docs/archive/search_architecture_diagram.md +212 -0
- package/docs/archive/semantic-architecture-guide.md +97 -0
- package/docs/archive/sequence-diagrams.md +128 -0
- package/docs/archive/system_components_diagram.md +296 -0
- package/docs/archive/test-framework-integration.md +109 -0
- package/docs/archive/testing-framework-documentation.md +397 -0
- package/docs/archive/testing-framework-summary.md +121 -0
- package/docs/archive/testing-framework.md +377 -0
- package/docs/archive/ui-architecture.md +75 -0
- package/docs/arxiv/BIBLIOGRAPHY.bib +145 -0
- package/docs/arxiv/RELATED_WORK.tex +39 -0
- package/docs/arxiv/compile.bat +48 -0
- package/docs/arxiv/joss_response.md +33 -0
- package/docs/arxiv/prepare-submission.bat +46 -0
- package/docs/arxiv/review.md +128 -0
- package/docs/arxiv/star-whitepaper.tex +657 -0
- package/docs/code-patterns.md +289 -0
- package/docs/whitepaper.md +445 -0
- package/engine/dist/agent/runtime.d.ts +41 -0
- package/engine/dist/agent/runtime.d.ts.map +1 -0
- package/engine/dist/agent/runtime.js +73 -0
- package/engine/dist/agent/runtime.js.map +1 -0
- package/engine/dist/commands/audit-tags.d.ts +14 -0
- package/engine/dist/commands/audit-tags.d.ts.map +1 -0
- package/engine/dist/commands/audit-tags.js +180 -0
- package/engine/dist/commands/audit-tags.js.map +1 -0
- package/engine/dist/commands/distill.d.ts +19 -0
- package/engine/dist/commands/distill.d.ts.map +1 -0
- package/engine/dist/commands/distill.js +114 -0
- package/engine/dist/commands/distill.js.map +1 -0
- package/engine/dist/commands/generate-synonyms.d.ts +14 -0
- package/engine/dist/commands/generate-synonyms.d.ts.map +1 -0
- package/engine/dist/commands/generate-synonyms.js +91 -0
- package/engine/dist/commands/generate-synonyms.js.map +1 -0
- package/engine/dist/config/index.d.ts +115 -0
- package/engine/dist/config/index.d.ts.map +1 -0
- package/engine/dist/config/index.js +326 -0
- package/engine/dist/config/index.js.map +1 -0
- package/engine/dist/config/max-recall-config.d.ts +102 -0
- package/engine/dist/config/max-recall-config.d.ts.map +1 -0
- package/engine/dist/config/max-recall-config.js +102 -0
- package/engine/dist/config/max-recall-config.js.map +1 -0
- package/engine/dist/config/paths.d.ts +40 -0
- package/engine/dist/config/paths.d.ts.map +1 -0
- package/engine/dist/config/paths.js +49 -0
- package/engine/dist/config/paths.js.map +1 -0
- package/engine/dist/core/batch.d.ts +19 -0
- package/engine/dist/core/batch.d.ts.map +1 -0
- package/engine/dist/core/batch.js +37 -0
- package/engine/dist/core/batch.js.map +1 -0
- package/engine/dist/core/db.d.ts +58 -0
- package/engine/dist/core/db.d.ts.map +1 -0
- package/engine/dist/core/db.js +563 -0
- package/engine/dist/core/db.js.map +1 -0
- package/engine/dist/core/inference/ChatWorker.d.ts +2 -0
- package/engine/dist/core/inference/ChatWorker.d.ts.map +1 -0
- package/engine/dist/core/inference/ChatWorker.js +28 -0
- package/engine/dist/core/inference/ChatWorker.js.map +1 -0
- package/engine/dist/core/inference/context_manager.d.ts +49 -0
- package/engine/dist/core/inference/context_manager.d.ts.map +1 -0
- package/engine/dist/core/inference/context_manager.js +199 -0
- package/engine/dist/core/inference/context_manager.js.map +1 -0
- package/engine/dist/core/inference/llamaLoaderWorker.d.ts +2 -0
- package/engine/dist/core/inference/llamaLoaderWorker.d.ts.map +1 -0
- package/engine/dist/core/inference/llamaLoaderWorker.js +23 -0
- package/engine/dist/core/inference/llamaLoaderWorker.js.map +1 -0
- package/engine/dist/core/vector.d.ts +40 -0
- package/engine/dist/core/vector.d.ts.map +1 -0
- package/engine/dist/core/vector.js +167 -0
- package/engine/dist/core/vector.js.map +1 -0
- package/engine/dist/index.d.ts +4 -0
- package/engine/dist/index.d.ts.map +1 -0
- package/engine/dist/index.js +400 -0
- package/engine/dist/index.js.map +1 -0
- package/engine/dist/middleware/auth.d.ts +14 -0
- package/engine/dist/middleware/auth.d.ts.map +1 -0
- package/engine/dist/middleware/auth.js +44 -0
- package/engine/dist/middleware/auth.js.map +1 -0
- package/engine/dist/middleware/request-tracing.d.ts +29 -0
- package/engine/dist/middleware/request-tracing.d.ts.map +1 -0
- package/engine/dist/middleware/request-tracing.js +115 -0
- package/engine/dist/middleware/request-tracing.js.map +1 -0
- package/engine/dist/middleware/validate.d.ts +30 -0
- package/engine/dist/middleware/validate.d.ts.map +1 -0
- package/engine/dist/middleware/validate.js +117 -0
- package/engine/dist/middleware/validate.js.map +1 -0
- package/engine/dist/native/index.d.ts +106 -0
- package/engine/dist/native/index.d.ts.map +1 -0
- package/engine/dist/native/index.js +230 -0
- package/engine/dist/native/index.js.map +1 -0
- package/engine/dist/native/types.d.ts +45 -0
- package/engine/dist/native/types.d.ts.map +1 -0
- package/engine/dist/native/types.js +6 -0
- package/engine/dist/native/types.js.map +1 -0
- package/engine/dist/profiling/atomization-profiling.d.ts +8 -0
- package/engine/dist/profiling/atomization-profiling.d.ts.map +1 -0
- package/engine/dist/profiling/atomization-profiling.js +108 -0
- package/engine/dist/profiling/atomization-profiling.js.map +1 -0
- package/engine/dist/profiling/bottleneck-identification.d.ts +8 -0
- package/engine/dist/profiling/bottleneck-identification.d.ts.map +1 -0
- package/engine/dist/profiling/bottleneck-identification.js +249 -0
- package/engine/dist/profiling/bottleneck-identification.js.map +1 -0
- package/engine/dist/profiling/content-sanitization-profiling.d.ts +12 -0
- package/engine/dist/profiling/content-sanitization-profiling.d.ts.map +1 -0
- package/engine/dist/profiling/content-sanitization-profiling.js +266 -0
- package/engine/dist/profiling/content-sanitization-profiling.js.map +1 -0
- package/engine/dist/profiling/simhash-profiling.d.ts +11 -0
- package/engine/dist/profiling/simhash-profiling.d.ts.map +1 -0
- package/engine/dist/profiling/simhash-profiling.js +168 -0
- package/engine/dist/profiling/simhash-profiling.js.map +1 -0
- package/engine/dist/routes/api.d.ts +9 -0
- package/engine/dist/routes/api.d.ts.map +1 -0
- package/engine/dist/routes/api.js +37 -0
- package/engine/dist/routes/api.js.map +1 -0
- package/engine/dist/routes/enhanced-api.d.ts +9 -0
- package/engine/dist/routes/enhanced-api.d.ts.map +1 -0
- package/engine/dist/routes/enhanced-api.js +139 -0
- package/engine/dist/routes/enhanced-api.js.map +1 -0
- package/engine/dist/routes/health.d.ts +8 -0
- package/engine/dist/routes/health.d.ts.map +1 -0
- package/engine/dist/routes/health.js +89 -0
- package/engine/dist/routes/health.js.map +1 -0
- package/engine/dist/routes/monitoring.d.ts +8 -0
- package/engine/dist/routes/monitoring.d.ts.map +1 -0
- package/engine/dist/routes/monitoring.js +509 -0
- package/engine/dist/routes/monitoring.js.map +1 -0
- package/engine/dist/routes/v1/admin.d.ts +3 -0
- package/engine/dist/routes/v1/admin.d.ts.map +1 -0
- package/engine/dist/routes/v1/admin.js +261 -0
- package/engine/dist/routes/v1/admin.js.map +1 -0
- package/engine/dist/routes/v1/atoms.d.ts +3 -0
- package/engine/dist/routes/v1/atoms.d.ts.map +1 -0
- package/engine/dist/routes/v1/atoms.js +172 -0
- package/engine/dist/routes/v1/atoms.js.map +1 -0
- package/engine/dist/routes/v1/backup.d.ts +3 -0
- package/engine/dist/routes/v1/backup.d.ts.map +1 -0
- package/engine/dist/routes/v1/backup.js +100 -0
- package/engine/dist/routes/v1/backup.js.map +1 -0
- package/engine/dist/routes/v1/git.d.ts +3 -0
- package/engine/dist/routes/v1/git.d.ts.map +1 -0
- package/engine/dist/routes/v1/git.js +316 -0
- package/engine/dist/routes/v1/git.js.map +1 -0
- package/engine/dist/routes/v1/ingest.d.ts +3 -0
- package/engine/dist/routes/v1/ingest.d.ts.map +1 -0
- package/engine/dist/routes/v1/ingest.js +66 -0
- package/engine/dist/routes/v1/ingest.js.map +1 -0
- package/engine/dist/routes/v1/memory.d.ts +14 -0
- package/engine/dist/routes/v1/memory.d.ts.map +1 -0
- package/engine/dist/routes/v1/memory.js +87 -0
- package/engine/dist/routes/v1/memory.js.map +1 -0
- package/engine/dist/routes/v1/research.d.ts +3 -0
- package/engine/dist/routes/v1/research.d.ts.map +1 -0
- package/engine/dist/routes/v1/research.js +109 -0
- package/engine/dist/routes/v1/research.js.map +1 -0
- package/engine/dist/routes/v1/search.d.ts +3 -0
- package/engine/dist/routes/v1/search.d.ts.map +1 -0
- package/engine/dist/routes/v1/search.js +180 -0
- package/engine/dist/routes/v1/search.js.map +1 -0
- package/engine/dist/routes/v1/settings.d.ts +8 -0
- package/engine/dist/routes/v1/settings.d.ts.map +1 -0
- package/engine/dist/routes/v1/settings.js +211 -0
- package/engine/dist/routes/v1/settings.js.map +1 -0
- package/engine/dist/routes/v1/system.d.ts +3 -0
- package/engine/dist/routes/v1/system.d.ts.map +1 -0
- package/engine/dist/routes/v1/system.js +326 -0
- package/engine/dist/routes/v1/system.js.map +1 -0
- package/engine/dist/routes/v1/tags.d.ts +3 -0
- package/engine/dist/routes/v1/tags.d.ts.map +1 -0
- package/engine/dist/routes/v1/tags.js +102 -0
- package/engine/dist/routes/v1/tags.js.map +1 -0
- package/engine/dist/server-8080.d.ts +2 -0
- package/engine/dist/server-8080.d.ts.map +1 -0
- package/engine/dist/server-8080.js +74 -0
- package/engine/dist/server-8080.js.map +1 -0
- package/engine/dist/services/backup/backup-restore.d.ts +37 -0
- package/engine/dist/services/backup/backup-restore.d.ts.map +1 -0
- package/engine/dist/services/backup/backup-restore.js +385 -0
- package/engine/dist/services/backup/backup-restore.js.map +1 -0
- package/engine/dist/services/backup/backup.d.ts +14 -0
- package/engine/dist/services/backup/backup.d.ts.map +1 -0
- package/engine/dist/services/backup/backup.js +442 -0
- package/engine/dist/services/backup/backup.js.map +1 -0
- package/engine/dist/services/distillation/radial-distiller-v2.d.ts +127 -0
- package/engine/dist/services/distillation/radial-distiller-v2.d.ts.map +1 -0
- package/engine/dist/services/distillation/radial-distiller-v2.js +503 -0
- package/engine/dist/services/distillation/radial-distiller-v2.js.map +1 -0
- package/engine/dist/services/distillation/radial-distiller.d.ts +63 -0
- package/engine/dist/services/distillation/radial-distiller.d.ts.map +1 -0
- package/engine/dist/services/distillation/radial-distiller.js +394 -0
- package/engine/dist/services/distillation/radial-distiller.js.map +1 -0
- package/engine/dist/services/health-check-enhanced.d.ts +89 -0
- package/engine/dist/services/health-check-enhanced.d.ts.map +1 -0
- package/engine/dist/services/health-check-enhanced.js +417 -0
- package/engine/dist/services/health-check-enhanced.js.map +1 -0
- package/engine/dist/services/idle-manager.d.ts +56 -0
- package/engine/dist/services/idle-manager.d.ts.map +1 -0
- package/engine/dist/services/idle-manager.js +210 -0
- package/engine/dist/services/idle-manager.js.map +1 -0
- package/engine/dist/services/inference/inference-service.d.ts +27 -0
- package/engine/dist/services/inference/inference-service.d.ts.map +1 -0
- package/engine/dist/services/inference/inference-service.js +89 -0
- package/engine/dist/services/inference/inference-service.js.map +1 -0
- package/engine/dist/services/inference/inference.d.ts +59 -0
- package/engine/dist/services/inference/inference.d.ts.map +1 -0
- package/engine/dist/services/inference/inference.js +131 -0
- package/engine/dist/services/inference/inference.js.map +1 -0
- package/engine/dist/services/ingest/atomizer-service.d.ts +74 -0
- package/engine/dist/services/ingest/atomizer-service.d.ts.map +1 -0
- package/engine/dist/services/ingest/atomizer-service.js +982 -0
- package/engine/dist/services/ingest/atomizer-service.js.map +1 -0
- package/engine/dist/services/ingest/content-cleaner.d.ts +43 -0
- package/engine/dist/services/ingest/content-cleaner.d.ts.map +1 -0
- package/engine/dist/services/ingest/content-cleaner.js +166 -0
- package/engine/dist/services/ingest/content-cleaner.js.map +1 -0
- package/engine/dist/services/ingest/github-ingest-service.d.ts +103 -0
- package/engine/dist/services/ingest/github-ingest-service.d.ts.map +1 -0
- package/engine/dist/services/ingest/github-ingest-service.js +537 -0
- package/engine/dist/services/ingest/github-ingest-service.js.map +1 -0
- package/engine/dist/services/ingest/ingest-atomic.d.ts +16 -0
- package/engine/dist/services/ingest/ingest-atomic.d.ts.map +1 -0
- package/engine/dist/services/ingest/ingest-atomic.js +437 -0
- package/engine/dist/services/ingest/ingest-atomic.js.map +1 -0
- package/engine/dist/services/ingest/ingest.d.ts +50 -0
- package/engine/dist/services/ingest/ingest.d.ts.map +1 -0
- package/engine/dist/services/ingest/ingest.js +230 -0
- package/engine/dist/services/ingest/ingest.js.map +1 -0
- package/engine/dist/services/ingest/watchdog.d.ts +31 -0
- package/engine/dist/services/ingest/watchdog.d.ts.map +1 -0
- package/engine/dist/services/ingest/watchdog.js +400 -0
- package/engine/dist/services/ingest/watchdog.js.map +1 -0
- package/engine/dist/services/llm/context.d.ts +6 -0
- package/engine/dist/services/llm/context.d.ts.map +1 -0
- package/engine/dist/services/llm/context.js +80 -0
- package/engine/dist/services/llm/context.js.map +1 -0
- package/engine/dist/services/llm/provider.d.ts +23 -0
- package/engine/dist/services/llm/provider.d.ts.map +1 -0
- package/engine/dist/services/llm/provider.js +338 -0
- package/engine/dist/services/llm/provider.js.map +1 -0
- package/engine/dist/services/llm/reader.d.ts +12 -0
- package/engine/dist/services/llm/reader.d.ts.map +1 -0
- package/engine/dist/services/llm/reader.js +40 -0
- package/engine/dist/services/llm/reader.js.map +1 -0
- package/engine/dist/services/mirror/mirror.d.ts +28 -0
- package/engine/dist/services/mirror/mirror.d.ts.map +1 -0
- package/engine/dist/services/mirror/mirror.js +208 -0
- package/engine/dist/services/mirror/mirror.js.map +1 -0
- package/engine/dist/services/nlp/nlp-service.d.ts +70 -0
- package/engine/dist/services/nlp/nlp-service.d.ts.map +1 -0
- package/engine/dist/services/nlp/nlp-service.js +151 -0
- package/engine/dist/services/nlp/nlp-service.js.map +1 -0
- package/engine/dist/services/nlp/query-parser.d.ts +9 -0
- package/engine/dist/services/nlp/query-parser.d.ts.map +1 -0
- package/engine/dist/services/nlp/query-parser.js +29 -0
- package/engine/dist/services/nlp/query-parser.js.map +1 -0
- package/engine/dist/services/query-builder/DataFrame.d.ts +95 -0
- package/engine/dist/services/query-builder/DataFrame.d.ts.map +1 -0
- package/engine/dist/services/query-builder/DataFrame.js +263 -0
- package/engine/dist/services/query-builder/DataFrame.js.map +1 -0
- package/engine/dist/services/query-builder/QueryBuilder.d.ts +106 -0
- package/engine/dist/services/query-builder/QueryBuilder.d.ts.map +1 -0
- package/engine/dist/services/query-builder/QueryBuilder.js +235 -0
- package/engine/dist/services/query-builder/QueryBuilder.js.map +1 -0
- package/engine/dist/services/query-builder/utils/export.d.ts +11 -0
- package/engine/dist/services/query-builder/utils/export.d.ts.map +1 -0
- package/engine/dist/services/query-builder/utils/export.js +130 -0
- package/engine/dist/services/query-builder/utils/export.js.map +1 -0
- package/engine/dist/services/research/researcher.d.ts +15 -0
- package/engine/dist/services/research/researcher.d.ts.map +1 -0
- package/engine/dist/services/research/researcher.js +123 -0
- package/engine/dist/services/research/researcher.js.map +1 -0
- package/engine/dist/services/scribe/scribe.d.ts +43 -0
- package/engine/dist/services/scribe/scribe.d.ts.map +1 -0
- package/engine/dist/services/scribe/scribe.js +135 -0
- package/engine/dist/services/scribe/scribe.js.map +1 -0
- package/engine/dist/services/search/bright-nodes.d.ts +41 -0
- package/engine/dist/services/search/bright-nodes.d.ts.map +1 -0
- package/engine/dist/services/search/bright-nodes.js +117 -0
- package/engine/dist/services/search/bright-nodes.js.map +1 -0
- package/engine/dist/services/search/context-inflator.d.ts +63 -0
- package/engine/dist/services/search/context-inflator.d.ts.map +1 -0
- package/engine/dist/services/search/context-inflator.js +649 -0
- package/engine/dist/services/search/context-inflator.js.map +1 -0
- package/engine/dist/services/search/context-manager.d.ts +34 -0
- package/engine/dist/services/search/context-manager.d.ts.map +1 -0
- package/engine/dist/services/search/context-manager.js +124 -0
- package/engine/dist/services/search/context-manager.js.map +1 -0
- package/engine/dist/services/search/distributed-query.d.ts +38 -0
- package/engine/dist/services/search/distributed-query.d.ts.map +1 -0
- package/engine/dist/services/search/distributed-query.js +105 -0
- package/engine/dist/services/search/distributed-query.js.map +1 -0
- package/engine/dist/services/search/explore.d.ts +73 -0
- package/engine/dist/services/search/explore.d.ts.map +1 -0
- package/engine/dist/services/search/explore.js +388 -0
- package/engine/dist/services/search/explore.js.map +1 -0
- package/engine/dist/services/search/graph-context-serializer.d.ts +76 -0
- package/engine/dist/services/search/graph-context-serializer.d.ts.map +1 -0
- package/engine/dist/services/search/graph-context-serializer.js +435 -0
- package/engine/dist/services/search/graph-context-serializer.js.map +1 -0
- package/engine/dist/services/search/llm-context-formatter.d.ts +122 -0
- package/engine/dist/services/search/llm-context-formatter.d.ts.map +1 -0
- package/engine/dist/services/search/llm-context-formatter.js +394 -0
- package/engine/dist/services/search/llm-context-formatter.js.map +1 -0
- package/engine/dist/services/search/physics-tag-walker.d.ts +115 -0
- package/engine/dist/services/search/physics-tag-walker.d.ts.map +1 -0
- package/engine/dist/services/search/physics-tag-walker.js +611 -0
- package/engine/dist/services/search/physics-tag-walker.js.map +1 -0
- package/engine/dist/services/search/query-parser.d.ts +66 -0
- package/engine/dist/services/search/query-parser.d.ts.map +1 -0
- package/engine/dist/services/search/query-parser.js +346 -0
- package/engine/dist/services/search/query-parser.js.map +1 -0
- package/engine/dist/services/search/search-utils.d.ts +100 -0
- package/engine/dist/services/search/search-utils.d.ts.map +1 -0
- package/engine/dist/services/search/search-utils.js +473 -0
- package/engine/dist/services/search/search-utils.js.map +1 -0
- package/engine/dist/services/search/search.d.ts +116 -0
- package/engine/dist/services/search/search.d.ts.map +1 -0
- package/engine/dist/services/search/search.js +1286 -0
- package/engine/dist/services/search/search.js.map +1 -0
- package/engine/dist/services/search/sovereign-system-prompt.d.ts +48 -0
- package/engine/dist/services/search/sovereign-system-prompt.d.ts.map +1 -0
- package/engine/dist/services/search/sovereign-system-prompt.js +101 -0
- package/engine/dist/services/search/sovereign-system-prompt.js.map +1 -0
- package/engine/dist/services/search/streaming-search.d.ts +51 -0
- package/engine/dist/services/search/streaming-search.d.ts.map +1 -0
- package/engine/dist/services/search/streaming-search.js +94 -0
- package/engine/dist/services/search/streaming-search.js.map +1 -0
- package/engine/dist/services/semantic/semantic-ingestion-service.d.ts +53 -0
- package/engine/dist/services/semantic/semantic-ingestion-service.d.ts.map +1 -0
- package/engine/dist/services/semantic/semantic-ingestion-service.js +625 -0
- package/engine/dist/services/semantic/semantic-ingestion-service.js.map +1 -0
- package/engine/dist/services/semantic/semantic-molecule-processor.d.ts +68 -0
- package/engine/dist/services/semantic/semantic-molecule-processor.d.ts.map +1 -0
- package/engine/dist/services/semantic/semantic-molecule-processor.js +176 -0
- package/engine/dist/services/semantic/semantic-molecule-processor.js.map +1 -0
- package/engine/dist/services/semantic/semantic-search.d.ts +52 -0
- package/engine/dist/services/semantic/semantic-search.d.ts.map +1 -0
- package/engine/dist/services/semantic/semantic-search.js +649 -0
- package/engine/dist/services/semantic/semantic-search.js.map +1 -0
- package/engine/dist/services/semantic/semantic-tag-deriver.d.ts +64 -0
- package/engine/dist/services/semantic/semantic-tag-deriver.d.ts.map +1 -0
- package/engine/dist/services/semantic/semantic-tag-deriver.js +191 -0
- package/engine/dist/services/semantic/semantic-tag-deriver.js.map +1 -0
- package/engine/dist/services/semantic/types/semantic.d.ts +26 -0
- package/engine/dist/services/semantic/types/semantic.d.ts.map +1 -0
- package/engine/dist/services/semantic/types/semantic.js +7 -0
- package/engine/dist/services/semantic/types/semantic.js.map +1 -0
- package/engine/dist/services/synonyms/auto-synonym-generator.d.ts +79 -0
- package/engine/dist/services/synonyms/auto-synonym-generator.d.ts.map +1 -0
- package/engine/dist/services/synonyms/auto-synonym-generator.js +415 -0
- package/engine/dist/services/synonyms/auto-synonym-generator.js.map +1 -0
- package/engine/dist/services/system-status.d.ts +68 -0
- package/engine/dist/services/system-status.d.ts.map +1 -0
- package/engine/dist/services/system-status.js +107 -0
- package/engine/dist/services/system-status.js.map +1 -0
- package/engine/dist/services/tags/discovery.d.ts +16 -0
- package/engine/dist/services/tags/discovery.d.ts.map +1 -0
- package/engine/dist/services/tags/discovery.js +206 -0
- package/engine/dist/services/tags/discovery.js.map +1 -0
- package/engine/dist/services/tags/gliner.d.ts +18 -0
- package/engine/dist/services/tags/gliner.d.ts.map +1 -0
- package/engine/dist/services/tags/gliner.js +119 -0
- package/engine/dist/services/tags/gliner.js.map +1 -0
- package/engine/dist/services/tags/infector.d.ts +21 -0
- package/engine/dist/services/tags/infector.d.ts.map +1 -0
- package/engine/dist/services/tags/infector.js +168 -0
- package/engine/dist/services/tags/infector.js.map +1 -0
- package/engine/dist/services/tags/tag-auditor.d.ts +77 -0
- package/engine/dist/services/tags/tag-auditor.d.ts.map +1 -0
- package/engine/dist/services/tags/tag-auditor.js +283 -0
- package/engine/dist/services/tags/tag-auditor.js.map +1 -0
- package/engine/dist/services/taxonomy/taxonomy-manager.d.ts +50 -0
- package/engine/dist/services/taxonomy/taxonomy-manager.d.ts.map +1 -0
- package/engine/dist/services/taxonomy/taxonomy-manager.js +291 -0
- package/engine/dist/services/taxonomy/taxonomy-manager.js.map +1 -0
- package/engine/dist/services/vision/vision_service.d.ts +4 -0
- package/engine/dist/services/vision/vision_service.d.ts.map +1 -0
- package/engine/dist/services/vision/vision_service.js +197 -0
- package/engine/dist/services/vision/vision_service.js.map +1 -0
- package/engine/dist/test-framework/core.d.ts +133 -0
- package/engine/dist/test-framework/core.d.ts.map +1 -0
- package/engine/dist/test-framework/core.js +313 -0
- package/engine/dist/test-framework/core.js.map +1 -0
- package/engine/dist/test-framework/dataset-runner.d.ts +78 -0
- package/engine/dist/test-framework/dataset-runner.d.ts.map +1 -0
- package/engine/dist/test-framework/dataset-runner.js +223 -0
- package/engine/dist/test-framework/dataset-runner.js.map +1 -0
- package/engine/dist/test-framework/diagnostic-tests.d.ts +38 -0
- package/engine/dist/test-framework/diagnostic-tests.d.ts.map +1 -0
- package/engine/dist/test-framework/diagnostic-tests.js +283 -0
- package/engine/dist/test-framework/diagnostic-tests.js.map +1 -0
- package/engine/dist/test-framework/performance-regression-tests.d.ts +30 -0
- package/engine/dist/test-framework/performance-regression-tests.d.ts.map +1 -0
- package/engine/dist/test-framework/performance-regression-tests.js +331 -0
- package/engine/dist/test-framework/performance-regression-tests.js.map +1 -0
- package/engine/dist/types/api.d.ts +53 -0
- package/engine/dist/types/api.d.ts.map +1 -0
- package/engine/dist/types/api.js +2 -0
- package/engine/dist/types/api.js.map +1 -0
- package/engine/dist/types/atomic.d.ts +42 -0
- package/engine/dist/types/atomic.d.ts.map +1 -0
- package/engine/dist/types/atomic.js +10 -0
- package/engine/dist/types/atomic.js.map +1 -0
- package/engine/dist/types/context-protocol.d.ts +137 -0
- package/engine/dist/types/context-protocol.d.ts.map +1 -0
- package/engine/dist/types/context-protocol.js +28 -0
- package/engine/dist/types/context-protocol.js.map +1 -0
- package/engine/dist/types/context.d.ts +2 -0
- package/engine/dist/types/context.d.ts.map +1 -0
- package/engine/dist/types/context.js +2 -0
- package/engine/dist/types/context.js.map +1 -0
- package/engine/dist/types/index.d.ts +20 -0
- package/engine/dist/types/index.d.ts.map +1 -0
- package/engine/dist/types/index.js +18 -0
- package/engine/dist/types/index.js.map +1 -0
- package/engine/dist/types/search.d.ts +31 -0
- package/engine/dist/types/search.d.ts.map +1 -0
- package/engine/dist/types/search.js +2 -0
- package/engine/dist/types/search.js.map +1 -0
- package/engine/dist/types/taxonomy.d.ts +137 -0
- package/engine/dist/types/taxonomy.d.ts.map +1 -0
- package/engine/dist/types/taxonomy.js +138 -0
- package/engine/dist/types/taxonomy.js.map +1 -0
- package/engine/dist/types/taxonomy.simple.d.ts +131 -0
- package/engine/dist/types/taxonomy.simple.d.ts.map +1 -0
- package/engine/dist/types/taxonomy.simple.js +132 -0
- package/engine/dist/types/taxonomy.simple.js.map +1 -0
- package/engine/dist/types/tool-call.d.ts +16 -0
- package/engine/dist/types/tool-call.d.ts.map +1 -0
- package/engine/dist/types/tool-call.js +6 -0
- package/engine/dist/types/tool-call.js.map +1 -0
- package/engine/dist/types/trace.d.ts +25 -0
- package/engine/dist/types/trace.d.ts.map +1 -0
- package/engine/dist/types/trace.js +5 -0
- package/engine/dist/types/trace.js.map +1 -0
- package/engine/dist/utils/adaptive-concurrency.d.ts +81 -0
- package/engine/dist/utils/adaptive-concurrency.d.ts.map +1 -0
- package/engine/dist/utils/adaptive-concurrency.js +266 -0
- package/engine/dist/utils/adaptive-concurrency.js.map +1 -0
- package/engine/dist/utils/date_extractor.d.ts +2 -0
- package/engine/dist/utils/date_extractor.d.ts.map +1 -0
- package/engine/dist/utils/date_extractor.js +32 -0
- package/engine/dist/utils/date_extractor.js.map +1 -0
- package/engine/dist/utils/native-module-manager.d.ts +48 -0
- package/engine/dist/utils/native-module-manager.d.ts.map +1 -0
- package/engine/dist/utils/native-module-manager.js +265 -0
- package/engine/dist/utils/native-module-manager.js.map +1 -0
- package/engine/dist/utils/native-module-profiler.d.ts +66 -0
- package/engine/dist/utils/native-module-profiler.d.ts.map +1 -0
- package/engine/dist/utils/native-module-profiler.js +182 -0
- package/engine/dist/utils/native-module-profiler.js.map +1 -0
- package/engine/dist/utils/path-manager.d.ts +59 -0
- package/engine/dist/utils/path-manager.d.ts.map +1 -0
- package/engine/dist/utils/path-manager.js +154 -0
- package/engine/dist/utils/path-manager.js.map +1 -0
- package/engine/dist/utils/performance-monitor.d.ts +92 -0
- package/engine/dist/utils/performance-monitor.d.ts.map +1 -0
- package/engine/dist/utils/performance-monitor.js +221 -0
- package/engine/dist/utils/performance-monitor.js.map +1 -0
- package/engine/dist/utils/process-manager.d.ts +18 -0
- package/engine/dist/utils/process-manager.d.ts.map +1 -0
- package/engine/dist/utils/process-manager.js +100 -0
- package/engine/dist/utils/process-manager.js.map +1 -0
- package/engine/dist/utils/request-tracer.d.ts +131 -0
- package/engine/dist/utils/request-tracer.d.ts.map +1 -0
- package/engine/dist/utils/request-tracer.js +414 -0
- package/engine/dist/utils/request-tracer.js.map +1 -0
- package/engine/dist/utils/resource-manager.d.ts +108 -0
- package/engine/dist/utils/resource-manager.d.ts.map +1 -0
- package/engine/dist/utils/resource-manager.js +235 -0
- package/engine/dist/utils/resource-manager.js.map +1 -0
- package/engine/dist/utils/safe-dns.d.ts +14 -0
- package/engine/dist/utils/safe-dns.d.ts.map +1 -0
- package/engine/dist/utils/safe-dns.js +105 -0
- package/engine/dist/utils/safe-dns.js.map +1 -0
- package/engine/dist/utils/structured-logger.d.ts +124 -0
- package/engine/dist/utils/structured-logger.d.ts.map +1 -0
- package/engine/dist/utils/structured-logger.js +332 -0
- package/engine/dist/utils/structured-logger.js.map +1 -0
- package/engine/dist/utils/tag-cleanup.d.ts +11 -0
- package/engine/dist/utils/tag-cleanup.d.ts.map +1 -0
- package/engine/dist/utils/tag-cleanup.js +111 -0
- package/engine/dist/utils/tag-cleanup.js.map +1 -0
- package/engine/dist/utils/tag-filter.d.ts +19 -0
- package/engine/dist/utils/tag-filter.d.ts.map +1 -0
- package/engine/dist/utils/tag-filter.js +147 -0
- package/engine/dist/utils/tag-filter.js.map +1 -0
- package/engine/dist/utils/tag-modulation.d.ts +80 -0
- package/engine/dist/utils/tag-modulation.d.ts.map +1 -0
- package/engine/dist/utils/tag-modulation.js +284 -0
- package/engine/dist/utils/tag-modulation.js.map +1 -0
- package/engine/dist/utils/timer.d.ts +40 -0
- package/engine/dist/utils/timer.d.ts.map +1 -0
- package/engine/dist/utils/timer.js +76 -0
- package/engine/dist/utils/timer.js.map +1 -0
- package/engine/dist/utils/token-utils.d.ts +19 -0
- package/engine/dist/utils/token-utils.d.ts.map +1 -0
- package/engine/dist/utils/token-utils.js +71 -0
- package/engine/dist/utils/token-utils.js.map +1 -0
- package/engine/dist/utils/wasm-module-loader.d.ts +50 -0
- package/engine/dist/utils/wasm-module-loader.d.ts.map +1 -0
- package/engine/dist/utils/wasm-module-loader.js +136 -0
- package/engine/dist/utils/wasm-module-loader.js.map +1 -0
- package/engine/package.json +105 -0
- package/package.json +106 -0
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search Utilities Module — "The Tools"
|
|
3
|
+
*
|
|
4
|
+
* Types, interfaces, Hamming distance calculation, result formatting,
|
|
5
|
+
* and display helpers used across the search subsystem.
|
|
6
|
+
* Extracted from search.ts for clean separation of concerns.
|
|
7
|
+
*/
|
|
8
|
+
import { config } from '../../config/index.js';
|
|
9
|
+
import { wasmModuleLoader } from '../../utils/wasm-module-loader.js';
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import { getMirrorPath } from '../mirror/mirror.js';
|
|
13
|
+
import { NOTEBOOK_DIR } from '../../config/paths.js';
|
|
14
|
+
/**
|
|
15
|
+
* Remove inline hashtag tokens from content (Standard 123).
|
|
16
|
+
* Tags are stored separately in result.tags; they add noise when embedded in text.
|
|
17
|
+
*/
|
|
18
|
+
function stripInlineTags(content) {
|
|
19
|
+
if (!content)
|
|
20
|
+
return content;
|
|
21
|
+
let s = content.replace(/\\?"#[^"\\]+\\?"/g, '');
|
|
22
|
+
s = s.replace(/##?[A-Za-z0-9_]+/g, '');
|
|
23
|
+
// Only strip " - " list separators (space-hyphen-space), not bare hyphens
|
|
24
|
+
// in kebab-case identifiers like p-6, text-xl, font-bold, etc.
|
|
25
|
+
s = s.replace(/[ \t]+-[ \t]+/g, ' ').trim();
|
|
26
|
+
return s;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Remove tag footers from truncated snippets (Standard 123 extension).
|
|
30
|
+
* When YAML session records are truncated mid-record, structural metadata
|
|
31
|
+
* footers appear (e.g., ##19864Residen ##1Okay ##3am ##ABQLo).
|
|
32
|
+
* These are serialization artifacts, not content.
|
|
33
|
+
*/
|
|
34
|
+
function stripTagFooters(content) {
|
|
35
|
+
if (!content)
|
|
36
|
+
return content;
|
|
37
|
+
const lines = content.split('\n');
|
|
38
|
+
// Remove trailing lines that are predominantly tag tokens (##*)
|
|
39
|
+
while (lines.length > 0) {
|
|
40
|
+
const lastLine = lines[lines.length - 1].trim();
|
|
41
|
+
// Pattern: one or more "##Token" separated by spaces (structural footer)
|
|
42
|
+
if (/^(##[A-Za-z0-9_]*\s*)+$/.test(lastLine)) {
|
|
43
|
+
lines.pop();
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return lines.join('\n').trim();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Helper: Calculate Hamming Distance between two hex strings
|
|
53
|
+
* Uses the native module or fallback if available
|
|
54
|
+
*/
|
|
55
|
+
export function getHammingDistance(hashA, hashB) {
|
|
56
|
+
try {
|
|
57
|
+
// Validate inputs before processing
|
|
58
|
+
if (!hashA || !hashB) {
|
|
59
|
+
console.warn('[Search] Invalid hash inputs for Hamming distance calculation:', { hashA, hashB });
|
|
60
|
+
return 64; // Max distance on error (assume different)
|
|
61
|
+
}
|
|
62
|
+
// Ensure valid hex strings
|
|
63
|
+
if (!/^[0-9a-fA-F]+$/.test(hashA) || !/^[0-9a-fA-F]+$/.test(hashB)) {
|
|
64
|
+
console.warn('[Search] Invalid hex string format for Hamming distance:', { hashA, hashB });
|
|
65
|
+
return 64; // Max distance on error (assume different)
|
|
66
|
+
}
|
|
67
|
+
const a = BigInt(`0x${hashA}`);
|
|
68
|
+
const b = BigInt(`0x${hashB}`);
|
|
69
|
+
// Use WASM module for distance calculation (Standard 074 - WASM Edition)
|
|
70
|
+
try {
|
|
71
|
+
return wasmModuleLoader.distance(a, b);
|
|
72
|
+
}
|
|
73
|
+
catch (wasmError) {
|
|
74
|
+
console.warn('[Search] WASM distance function failed, using JS fallback:', wasmError);
|
|
75
|
+
}
|
|
76
|
+
// JavaScript fallback implementation
|
|
77
|
+
let xor = a ^ b;
|
|
78
|
+
let count = 0;
|
|
79
|
+
while (xor > 0n) {
|
|
80
|
+
xor &= (xor - 1n);
|
|
81
|
+
count++;
|
|
82
|
+
}
|
|
83
|
+
return count;
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
console.error('[Search] Hamming distance calculation failed:', e);
|
|
87
|
+
return 64; // Max distance on error (assume different)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Helper: safely extract array from possibly undefined input
|
|
92
|
+
*/
|
|
93
|
+
export function getItems(input) {
|
|
94
|
+
return Array.isArray(input) ? input : [];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Coalesce atoms by proximity - merges nearby atoms from same source file
|
|
98
|
+
* into coherent snippets for better LLM consumption
|
|
99
|
+
*
|
|
100
|
+
* @param results - Search results to coalesce
|
|
101
|
+
* @param proximityThreshold - Bytes within which to merge atoms (default 500)
|
|
102
|
+
* @returns Coalesced snippets with expanded content
|
|
103
|
+
*/
|
|
104
|
+
export async function coalesceByProximity(results, proximityThreshold = 500, maxSnippets = 500) {
|
|
105
|
+
// Group by compound_id (source file)
|
|
106
|
+
const byCompound = new Map();
|
|
107
|
+
results.forEach(r => {
|
|
108
|
+
if (!r.compound_id || !r.source)
|
|
109
|
+
return;
|
|
110
|
+
if (!byCompound.has(r.compound_id))
|
|
111
|
+
byCompound.set(r.compound_id, []);
|
|
112
|
+
byCompound.get(r.compound_id).push(r);
|
|
113
|
+
});
|
|
114
|
+
const coalesced = [];
|
|
115
|
+
let mergedCount = 0;
|
|
116
|
+
for (const [compoundId, atoms] of byCompound.entries()) {
|
|
117
|
+
if (atoms.length === 0)
|
|
118
|
+
continue;
|
|
119
|
+
// Sort by byte offset
|
|
120
|
+
atoms.sort((a, b) => (a.start_byte || 0) - (b.start_byte || 0));
|
|
121
|
+
// Merge atoms within proximity threshold
|
|
122
|
+
const merged = [];
|
|
123
|
+
let current = null;
|
|
124
|
+
for (const atom of atoms) {
|
|
125
|
+
const atomStart = atom.start_byte || 0;
|
|
126
|
+
const atomEnd = atom.end_byte || 0;
|
|
127
|
+
if (!current) {
|
|
128
|
+
current = {
|
|
129
|
+
source: atom.source,
|
|
130
|
+
compoundId,
|
|
131
|
+
startByte: atomStart,
|
|
132
|
+
endByte: atomEnd,
|
|
133
|
+
timestamp: atom.timestamp,
|
|
134
|
+
content: atom.content,
|
|
135
|
+
sourceAtoms: [atom],
|
|
136
|
+
relevanceScore: atom.score,
|
|
137
|
+
provenance: atom.provenance || 'internal',
|
|
138
|
+
tags: (atom.tags || []).slice(0, 10) // Limit to top 10 tags initially
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
const gap = atomStart - current.endByte;
|
|
143
|
+
// Merge if overlapping or within proximity threshold
|
|
144
|
+
if (gap <= proximityThreshold) {
|
|
145
|
+
// Extend window
|
|
146
|
+
current.endByte = Math.max(current.endByte, atomEnd);
|
|
147
|
+
current.sourceAtoms.push(atom);
|
|
148
|
+
current.relevanceScore = Math.max(current.relevanceScore, atom.score);
|
|
149
|
+
current.timestamp = Math.min(current.timestamp, atom.timestamp); // Use earliest timestamp
|
|
150
|
+
// Merge tags but limit to top 10 most relevant
|
|
151
|
+
const mergedTags = Array.from(new Set([...current.tags, ...(atom.tags || [])]));
|
|
152
|
+
current.tags = mergedTags.slice(0, 15); // Allow slightly more during merge, final limit applied later
|
|
153
|
+
mergedCount++;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Push current and start new
|
|
157
|
+
merged.push(current);
|
|
158
|
+
current = {
|
|
159
|
+
source: atom.source,
|
|
160
|
+
compoundId,
|
|
161
|
+
startByte: atomStart,
|
|
162
|
+
endByte: atomEnd,
|
|
163
|
+
timestamp: atom.timestamp,
|
|
164
|
+
content: atom.content,
|
|
165
|
+
sourceAtoms: [atom],
|
|
166
|
+
relevanceScore: atom.score,
|
|
167
|
+
provenance: atom.provenance || 'internal',
|
|
168
|
+
tags: (atom.tags || []).slice(0, 10) // Limit to top 10 tags for new snippets
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (current)
|
|
174
|
+
merged.push(current);
|
|
175
|
+
// Per-source cap: prevent a single file from dominating the results.
|
|
176
|
+
// Keep the top-scoring snippets per source before the global maxSnippets cap.
|
|
177
|
+
// maxPerSource scales with budget: 3 for small budgets, up to 8 for large.
|
|
178
|
+
const maxPerSource = Math.max(3, Math.min(8, Math.ceil(maxSnippets / 15)));
|
|
179
|
+
const perSourceCapped = merged
|
|
180
|
+
.sort((a, b) => b.relevanceScore - a.relevanceScore)
|
|
181
|
+
.slice(0, maxPerSource);
|
|
182
|
+
coalesced.push(...perSourceCapped);
|
|
183
|
+
}
|
|
184
|
+
// Sort all snippets by relevance score DESC, keep only top-maxSnippets before
|
|
185
|
+
// inflating from disk. This prevents inflating 200+ snippets when only 20-30
|
|
186
|
+
// will fit in the token budget.
|
|
187
|
+
coalesced.sort((a, b) => b.relevanceScore - a.relevanceScore);
|
|
188
|
+
const cappedCoalesced = coalesced.slice(0, maxSnippets);
|
|
189
|
+
// Re-inflate content from disk only for the snippets we're keeping
|
|
190
|
+
for (const snippet of cappedCoalesced) {
|
|
191
|
+
try {
|
|
192
|
+
const inflatedContent = await inflateSnippetFromDisk(snippet);
|
|
193
|
+
if (inflatedContent) {
|
|
194
|
+
snippet.content = inflatedContent;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
console.warn(`[Coalesce] Failed to inflate snippet from ${snippet.source}`, e);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
console.log(`[Coalesce] Merged ${results.length} atoms -> ${coalesced.length} snippets (${mergedCount} merges), inflating top ${cappedCoalesced.length}`);
|
|
202
|
+
return cappedCoalesced;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Inflate a coalesced snippet from disk
|
|
206
|
+
*/
|
|
207
|
+
// Hard limit per snippet to prevent OOM when coalesced byte ranges span large files.
|
|
208
|
+
// With 800px proximity threshold in max-recall, merged windows can be multi-MB.
|
|
209
|
+
// 100KB is ample for any single context snippet (≈25k tokens).
|
|
210
|
+
const MAX_SNIPPET_BYTES = 100_000;
|
|
211
|
+
async function inflateSnippetFromDisk(snippet) {
|
|
212
|
+
try {
|
|
213
|
+
// Resolve file path - try mirrored first
|
|
214
|
+
const mirrorPath = getMirrorPath(snippet.source, snippet.provenance);
|
|
215
|
+
let absolutePath = mirrorPath;
|
|
216
|
+
if (!fs.existsSync(mirrorPath)) {
|
|
217
|
+
absolutePath = path.isAbsolute(snippet.source)
|
|
218
|
+
? snippet.source
|
|
219
|
+
: path.join(NOTEBOOK_DIR, snippet.source);
|
|
220
|
+
}
|
|
221
|
+
if (!fs.existsSync(absolutePath))
|
|
222
|
+
return null;
|
|
223
|
+
const stats = fs.statSync(absolutePath);
|
|
224
|
+
const fileSize = stats.size;
|
|
225
|
+
// Clamp to file bounds
|
|
226
|
+
const start = Math.max(0, snippet.startByte);
|
|
227
|
+
const rawEnd = Math.min(fileSize, snippet.endByte);
|
|
228
|
+
if (start >= rawEnd)
|
|
229
|
+
return null;
|
|
230
|
+
// Cap read size: if the merged window is huge, read from the start of the window
|
|
231
|
+
// up to MAX_SNIPPET_BYTES only. Content is truncated, not silently dropped.
|
|
232
|
+
const readLength = Math.min(rawEnd - start, MAX_SNIPPET_BYTES);
|
|
233
|
+
const end = start + readLength;
|
|
234
|
+
const truncated = end < rawEnd;
|
|
235
|
+
// Read content
|
|
236
|
+
const buffer = Buffer.alloc(readLength);
|
|
237
|
+
const fd = fs.openSync(absolutePath, 'r');
|
|
238
|
+
try {
|
|
239
|
+
fs.readSync(fd, buffer, 0, readLength, start);
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
fs.closeSync(fd);
|
|
243
|
+
}
|
|
244
|
+
let content = buffer.toString('utf-8');
|
|
245
|
+
// Snap to sentence boundaries for coherence
|
|
246
|
+
content = snapToSentenceBoundaries(content, 0, content.length).text;
|
|
247
|
+
// Strip tag footers (##19864Residen, ##1Okay, etc.) that appear when truncating YAML records
|
|
248
|
+
content = stripTagFooters(content);
|
|
249
|
+
// Add ellipsis to indicate truncation
|
|
250
|
+
if (start > 0)
|
|
251
|
+
content = '...' + content;
|
|
252
|
+
if (truncated || end < fileSize)
|
|
253
|
+
content = content + '...';
|
|
254
|
+
return content.trim();
|
|
255
|
+
}
|
|
256
|
+
catch (e) {
|
|
257
|
+
console.warn(`[Coalesce] inflateSnippetFromDisk failed:`, e);
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Snap to sentence boundaries for cleaner snippets
|
|
263
|
+
*/
|
|
264
|
+
function snapToSentenceBoundaries(content, targetStart, targetEnd) {
|
|
265
|
+
// Snap start: find previous sentence end
|
|
266
|
+
const preceding = content.substring(0, targetStart);
|
|
267
|
+
const matchStart = preceding.match(/([.!?]\s|\n\s*\n)(?=[^.!?\n]*$)/);
|
|
268
|
+
const snappedStart = matchStart && matchStart.index !== undefined
|
|
269
|
+
? matchStart.index + matchStart[0].length
|
|
270
|
+
: 0;
|
|
271
|
+
// Snap end: find next sentence end
|
|
272
|
+
const succeeding = content.substring(targetEnd);
|
|
273
|
+
const matchEnd = succeeding.match(/([.!?]\s|\n\s*\n)/);
|
|
274
|
+
const snappedEnd = matchEnd && matchEnd.index !== undefined
|
|
275
|
+
? targetEnd + matchEnd.index + 1
|
|
276
|
+
: content.length;
|
|
277
|
+
return {
|
|
278
|
+
start: snappedStart,
|
|
279
|
+
end: snappedEnd,
|
|
280
|
+
text: content.substring(snappedStart, snappedEnd).trim()
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Format search results within character budget
|
|
285
|
+
* Uses molecular coordinates (start_byte/end_byte) for precise content slicing
|
|
286
|
+
*
|
|
287
|
+
* Features:
|
|
288
|
+
* - Coalesces nearby atoms into coherent snippets (500-1000 chars)
|
|
289
|
+
* - Adds metadata headers with file, range, timestamp, atom count
|
|
290
|
+
* - Sorts chronologically for causal narrative
|
|
291
|
+
* - Wraps in XML with relevance scores for LLM prioritization
|
|
292
|
+
*/
|
|
293
|
+
export async function formatResults(results, maxChars, options) {
|
|
294
|
+
try {
|
|
295
|
+
const enableCoalescing = options?.enableCoalescing ?? true;
|
|
296
|
+
const proximityThreshold = options?.proximityThreshold ?? 500;
|
|
297
|
+
// Step 1: Coalesce atoms into coherent snippets
|
|
298
|
+
let snippets;
|
|
299
|
+
let coalescingStats = {
|
|
300
|
+
original_atoms: results.length,
|
|
301
|
+
coalesced_snippets: results.length,
|
|
302
|
+
compression_ratio: 1.0
|
|
303
|
+
};
|
|
304
|
+
if (enableCoalescing) {
|
|
305
|
+
// Cap snippets to inflate based on budget: minimum 50, max one per 500 chars of budget
|
|
306
|
+
// (reduced from 300 to prevent OOM when processing large result sets)
|
|
307
|
+
const maxSnippetsForBudget = Math.max(50, Math.ceil(maxChars / 500));
|
|
308
|
+
snippets = await coalesceByProximity(results, proximityThreshold, maxSnippetsForBudget);
|
|
309
|
+
coalescingStats = {
|
|
310
|
+
original_atoms: results.length,
|
|
311
|
+
coalesced_snippets: snippets.length,
|
|
312
|
+
compression_ratio: results.length > 0 ? (results.length / snippets.length) : 1.0
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
// Convert SearchResult[] to CoalescedSnippet[] for uniform handling
|
|
317
|
+
snippets = results.map(r => ({
|
|
318
|
+
source: r.source,
|
|
319
|
+
compoundId: r.compound_id || '',
|
|
320
|
+
startByte: r.start_byte || 0,
|
|
321
|
+
endByte: r.end_byte || 0,
|
|
322
|
+
timestamp: r.timestamp,
|
|
323
|
+
content: r.content,
|
|
324
|
+
sourceAtoms: [r],
|
|
325
|
+
relevanceScore: r.score,
|
|
326
|
+
provenance: r.provenance || 'internal',
|
|
327
|
+
tags: (r.tags || []).slice(0, 10) // Limit to top 10 most relevant tags per molecule
|
|
328
|
+
}));
|
|
329
|
+
}
|
|
330
|
+
// Step 2: Sort chronologically (causal narrative)
|
|
331
|
+
snippets.sort((a, b) => a.timestamp - b.timestamp);
|
|
332
|
+
// Step 3: Calculate temporal weights
|
|
333
|
+
const now = Date.now();
|
|
334
|
+
const lambda = 0.00001; // h⁻¹ - 7.9 year half-life (matches paper.md line 69)
|
|
335
|
+
const enrichedSnippets = snippets.map(s => {
|
|
336
|
+
const ageMs = now - s.timestamp;
|
|
337
|
+
const ageHours = ageMs / (1000 * 60 * 60); // Convert ms to hours for λ in h⁻¹
|
|
338
|
+
const decayFactor = lambda * ageHours;
|
|
339
|
+
const temporalWeight = Math.exp(-decayFactor);
|
|
340
|
+
const relevanceScore = (s.relevanceScore * temporalWeight).toFixed(3);
|
|
341
|
+
return {
|
|
342
|
+
...s,
|
|
343
|
+
content: stripInlineTags(s.content), // Standard 123: strip inline #Tag tokens
|
|
344
|
+
temporal_weight: temporalWeight,
|
|
345
|
+
decay_factor: decayFactor,
|
|
346
|
+
weighted_score: relevanceScore
|
|
347
|
+
};
|
|
348
|
+
});
|
|
349
|
+
// Step 3.5: Semantic word-overlap deduplication.
|
|
350
|
+
// Drop snippets whose significant words are already well-covered by a higher-scored snippet.
|
|
351
|
+
// "Significant words" = >4 chars, not stopwords. Overlap threshold = 60%.
|
|
352
|
+
const OVERLAP_THRESHOLD = 0.60;
|
|
353
|
+
const STOPWORDS = new Set(['this', 'that', 'with', 'from', 'they', 'were', 'have', 'been', 'their', 'which', 'when', 'will', 'also', 'what', 'your', 'more', 'some', 'than', 'then', 'into', 'there', 'about', 'would', 'could', 'should', 'other', 'after', 'these', 'those', 'just', 'over', 'such', 'even', 'like', 'much', 'well', 'also', 'here', 'very', 'only', 'its']);
|
|
354
|
+
const sigWords = (text) => {
|
|
355
|
+
const words = text.toLowerCase().match(/\b[a-z]{5,}\b/g) || [];
|
|
356
|
+
return new Set(words.filter(w => !STOPWORDS.has(w)));
|
|
357
|
+
};
|
|
358
|
+
const jaccardOverlap = (a, b) => {
|
|
359
|
+
if (a.size === 0 || b.size === 0)
|
|
360
|
+
return 0;
|
|
361
|
+
let intersection = 0;
|
|
362
|
+
for (const w of a)
|
|
363
|
+
if (b.has(w))
|
|
364
|
+
intersection++;
|
|
365
|
+
return intersection / Math.min(a.size, b.size);
|
|
366
|
+
};
|
|
367
|
+
const deduped = [];
|
|
368
|
+
const acceptedWordSets = [];
|
|
369
|
+
// Sort by weighted_score DESC for dedup pass (best snippets win), then re-sort chronologically below
|
|
370
|
+
const scoreOrdered = [...enrichedSnippets].sort((a, b) => parseFloat(b.weighted_score) - parseFloat(a.weighted_score));
|
|
371
|
+
for (const s of scoreOrdered) {
|
|
372
|
+
const words = sigWords(s.content);
|
|
373
|
+
const isDuplicate = acceptedWordSets.some(accepted => jaccardOverlap(words, accepted) >= OVERLAP_THRESHOLD);
|
|
374
|
+
if (!isDuplicate) {
|
|
375
|
+
deduped.push(s);
|
|
376
|
+
acceptedWordSets.push(words);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
// Restore chronological order for causal narrative
|
|
380
|
+
deduped.sort((a, b) => a.timestamp - b.timestamp);
|
|
381
|
+
const deduplicatedSnippets = deduped;
|
|
382
|
+
const dedupRemovedCount = enrichedSnippets.length - deduplicatedSnippets.length;
|
|
383
|
+
if (dedupRemovedCount > 0) {
|
|
384
|
+
console.log(`[Dedup] Removed ${dedupRemovedCount} semantically overlapping snippets (${enrichedSnippets.length} → ${deduplicatedSnippets.length})`);
|
|
385
|
+
}
|
|
386
|
+
// Force garbage collection after dedup to free memory from enrichedSnippets
|
|
387
|
+
if (global.gc) {
|
|
388
|
+
global.gc();
|
|
389
|
+
}
|
|
390
|
+
// Step 4: Build XML-wrapped context with metadata headers
|
|
391
|
+
const xmlContext = deduplicatedSnippets.map((s, idx) => {
|
|
392
|
+
const timestamp = new Date(s.timestamp).toISOString();
|
|
393
|
+
const persona = s.tags[0] || s.provenance || 'unknown';
|
|
394
|
+
const atomCount = s.sourceAtoms.length;
|
|
395
|
+
const charCount = s.content.length;
|
|
396
|
+
const startHex = s.startByte.toString(16).toUpperCase().padStart(4, '0');
|
|
397
|
+
const endHex = s.endByte.toString(16).toUpperCase().padStart(4, '0');
|
|
398
|
+
const fileName = path.basename(s.source);
|
|
399
|
+
// Metadata header for each snippet
|
|
400
|
+
const header = `[GROUP:${idx + 1}] [File:${fileName}] [Range: 0x${startHex}-0x${endHex}] [Time: ${timestamp}] [Atoms: ${atomCount}] [Chars: ${charCount}]`;
|
|
401
|
+
return `${header}
|
|
402
|
+
<atom id="${s.sourceAtoms.map(a => a.id.substring(0, 8)).join(',')}" relevance="${s.weighted_score}" timestamp="${timestamp}" persona="${persona}" source="${s.source}">
|
|
403
|
+
${s.content}
|
|
404
|
+
</atom>`;
|
|
405
|
+
}).join('\n\n');
|
|
406
|
+
// Force garbage collection after building XML context to free dedup arrays
|
|
407
|
+
if (global.gc) {
|
|
408
|
+
global.gc();
|
|
409
|
+
}
|
|
410
|
+
// Step 5: Calculate budget allocation
|
|
411
|
+
const totalContentChars = deduplicatedSnippets.reduce((sum, s) => sum + s.content.length, 0);
|
|
412
|
+
const overheadChars = xmlContext.length - totalContentChars;
|
|
413
|
+
const budgetUtilization = maxChars > 0 ? ((totalContentChars + overheadChars) / maxChars * 100).toFixed(1) : 'N/A';
|
|
414
|
+
// Step 6: Convert snippets back to SearchResult[] for API compatibility
|
|
415
|
+
const enrichedResults = deduplicatedSnippets.map(s => ({
|
|
416
|
+
id: s.sourceAtoms.map(a => a.id).join('+'),
|
|
417
|
+
content: s.content,
|
|
418
|
+
source: s.source,
|
|
419
|
+
timestamp: s.timestamp,
|
|
420
|
+
buckets: [],
|
|
421
|
+
tags: s.tags,
|
|
422
|
+
epochs: '',
|
|
423
|
+
provenance: s.provenance,
|
|
424
|
+
score: s.relevanceScore,
|
|
425
|
+
compound_id: s.compoundId,
|
|
426
|
+
start_byte: s.startByte,
|
|
427
|
+
end_byte: s.endByte,
|
|
428
|
+
temporal_weight: s.temporal_weight,
|
|
429
|
+
decay_factor: s.decay_factor,
|
|
430
|
+
is_inflated: true
|
|
431
|
+
}));
|
|
432
|
+
return {
|
|
433
|
+
context: xmlContext || 'No results found.',
|
|
434
|
+
results: enrichedResults,
|
|
435
|
+
toAgentString: () => {
|
|
436
|
+
return deduplicatedSnippets.map(s => `[${s.provenance}] ${s.source} (t=${s.temporal_weight.toFixed(3)}, atoms=${s.sourceAtoms.length}): ${s.content.substring(0, 200)}...`).join('\n');
|
|
437
|
+
},
|
|
438
|
+
metadata: {
|
|
439
|
+
coalescing: coalescingStats,
|
|
440
|
+
deduplication: { removed: dedupRemovedCount, remaining: deduplicatedSnippets.length },
|
|
441
|
+
budget_allocation: {
|
|
442
|
+
total_chars: totalContentChars + overheadChars,
|
|
443
|
+
content_chars: totalContentChars,
|
|
444
|
+
overhead_chars: overheadChars,
|
|
445
|
+
utilization_percent: parseFloat(budgetUtilization)
|
|
446
|
+
},
|
|
447
|
+
provenance_enabled: true,
|
|
448
|
+
temporal_decay_lambda: lambda,
|
|
449
|
+
xml_wrapped: true,
|
|
450
|
+
chronological_sort: true
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
catch (error) {
|
|
455
|
+
console.error('[Search] formatResults failed:', error);
|
|
456
|
+
return {
|
|
457
|
+
context: 'Error occurred during result formatting.',
|
|
458
|
+
results: [],
|
|
459
|
+
toAgentString: () => 'Error occurred during result formatting.',
|
|
460
|
+
metadata: { error: true, message: 'Failed to format search results' }
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Helper to filter tags for display (User Request: Hide Year Numbers)
|
|
466
|
+
*/
|
|
467
|
+
export function filterDisplayTags(tags) {
|
|
468
|
+
if (!config.SEARCH?.hide_years_in_tags)
|
|
469
|
+
return tags;
|
|
470
|
+
// Remove if exactly 4 digits (approx year check)
|
|
471
|
+
return tags.filter(t => !/^\d{4}$/.test(t));
|
|
472
|
+
}
|
|
473
|
+
//# sourceMappingURL=search-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-utils.js","sourceRoot":"","sources":["../../../src/services/search/search-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search Orchestrator — "The Brain"
|
|
3
|
+
*
|
|
4
|
+
* Core search orchestration, Tag-Walker physics engine, engram lookup,
|
|
5
|
+
* and result merging. All NLP parsing lives in query-parser.ts ("The Ears"),
|
|
6
|
+
* utilities in search-utils.ts ("The Tools"), and graph reasoning in
|
|
7
|
+
* bright-nodes.ts ("The Illuminator").
|
|
8
|
+
*
|
|
9
|
+
* Standard 086 Compliant.
|
|
10
|
+
* Standard 086 = "Dual-Strategy Search" (internal specification numbering).
|
|
11
|
+
* See specs/standards/STANDARD_086_DUAL_STRATEGY_SEARCH.md for full spec.
|
|
12
|
+
* Two modes: Standard Search (70/30 budget, temporal decay) and Max-Recall
|
|
13
|
+
* (zero decay, 3-hop traversal). Mode auto-selects based on token budget.
|
|
14
|
+
*/
|
|
15
|
+
import { getGlobalTags, splitQueryIntoMolecules, parseQuery } from './query-parser.js';
|
|
16
|
+
import { SearchResult, filterDisplayTags } from './search-utils.js';
|
|
17
|
+
import { KnowledgeCluster } from '../../types/api.js';
|
|
18
|
+
export { getGlobalTags, filterDisplayTags, parseQuery, splitQueryIntoMolecules };
|
|
19
|
+
export type { SearchResult };
|
|
20
|
+
export type { BrightNode, BrightNodeRelationship } from './bright-nodes.js';
|
|
21
|
+
export { getBrightNodes, getStructuredGraph } from './bright-nodes.js';
|
|
22
|
+
/**
|
|
23
|
+
* Create or update an engram (lexical sidecar) for fast entity lookup
|
|
24
|
+
*/
|
|
25
|
+
export declare function createEngram(key: string, memoryIds: string[]): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Lookup memories by engram key (O(1) operation)
|
|
28
|
+
*/
|
|
29
|
+
export declare function lookupByEngram(key: string): Promise<string[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Hydrate engram IDs into full SearchResult objects
|
|
32
|
+
*/
|
|
33
|
+
export declare function hydrateEngrams(ids: string[]): Promise<SearchResult[]>;
|
|
34
|
+
import { UserContext } from '../../types/context.js';
|
|
35
|
+
/**
|
|
36
|
+
* Find Anchors (Direct Hits) - Formerly part of tagWalkerSearch
|
|
37
|
+
* Executes Strategy A (Atom positions) and Strategy B (Molecules FTS)
|
|
38
|
+
*/
|
|
39
|
+
export declare function findAnchors(query: string, buckets?: string[], tags?: string[], _maxChars?: number, provenance?: 'internal' | 'external' | 'quarantine' | 'all', filters?: {
|
|
40
|
+
type?: string;
|
|
41
|
+
minVal?: number;
|
|
42
|
+
maxVal?: number;
|
|
43
|
+
}, fuzzy?: boolean): Promise<SearchResult[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Execute search with Intelligent Expansion and Physics Tag-Walker Protocol (GCP)
|
|
46
|
+
*
|
|
47
|
+
* @param query - Search query string
|
|
48
|
+
* @param buckets - Array of buckets to search
|
|
49
|
+
* @param maxChars - Maximum characters to return
|
|
50
|
+
* @param provenance - Provenance filter (internal/external/quarantine/all)
|
|
51
|
+
* @param explicitTags - Explicit tags to filter by
|
|
52
|
+
* @param filters - Additional filters
|
|
53
|
+
* @param useMaxRecall - If true, uses MAX_RECALL_CONFIG for comprehensive retrieval
|
|
54
|
+
* @param userContext - User context for personalization
|
|
55
|
+
*/
|
|
56
|
+
export declare function executeSearch(query: string, buckets?: string[], maxChars?: number, provenance?: 'internal' | 'external' | 'quarantine' | 'all', explicitTags?: string[], filters?: {
|
|
57
|
+
type?: string;
|
|
58
|
+
minVal?: number;
|
|
59
|
+
maxVal?: number;
|
|
60
|
+
}, useMaxRecall?: boolean, userContext?: UserContext): Promise<{
|
|
61
|
+
context: string;
|
|
62
|
+
results: SearchResult[];
|
|
63
|
+
toAgentString: () => string;
|
|
64
|
+
metadata?: any;
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* Execute molecule-based search - splits query into sentence-like chunks and searches each separately
|
|
68
|
+
*/
|
|
69
|
+
export declare function executeMoleculeSearch(query: string, bucket?: string, buckets?: string[], maxChars?: number, deep?: boolean, provenance?: 'internal' | 'external' | 'quarantine' | 'all', explicitTags?: string[], userContext?: UserContext): Promise<{
|
|
70
|
+
context: string;
|
|
71
|
+
results: SearchResult[];
|
|
72
|
+
toAgentString: () => string;
|
|
73
|
+
metadata?: any;
|
|
74
|
+
}>;
|
|
75
|
+
/**
|
|
76
|
+
* Traditional FTS fallback
|
|
77
|
+
*/
|
|
78
|
+
export declare function runTraditionalSearch(query: string, buckets: string[]): Promise<SearchResult[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Iterative Search with Back-off Strategy
|
|
81
|
+
* Attempts to retrieve results by progressively simplifying the query.
|
|
82
|
+
*
|
|
83
|
+
* @param useMaxRecall - If true, uses MAX_RECALL_CONFIG for comprehensive retrieval
|
|
84
|
+
*/
|
|
85
|
+
export declare function iterativeSearch(query: string, buckets?: string[], maxChars?: number, tags?: string[], provenance?: 'internal' | 'external' | 'quarantine' | 'all', useMaxRecall?: boolean, userContext?: UserContext): Promise<{
|
|
86
|
+
context: string;
|
|
87
|
+
results: SearchResult[];
|
|
88
|
+
attempt: number;
|
|
89
|
+
metadata?: any;
|
|
90
|
+
toAgentString: () => string;
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* Smart Chat Search (The "Markovian" Context Gatherer)
|
|
94
|
+
* Logic:
|
|
95
|
+
* 1. Try standard Iterative Search.
|
|
96
|
+
* 2. If Recall is Low (< 10 atoms), TRIGGER SPLIT.
|
|
97
|
+
* 3. Split Query into Top Entities (Alice, Bob, etc.).
|
|
98
|
+
* 4. Run Parallel Searches for each entity.
|
|
99
|
+
* 5. Aggregate & Deduplicate.
|
|
100
|
+
*
|
|
101
|
+
* @param useMaxRecall - If true, uses MAX_RECALL_CONFIG for comprehensive retrieval
|
|
102
|
+
*/
|
|
103
|
+
export declare function smartChatSearch(query: string, buckets?: string[], maxChars?: number, tags?: string[], provenance?: 'internal' | 'external' | 'quarantine' | 'all', useMaxRecall?: boolean, userContext?: UserContext): Promise<{
|
|
104
|
+
context: string;
|
|
105
|
+
results: SearchResult[];
|
|
106
|
+
strategy: string;
|
|
107
|
+
splitQueries?: string[];
|
|
108
|
+
metadata?: any;
|
|
109
|
+
toAgentString: () => string;
|
|
110
|
+
}>;
|
|
111
|
+
/**
|
|
112
|
+
* Cluster SearchResults into KnowledgeClusters for high-density JSON.
|
|
113
|
+
* Groups by source file and sorts by chronological timestamp.
|
|
114
|
+
*/
|
|
115
|
+
export declare function clusterMolecules(results: SearchResult[]): KnowledgeCluster[];
|
|
116
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/services/search/search.ts"],"names":[],"mappings":"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"}
|