@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,611 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Physics-Based Tag Walker for ECE
|
|
3
|
+
*
|
|
4
|
+
* Implements mathematical approach to graph traversal using SQL matrix operations
|
|
5
|
+
* leveraging the relational nature of PGlite for efficient sparse matrix processing.
|
|
6
|
+
*
|
|
7
|
+
* Architecture: Treats the database as a Knowledge Graph.
|
|
8
|
+
* - Atoms (memories) and Tags (concepts) form a bipartite graph.
|
|
9
|
+
* - JOIN operations simulate sparse matrix multiplication (M × M^T).
|
|
10
|
+
* - The Unified Field Equation weights every connection deterministically.
|
|
11
|
+
*
|
|
12
|
+
* The "Planets and Moons" Model:
|
|
13
|
+
* - Planets: Direct search hits (FTS/SimHash) — heavy, explicit anchors.
|
|
14
|
+
* - Moons: Physics-discovered associations — orbit via shared tags, time, simhash.
|
|
15
|
+
* - Serendipity: Weighted reservoir sampling occasionally surfaces faint but relevant signals.
|
|
16
|
+
*/
|
|
17
|
+
import { db } from '../../core/db.js';
|
|
18
|
+
/** Maximum time (ms) any single physics walker SQL query is allowed to run */
|
|
19
|
+
const QUERY_TIMEOUT_MS = 2000; // Reduced from 10s to 2s for better UX
|
|
20
|
+
/** Maximum number of anchor IDs to feed into a single SQL query */
|
|
21
|
+
const MAX_ANCHOR_IDS = 30; // Reduced from 50 to prevent SQL bloat
|
|
22
|
+
/**
|
|
23
|
+
* Run a DB query with a timeout. If the query takes longer than `timeoutMs`,
|
|
24
|
+
* the promise rejects with an error (PGlite has no native cancel, but this
|
|
25
|
+
* prevents the physics walker from blocking the search pipeline forever).
|
|
26
|
+
*/
|
|
27
|
+
async function sqlWithTimeout(query, params, timeoutMs = QUERY_TIMEOUT_MS) {
|
|
28
|
+
return Promise.race([
|
|
29
|
+
db.run(query, params),
|
|
30
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`[PhysicsWalker] SQL query timed out after ${timeoutMs}ms`)), timeoutMs))
|
|
31
|
+
]);
|
|
32
|
+
}
|
|
33
|
+
export class PhysicsTagWalker {
|
|
34
|
+
// Hyperparameters (The "Laws of Physics" for your mind)
|
|
35
|
+
// Now configurable via constructor for max-recall mode
|
|
36
|
+
DAMPING_FACTOR;
|
|
37
|
+
TIME_DECAY_LAMBDA;
|
|
38
|
+
MAX_PER_HOP;
|
|
39
|
+
WALK_RADIUS;
|
|
40
|
+
GRAVITY_THRESHOLD;
|
|
41
|
+
TEMPERATURE;
|
|
42
|
+
constructor(config) {
|
|
43
|
+
// Default values (balanced production config)
|
|
44
|
+
// λ = 0.00001 h⁻¹ gives ~7.9 year half-life, appropriate for personal knowledge bases
|
|
45
|
+
// where old memories retain value. See paper.md line 69.
|
|
46
|
+
this.DAMPING_FACTOR = config?.damping ?? 0.85;
|
|
47
|
+
this.TIME_DECAY_LAMBDA = config?.temporalDecay ?? 0.00001; // h⁻¹ (per hour)
|
|
48
|
+
this.MAX_PER_HOP = config?.maxPerHop ?? 50;
|
|
49
|
+
this.WALK_RADIUS = config?.walkRadius ?? 1;
|
|
50
|
+
this.GRAVITY_THRESHOLD = config?.gravityThreshold ?? 0.01;
|
|
51
|
+
this.TEMPERATURE = config?.temperature ?? 0.2;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Safely parse a simhash string into a BigInt (hex with or without 0x).
|
|
55
|
+
*/
|
|
56
|
+
safeParseHex(hash) {
|
|
57
|
+
if (!hash || hash === '0')
|
|
58
|
+
return 0n;
|
|
59
|
+
const clean = hash.startsWith('0x') ? hash : `0x${hash}`;
|
|
60
|
+
try {
|
|
61
|
+
return BigInt(clean);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
console.warn(`[PhysicsWalker] Invalid simhash format: ${hash}`);
|
|
65
|
+
return 0n;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Performs radial inflation using SQL matrix operations.
|
|
70
|
+
* This executes the equivalent of: r = (M * M^T) * q
|
|
71
|
+
*
|
|
72
|
+
* Now includes the Unified Field Equation directly in the SQL query:
|
|
73
|
+
* Weight = (SharedTags) * Exp(-Lambda * DeltaT) * (1 - SimHashDist/64)
|
|
74
|
+
*
|
|
75
|
+
* Uses instance configuration from constructor for max-recall support.
|
|
76
|
+
*/
|
|
77
|
+
async performRadialInflation(anchorIds, radius, // Uses instance WALK_RADIUS if not provided
|
|
78
|
+
maxPerHop, // Uses instance MAX_PER_HOP if not provided
|
|
79
|
+
temperature, // Uses instance TEMPERATURE if not provided
|
|
80
|
+
gravityThreshold // Uses instance GRAVITY_THRESHOLD if not provided
|
|
81
|
+
) {
|
|
82
|
+
// Use instance defaults if not overridden
|
|
83
|
+
const hopRadius = radius ?? this.WALK_RADIUS;
|
|
84
|
+
const hopMaxPerHop = maxPerHop ?? this.MAX_PER_HOP;
|
|
85
|
+
const hopTemperature = temperature ?? this.TEMPERATURE;
|
|
86
|
+
const hopGravityThreshold = gravityThreshold ?? this.GRAVITY_THRESHOLD;
|
|
87
|
+
let currentAnchors = anchorIds;
|
|
88
|
+
let allPhysicsResults = [];
|
|
89
|
+
const seenIds = new Set(anchorIds); // Prevent revisiting anchors
|
|
90
|
+
// We only support radius=1 fully optimized in SQL for now.
|
|
91
|
+
// Iteration for radius > 1 would require feeding results back in.
|
|
92
|
+
// Given the efficiency, radius=1 is usually sufficient if the first hop is high quality.
|
|
93
|
+
// Get connected nodes via shared tags with SQL weighting
|
|
94
|
+
// BUGFIX 2026-03-03: Reduced from hopMaxPerHop * 3 to hopMaxPerHop * 1.5
|
|
95
|
+
// to prevent memory overflow on large datasets (207K molecules)
|
|
96
|
+
// The SQL LIMIT already filters by gravity_score, no need to over-fetch
|
|
97
|
+
const connectedNodes = await this.getConnectedNodesWeighted(currentAnchors, Math.min(hopMaxPerHop, 100), // Cap at 100 total to bound WASM heap (50 standard, 100 max-recall)
|
|
98
|
+
hopGravityThreshold);
|
|
99
|
+
for (const node of connectedNodes) {
|
|
100
|
+
if (seenIds.has(node.atomId))
|
|
101
|
+
continue;
|
|
102
|
+
seenIds.add(node.atomId);
|
|
103
|
+
// Determine connection type based on physics
|
|
104
|
+
// Note: We don't have the *exact* partial scores from SQL separate easily
|
|
105
|
+
// without more complex queries, so we infer reason from properties.
|
|
106
|
+
let connectionType = 'tag_walk_neighbor';
|
|
107
|
+
const hopInfo = node.hopDistance !== undefined ? ` (${node.hopDistance}-hop)` : '';
|
|
108
|
+
let linkReason = `via ${node.sharedTags} shared tag(s)${hopInfo}`;
|
|
109
|
+
// Re-calculate some factors for explanation text (cheap in JS)
|
|
110
|
+
// We don't need exact anchor match here, just general properties
|
|
111
|
+
if (node.gravityScore > 0.8 && node.sharedTags > 2) {
|
|
112
|
+
connectionType = 'tag_walk_neighbor'; // Strong bond is just a high-quality tag walk
|
|
113
|
+
linkReason = `strong bond via ${node.sharedTags} shared tag(s)${hopInfo}`;
|
|
114
|
+
}
|
|
115
|
+
// Calculate simhash distance to *best anchor* if we had it, but SQL aggregation
|
|
116
|
+
// hides the specific anchor relation.
|
|
117
|
+
// Ideally SQL returns "best_anchor_id". It does!
|
|
118
|
+
const timeDeltaMs = 0; // SQL handled time decay, we don't need exact delta for now unless we query it.
|
|
119
|
+
// (Actually we can't easily get the specific edge delta from the aggregate)
|
|
120
|
+
const isRecurring = (node.frequency || 0) > 1 || node.sharedTags >= 3;
|
|
121
|
+
const result = {
|
|
122
|
+
id: node.atomId,
|
|
123
|
+
content: node.content || '',
|
|
124
|
+
source: node.source || '',
|
|
125
|
+
timestamp: node.timestamp,
|
|
126
|
+
buckets: [],
|
|
127
|
+
tags: node.tags || [],
|
|
128
|
+
epochs: '',
|
|
129
|
+
provenance: node.provenance || 'internal',
|
|
130
|
+
score: node.gravityScore,
|
|
131
|
+
molecular_signature: node.simhash.toString(16),
|
|
132
|
+
frequency: node.frequency || 1,
|
|
133
|
+
type: node.type || 'thought',
|
|
134
|
+
compound_id: node.compoundId,
|
|
135
|
+
start_byte: node.startByte,
|
|
136
|
+
end_byte: node.endByte,
|
|
137
|
+
temporal_state: {
|
|
138
|
+
first_seen: node.timestamp,
|
|
139
|
+
last_seen: node.timestamp,
|
|
140
|
+
occurrence_count: node.frequency || 1,
|
|
141
|
+
timestamps: [node.timestamp]
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
const physics = {
|
|
145
|
+
gravity_score: node.gravityScore,
|
|
146
|
+
time_drift: 'calculated_in_flux', // Placeholder as we aggregate
|
|
147
|
+
is_recurring: isRecurring,
|
|
148
|
+
frequency: node.frequency || 1,
|
|
149
|
+
connection_type: connectionType,
|
|
150
|
+
source_anchor_id: node.bestAnchorId || '',
|
|
151
|
+
link_reason: linkReason,
|
|
152
|
+
hop_distance: node.hopDistance
|
|
153
|
+
};
|
|
154
|
+
allPhysicsResults.push({ result, physics });
|
|
155
|
+
}
|
|
156
|
+
// Sort by gravity score
|
|
157
|
+
allPhysicsResults.sort((a, b) => b.physics.gravity_score - a.physics.gravity_score);
|
|
158
|
+
// Weighted Reservoir Sampling / Serendipity could be applied here if needed
|
|
159
|
+
// But SQL ranking is "Unified Field" based.
|
|
160
|
+
// If temperature is high, we might want to shuffle the top K?
|
|
161
|
+
// For now, returning the physics-sorted list.
|
|
162
|
+
return allPhysicsResults.slice(0, maxPerHop);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Gets connected nodes via shared tags using SQL matrix operations w/ Physics equations.
|
|
166
|
+
*
|
|
167
|
+
* The SQL performs:
|
|
168
|
+
* 1. Collect Anchor Stats (ID, Timestamp, SimHash)
|
|
169
|
+
* 2. Find Shared Tags (Sparse Matrix Multiply)
|
|
170
|
+
* 3. Calculate Weight:
|
|
171
|
+
* W = (SharedTags) * Exp(-lambda * delta_t) * (1 - Hamming/64)
|
|
172
|
+
* 4. Aggregate: Take the MAX weight overlapping with any anchor.
|
|
173
|
+
*/
|
|
174
|
+
async getConnectedNodesWeighted(anchorIds, limit = 50, threshold = 0.1) {
|
|
175
|
+
if (anchorIds.length === 0)
|
|
176
|
+
return [];
|
|
177
|
+
// BUGFIX 2026-03-03: Guard against excessive limit values that cause heap overflow
|
|
178
|
+
// Ensure limit is always a positive integer (guards against float args causing
|
|
179
|
+
// "invalid input syntax for type bigint" in the LIMIT $3 SQL parameter)
|
|
180
|
+
// Also cap at 300 to prevent memory exhaustion on large datasets
|
|
181
|
+
const safeLimit = Math.max(1, Math.min(Math.floor(limit), 300));
|
|
182
|
+
// Cap anchors
|
|
183
|
+
const cappedIds = anchorIds.length > MAX_ANCHOR_IDS
|
|
184
|
+
? anchorIds.slice(0, MAX_ANCHOR_IDS)
|
|
185
|
+
: anchorIds;
|
|
186
|
+
const startTime = Date.now();
|
|
187
|
+
// Cap PostgreSQL sort/hash memory per query node to prevent WASM heap spikes
|
|
188
|
+
await db.run("SET work_mem = '32MB'");
|
|
189
|
+
// 1. Prepare Anchor Params
|
|
190
|
+
// We pass the anchor IDs as a single array as the first parameter.
|
|
191
|
+
// Physics constants and query params follow
|
|
192
|
+
// $1 = anchorIds array
|
|
193
|
+
// $2 = threshold
|
|
194
|
+
// $3 = safeLimit
|
|
195
|
+
// $4 = WALK_RADIUS
|
|
196
|
+
// $5 = DAMPING_FACTOR
|
|
197
|
+
// $6 = TIME_DECAY_LAMBDA
|
|
198
|
+
// Big-O summary for this query (N = total molecules, A = atoms, T = tags):
|
|
199
|
+
// resolved_atoms: O(|anchors|) — subquery fence ensures PK lookup, not full-table cross join
|
|
200
|
+
// anchor_stats: O(A) → LIMIT 10 — scan atoms WHERE id IN small set
|
|
201
|
+
// anchor_tag_set: O(10 × avg_tags) — materialized once, replaces correlated subquery
|
|
202
|
+
// hop_traversal: O(anchor_count × avg_tag_neighbors) — recursive, bounded by WALK_RADIUS
|
|
203
|
+
// atom_hop_distance: O(hop_traversal rows) — GROUP BY
|
|
204
|
+
// candidates: O(atom_hop_distance × avg_tags_per_atom) — no correlated subquery
|
|
205
|
+
// candidates_limited/physical: O(LIMIT 50) each
|
|
206
|
+
// weighted_ids CROSS JOIN: O(100 candidates × 10 anchors) = O(1000) — manageable
|
|
207
|
+
// Final JOIN atoms: O(safeLimit × row_size) — only materialized content
|
|
208
|
+
const refinedQuery = `
|
|
209
|
+
WITH RECURSIVE
|
|
210
|
+
-- Resolve both Atoms and Molecules to a unified set of Atom IDs.
|
|
211
|
+
-- CRITICAL: The molecule branch uses a subquery fence to materialize anchor molecules
|
|
212
|
+
-- (small set, O(|anchors|) via PK) BEFORE joining to atoms.
|
|
213
|
+
-- Without this, "atoms JOIN molecules ON compound_id" produces an O(A×N) cross product
|
|
214
|
+
-- when all molecules share a single compound_id (e.g. one large file = 207K molecules).
|
|
215
|
+
resolved_atoms AS (
|
|
216
|
+
SELECT id as atom_id FROM atoms WHERE id = ANY($1::text[])
|
|
217
|
+
UNION ALL
|
|
218
|
+
SELECT a.id as atom_id
|
|
219
|
+
FROM (
|
|
220
|
+
SELECT id, compound_id, start_byte, end_byte
|
|
221
|
+
FROM molecules
|
|
222
|
+
WHERE id = ANY($1::text[])
|
|
223
|
+
LIMIT 50
|
|
224
|
+
) anc_mol
|
|
225
|
+
JOIN atoms a ON a.compound_id = anc_mol.compound_id
|
|
226
|
+
AND a.start_byte >= (anc_mol.start_byte - 500::int)
|
|
227
|
+
AND a.end_byte <= (anc_mol.end_byte + 500::int)
|
|
228
|
+
LIMIT 100
|
|
229
|
+
),
|
|
230
|
+
anchor_stats AS (
|
|
231
|
+
SELECT
|
|
232
|
+
id as anchor_id,
|
|
233
|
+
timestamp as anchor_ts,
|
|
234
|
+
simhash as anchor_sh,
|
|
235
|
+
0::int as hop_distance
|
|
236
|
+
FROM atoms
|
|
237
|
+
WHERE id IN (SELECT atom_id FROM resolved_atoms)
|
|
238
|
+
ORDER BY timestamp DESC
|
|
239
|
+
LIMIT 10
|
|
240
|
+
),
|
|
241
|
+
-- Materialized anchor tag set: replaces the correlated subquery
|
|
242
|
+
-- "t.tag IN (SELECT tag FROM tags WHERE atom_id = ast.anchor_id)"
|
|
243
|
+
-- that previously ran once per (candidate_atom × anchor) pair.
|
|
244
|
+
anchor_tag_set AS (
|
|
245
|
+
SELECT DISTINCT tag
|
|
246
|
+
FROM tags
|
|
247
|
+
WHERE atom_id IN (SELECT anchor_id FROM anchor_stats)
|
|
248
|
+
),
|
|
249
|
+
-- HOP TRACKING: Recursive CTE for multi-hop traversal with hop distance
|
|
250
|
+
hop_traversal AS (
|
|
251
|
+
SELECT
|
|
252
|
+
anchor_id as atom_id,
|
|
253
|
+
anchor_ts,
|
|
254
|
+
anchor_sh,
|
|
255
|
+
hop_distance,
|
|
256
|
+
CAST(ARRAY[anchor_id] as TEXT[]) as path
|
|
257
|
+
FROM anchor_stats
|
|
258
|
+
|
|
259
|
+
UNION ALL
|
|
260
|
+
|
|
261
|
+
SELECT DISTINCT
|
|
262
|
+
t2.atom_id,
|
|
263
|
+
a2.timestamp as anchor_ts,
|
|
264
|
+
a2.simhash as anchor_sh,
|
|
265
|
+
ht.hop_distance + 1,
|
|
266
|
+
ht.path || t2.atom_id
|
|
267
|
+
FROM hop_traversal ht
|
|
268
|
+
JOIN atoms a1 ON ht.atom_id = a1.id
|
|
269
|
+
JOIN tags t1 ON a1.id = t1.atom_id
|
|
270
|
+
JOIN tags t2 ON t1.tag = t2.tag AND t1.atom_id != t2.atom_id
|
|
271
|
+
JOIN atoms a2 ON t2.atom_id = a2.id
|
|
272
|
+
WHERE ht.hop_distance < $4
|
|
273
|
+
AND NOT t2.atom_id = ANY(ht.path)
|
|
274
|
+
AND a2.id NOT IN (SELECT anchor_id FROM anchor_stats)
|
|
275
|
+
),
|
|
276
|
+
atom_hop_distance AS (
|
|
277
|
+
SELECT
|
|
278
|
+
atom_id,
|
|
279
|
+
anchor_ts,
|
|
280
|
+
anchor_sh,
|
|
281
|
+
MIN(hop_distance) as hop_distance
|
|
282
|
+
FROM hop_traversal
|
|
283
|
+
WHERE hop_distance > 0
|
|
284
|
+
GROUP BY atom_id, anchor_ts, anchor_sh
|
|
285
|
+
),
|
|
286
|
+
-- Candidate Generation: uses anchor_tag_set (hash join) instead of correlated subquery
|
|
287
|
+
candidates AS (
|
|
288
|
+
SELECT
|
|
289
|
+
h.atom_id,
|
|
290
|
+
a.timestamp,
|
|
291
|
+
a.simhash,
|
|
292
|
+
COUNT(DISTINCT t.tag) as shared_tags,
|
|
293
|
+
0.0 as physical_bonus,
|
|
294
|
+
MIN(h.hop_distance) as hop_distance
|
|
295
|
+
FROM atom_hop_distance h
|
|
296
|
+
JOIN atoms a ON h.atom_id = a.id
|
|
297
|
+
JOIN tags t ON a.id = t.atom_id AND t.tag IN (SELECT tag FROM anchor_tag_set)
|
|
298
|
+
GROUP BY h.atom_id, a.timestamp, a.simhash
|
|
299
|
+
),
|
|
300
|
+
candidates_limited AS (
|
|
301
|
+
SELECT * FROM candidates
|
|
302
|
+
ORDER BY shared_tags DESC
|
|
303
|
+
LIMIT 50
|
|
304
|
+
),
|
|
305
|
+
candidates_physical AS (
|
|
306
|
+
-- Part B: Physical proximity
|
|
307
|
+
SELECT
|
|
308
|
+
a.id as atom_id,
|
|
309
|
+
a.timestamp,
|
|
310
|
+
a.simhash,
|
|
311
|
+
0::bigint as shared_tags,
|
|
312
|
+
1.0 as physical_bonus,
|
|
313
|
+
1::int as hop_distance -- Physical proximity treated as hop 1
|
|
314
|
+
FROM atoms a
|
|
315
|
+
JOIN anchor_stats ast ON a.compound_id = (SELECT compound_id FROM atoms WHERE id = ast.anchor_id)
|
|
316
|
+
WHERE a.id NOT IN (SELECT anchor_id FROM anchor_stats)
|
|
317
|
+
AND a.start_byte >= ((SELECT start_byte FROM atoms WHERE id = ast.anchor_id) - 1000::int)
|
|
318
|
+
AND a.end_byte <= ((SELECT end_byte FROM atoms WHERE id = ast.anchor_id) + 1000::int)
|
|
319
|
+
LIMIT 50
|
|
320
|
+
),
|
|
321
|
+
candidates_combined AS (
|
|
322
|
+
SELECT * FROM candidates_limited
|
|
323
|
+
UNION ALL
|
|
324
|
+
SELECT * FROM candidates_physical
|
|
325
|
+
),
|
|
326
|
+
-- 2. Aggregate candidate scores
|
|
327
|
+
scored_candidates AS (
|
|
328
|
+
SELECT
|
|
329
|
+
c.atom_id,
|
|
330
|
+
c.timestamp,
|
|
331
|
+
c.simhash,
|
|
332
|
+
SUM(c.shared_tags) as total_shared_tags,
|
|
333
|
+
MAX(c.physical_bonus) as physical_bonus,
|
|
334
|
+
MIN(c.hop_distance) as hop_distance -- Use minimum hop distance
|
|
335
|
+
FROM candidates_combined c
|
|
336
|
+
GROUP BY c.atom_id, c.timestamp, c.simhash
|
|
337
|
+
),
|
|
338
|
+
-- 3. Physics Weighting (Unified Field Equation with hop distance)
|
|
339
|
+
-- Implements: |T(q) ∩ T(a)| · γ^(d(q,a)) × e^(-λΔt) × (1 - H(h_q,h_a)/64)
|
|
340
|
+
-- Note: LEAST(GREATEST(..., 0), 3) clamps hop_distance to prevent POWER underflow
|
|
341
|
+
-- Note: LEAST(..., 700000) clamps time diff to ~7 days BEFORE EXP to prevent underflow
|
|
342
|
+
-- EXP(-0.00001 * 700000) = EXP(-7) ≈ 0.0009 which PGlite can handle
|
|
343
|
+
-- Note: timestamps are in milliseconds, λ is in hours⁻¹, so divide by 3600000 to convert ms→hours
|
|
344
|
+
weighted_ids AS (
|
|
345
|
+
SELECT
|
|
346
|
+
sc.atom_id,
|
|
347
|
+
MAX(
|
|
348
|
+
GREATEST(0.0, LEAST(1.0,
|
|
349
|
+
( ((COALESCE(sc.total_shared_tags, 0::bigint)::float8 / 10.0) * POWER($5::float8, LEAST(GREATEST(COALESCE(sc.hop_distance, 1::int)::float8, 0.0), 3.0))) + (COALESCE(sc.physical_bonus, 0.0) * 0.1) ) *
|
|
350
|
+
EXP((-$6::float8) * LEAST(ABS(COALESCE(sc.timestamp::float8 - ast.anchor_ts::float8, 0.0)) / 3600000.0, 700000.0)) *
|
|
351
|
+
(1.0 - (bit_count(('x' || LPAD(COALESCE(sc.simhash, '0'), 16, '0'))::bit(64) # ('x' || LPAD(COALESCE(ast.anchor_sh, '0'), 16, '0'))::bit(64)) / 64.0))
|
|
352
|
+
))
|
|
353
|
+
) as gravity_score,
|
|
354
|
+
MAX(ast.anchor_id) as best_anchor_id,
|
|
355
|
+
MAX(sc.total_shared_tags) as shared_tags,
|
|
356
|
+
MIN(sc.hop_distance) as hop_distance
|
|
357
|
+
FROM scored_candidates sc
|
|
358
|
+
CROSS JOIN anchor_stats ast
|
|
359
|
+
GROUP BY sc.atom_id
|
|
360
|
+
HAVING MAX(
|
|
361
|
+
GREATEST(0.0, LEAST(1.0,
|
|
362
|
+
( ((COALESCE(sc.total_shared_tags, 0::bigint)::float8 / 10.0) * POWER($5::float8, LEAST(GREATEST(COALESCE(sc.hop_distance, 1::int)::float8, 0.0), 3.0))) + (COALESCE(sc.physical_bonus, 0.0) * 0.1) ) *
|
|
363
|
+
EXP((-$6::float8) * LEAST(ABS(COALESCE(sc.timestamp::float8 - ast.anchor_ts::float8, 0.0)) / 3600000.0, 700000.0)) *
|
|
364
|
+
(1.0 - (bit_count(('x' || LPAD(COALESCE(sc.simhash, '0'), 16, '0'))::bit(64) # ('x' || LPAD(COALESCE(ast.anchor_sh, '0'), 16, '0'))::bit(64)) / 64.0))
|
|
365
|
+
))
|
|
366
|
+
) > $2::float8
|
|
367
|
+
ORDER BY gravity_score DESC
|
|
368
|
+
LIMIT $3
|
|
369
|
+
)
|
|
370
|
+
-- 4. Final projection with hop distance
|
|
371
|
+
SELECT
|
|
372
|
+
w.atom_id,
|
|
373
|
+
w.shared_tags,
|
|
374
|
+
w.hop_distance,
|
|
375
|
+
a.timestamp,
|
|
376
|
+
a.simhash,
|
|
377
|
+
a.content,
|
|
378
|
+
a.source_path,
|
|
379
|
+
a.tags,
|
|
380
|
+
a.provenance,
|
|
381
|
+
a.type,
|
|
382
|
+
a.compound_id,
|
|
383
|
+
a.start_byte,
|
|
384
|
+
a.end_byte,
|
|
385
|
+
w.gravity_score,
|
|
386
|
+
w.best_anchor_id
|
|
387
|
+
FROM weighted_ids w
|
|
388
|
+
JOIN atoms a ON w.atom_id = a.id
|
|
389
|
+
`;
|
|
390
|
+
const params = [
|
|
391
|
+
cappedIds, // $1
|
|
392
|
+
threshold, // $2
|
|
393
|
+
safeLimit, // $3
|
|
394
|
+
this.WALK_RADIUS, // $4
|
|
395
|
+
this.DAMPING_FACTOR, // $5
|
|
396
|
+
this.TIME_DECAY_LAMBDA // $6
|
|
397
|
+
];
|
|
398
|
+
try {
|
|
399
|
+
// Debug logging for high-budget queries
|
|
400
|
+
if (anchorIds.length > 10 || safeLimit > 100) {
|
|
401
|
+
console.log(`[PhysicsWalker] SQL params: anchorIds=${cappedIds.length}, threshold=${threshold}, limit=${safeLimit}`);
|
|
402
|
+
console.log(`[PhysicsWalker] Anchor IDs: ${cappedIds.slice(0, 5).join(', ')}...`);
|
|
403
|
+
}
|
|
404
|
+
const result = await sqlWithTimeout(refinedQuery, params, QUERY_TIMEOUT_MS);
|
|
405
|
+
const elapsed = Date.now() - startTime;
|
|
406
|
+
if (elapsed > 5000) {
|
|
407
|
+
console.warn(`[PhysicsWalker] SQL Weighting took ${elapsed}ms for ${anchorIds.length} anchors`);
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
console.log(`[PhysicsWalker] SQL Weighting: ${result.rows?.length || 0} results in ${elapsed} ms`);
|
|
411
|
+
}
|
|
412
|
+
// Debug: Log why we might have 0 results
|
|
413
|
+
if (!result.rows || result.rows.length === 0) {
|
|
414
|
+
console.warn(`[PhysicsWalker] Zero results - checking potential causes:`);
|
|
415
|
+
console.warn(`[PhysicsWalker] - Anchor count: ${anchorIds.length}`);
|
|
416
|
+
console.warn(`[PhysicsWalker] - Threshold: ${threshold}`);
|
|
417
|
+
console.warn(`[PhysicsWalker] - Limit: ${safeLimit}`);
|
|
418
|
+
console.warn(`[PhysicsWalker] - Damping: ${this.DAMPING_FACTOR}, Decay: ${this.TIME_DECAY_LAMBDA}`);
|
|
419
|
+
}
|
|
420
|
+
if (!result.rows)
|
|
421
|
+
return [];
|
|
422
|
+
return result.rows.map((row) => ({
|
|
423
|
+
atomId: row.atom_id,
|
|
424
|
+
sharedTags: parseInt(row.shared_tags),
|
|
425
|
+
timestamp: parseFloat(row.timestamp),
|
|
426
|
+
simhash: this.safeParseHex(row.simhash),
|
|
427
|
+
content: row.content || '',
|
|
428
|
+
source: row.source_path || '',
|
|
429
|
+
tags: row.tags || [],
|
|
430
|
+
provenance: row.provenance || 'internal',
|
|
431
|
+
type: row.type || 'thought',
|
|
432
|
+
compoundId: row.compound_id || undefined,
|
|
433
|
+
startByte: (row.start_byte !== null && row.start_byte !== undefined) ? row.start_byte : undefined,
|
|
434
|
+
endByte: (row.end_byte !== null && row.end_byte !== undefined) ? row.end_byte : undefined,
|
|
435
|
+
gravityScore: parseFloat(row.gravity_score),
|
|
436
|
+
bestAnchorId: row.best_anchor_id,
|
|
437
|
+
hopDistance: row.hop_distance !== undefined ? parseInt(row.hop_distance) : undefined
|
|
438
|
+
}));
|
|
439
|
+
}
|
|
440
|
+
catch (e) {
|
|
441
|
+
console.error(`[PhysicsWalker] SQL Weighting failed after ${Date.now() - startTime} ms: `, e);
|
|
442
|
+
return [];
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
// --- Tag-Based Variant (for Virtual/Mol Anchors) ---
|
|
446
|
+
/**
|
|
447
|
+
* Applies physics weighting seeded from tags directly.
|
|
448
|
+
*/
|
|
449
|
+
async applyPhysicsWeightingFromTags(anchorResults, threshold = 0.1, config) {
|
|
450
|
+
// 1. Extract Tags
|
|
451
|
+
const anchorTags = Array.from(new Set(anchorResults.flatMap(r => (r.tags || []).filter(Boolean))));
|
|
452
|
+
if (anchorTags.length === 0)
|
|
453
|
+
return [];
|
|
454
|
+
const temperature = config?.temperature ?? 0.2;
|
|
455
|
+
const maxPerHop = config?.max_per_hop ?? 50;
|
|
456
|
+
// 2. Run simplified SQL query
|
|
457
|
+
// (Simulating an anchor at "Now" with null hash for distance? or just shared tag count?)
|
|
458
|
+
// For pure tag walk, we often lack a specific SimHash or Timestamp anchor.
|
|
459
|
+
// We'll use the "Mean Timestamp" of the anchor results if available.
|
|
460
|
+
// Simplification: Reuse the main walker but treat the resulting nodes
|
|
461
|
+
// as having a gravity score purely based on Shared Tags count for now,
|
|
462
|
+
// or reimplement a specific Tag-SQL query.
|
|
463
|
+
// Let's implement a specific customized query for Tag-Walking that
|
|
464
|
+
// incorporates the "Concept Gravity".
|
|
465
|
+
// For now, to keep this refactor focused and safe, we will use the OLD logic for Tag-Walking
|
|
466
|
+
// but optimized to not loop heavily.
|
|
467
|
+
// Actually, let's just fetch candidates by tags and score in JS for this edge case
|
|
468
|
+
// OR create a "Virtual Anchor" in the CTE.
|
|
469
|
+
// Fallback to simpler implementation for tags-only start:
|
|
470
|
+
const nodes = await this.getConnectedNodesFromTags(anchorTags, maxPerHop * 2);
|
|
471
|
+
// Map to PhysicsResult manually
|
|
472
|
+
return nodes.map(node => ({
|
|
473
|
+
result: {
|
|
474
|
+
id: node.atomId,
|
|
475
|
+
content: node.content || '',
|
|
476
|
+
source: node.source || '',
|
|
477
|
+
timestamp: node.timestamp,
|
|
478
|
+
buckets: [],
|
|
479
|
+
tags: node.tags || [],
|
|
480
|
+
epochs: '',
|
|
481
|
+
provenance: node.provenance || 'internal',
|
|
482
|
+
score: node.sharedTags * 0.1, // Crude score
|
|
483
|
+
molecular_signature: node.simhash.toString(16),
|
|
484
|
+
frequency: node.frequency || 1,
|
|
485
|
+
type: node.type || 'thought',
|
|
486
|
+
compound_id: node.compoundId,
|
|
487
|
+
start_byte: node.startByte,
|
|
488
|
+
end_byte: node.endByte,
|
|
489
|
+
temporal_state: {
|
|
490
|
+
first_seen: node.timestamp,
|
|
491
|
+
last_seen: node.timestamp,
|
|
492
|
+
occurrence_count: node.frequency || 1,
|
|
493
|
+
timestamps: [node.timestamp]
|
|
494
|
+
}
|
|
495
|
+
},
|
|
496
|
+
physics: {
|
|
497
|
+
gravity_score: node.sharedTags * 0.1,
|
|
498
|
+
time_drift: 'tag_walk',
|
|
499
|
+
is_recurring: false,
|
|
500
|
+
frequency: 1,
|
|
501
|
+
connection_type: 'tag_walk_neighbor',
|
|
502
|
+
source_anchor_id: 'virtual_tag_cloud',
|
|
503
|
+
link_reason: `via ${node.sharedTags} shared tag(s)`
|
|
504
|
+
}
|
|
505
|
+
})).sort((a, b) => b.physics.gravity_score - a.physics.gravity_score).slice(0, maxPerHop);
|
|
506
|
+
}
|
|
507
|
+
// Helper for tag-only retrieval (Legacy/Virtual)
|
|
508
|
+
async getConnectedNodesFromTags(anchorTags, limit = 50) {
|
|
509
|
+
// ... (Keep existing optimized CTE implementation for tags) ...
|
|
510
|
+
// Re-copying the implementation for completeness of the replacement
|
|
511
|
+
if (anchorTags.length === 0)
|
|
512
|
+
return [];
|
|
513
|
+
const startTime = Date.now();
|
|
514
|
+
const query = `
|
|
515
|
+
WITH anchor_tags AS(
|
|
516
|
+
SELECT DISTINCT unnest($1:: text[]) AS tag
|
|
517
|
+
)
|
|
518
|
+
SELECT
|
|
519
|
+
t.atom_id,
|
|
520
|
+
COUNT(DISTINCT t.tag) AS shared_tag_count,
|
|
521
|
+
a.timestamp,
|
|
522
|
+
a.simhash,
|
|
523
|
+
a.content,
|
|
524
|
+
a.source_path,
|
|
525
|
+
a.tags,
|
|
526
|
+
a.provenance,
|
|
527
|
+
a.type,
|
|
528
|
+
a.compound_id,
|
|
529
|
+
a.start_byte,
|
|
530
|
+
a.end_byte
|
|
531
|
+
FROM tags t
|
|
532
|
+
JOIN anchor_tags at ON t.tag = at.tag
|
|
533
|
+
JOIN atoms a ON t.atom_id = a.id
|
|
534
|
+
GROUP BY
|
|
535
|
+
t.atom_id, a.timestamp, a.simhash,
|
|
536
|
+
a.content, a.source_path, a.tags,
|
|
537
|
+
a.provenance, a.type,
|
|
538
|
+
a.compound_id, a.start_byte, a.end_byte
|
|
539
|
+
ORDER BY shared_tag_count DESC
|
|
540
|
+
LIMIT $2
|
|
541
|
+
`;
|
|
542
|
+
try {
|
|
543
|
+
const result = await sqlWithTimeout(query, [anchorTags, limit], QUERY_TIMEOUT_MS);
|
|
544
|
+
return result.rows.map((row) => ({
|
|
545
|
+
atomId: row.atom_id,
|
|
546
|
+
sharedTags: parseInt(row.shared_tag_count),
|
|
547
|
+
timestamp: parseFloat(row.timestamp),
|
|
548
|
+
simhash: this.safeParseHex(row.simhash),
|
|
549
|
+
content: row.content || '',
|
|
550
|
+
source: row.source_path || '',
|
|
551
|
+
tags: row.tags || [],
|
|
552
|
+
provenance: row.provenance || 'internal',
|
|
553
|
+
type: row.type || 'thought',
|
|
554
|
+
compoundId: row.compound_id || undefined,
|
|
555
|
+
startByte: row.start_byte,
|
|
556
|
+
endByte: row.end_byte,
|
|
557
|
+
gravityScore: 0 // Placeholder
|
|
558
|
+
}));
|
|
559
|
+
}
|
|
560
|
+
catch (e) {
|
|
561
|
+
console.error(`[PhysicsWalker] getConnectedNodesFromTags failed: `, e);
|
|
562
|
+
return [];
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* Format time drift helper
|
|
567
|
+
*/
|
|
568
|
+
formatTimeDrift(deltaMs) {
|
|
569
|
+
const hours = deltaMs / (1000 * 60 * 60);
|
|
570
|
+
if (hours < 1)
|
|
571
|
+
return `${Math.round(deltaMs / (1000 * 60))} minutes ago`;
|
|
572
|
+
if (hours < 24)
|
|
573
|
+
return `${Math.round(hours)} hours ago`;
|
|
574
|
+
const days = hours / 24;
|
|
575
|
+
return `${Math.round(days)} days ago`;
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Main Entry Point
|
|
579
|
+
* Applies physics weighting to search results.
|
|
580
|
+
*
|
|
581
|
+
* @param anchorResults - Search results to apply physics weighting to
|
|
582
|
+
* @param threshold - Gravity threshold (default 0.1, lower for high-budget)
|
|
583
|
+
* @param config - Search configuration
|
|
584
|
+
* @param maxChars - Optional budget hint for auto-tuning parameters
|
|
585
|
+
*/
|
|
586
|
+
async applyPhysicsWeighting(anchorResults, threshold = 0.1, config, maxChars // NEW: Budget hint for auto-tuning
|
|
587
|
+
) {
|
|
588
|
+
if (anchorResults.length === 0)
|
|
589
|
+
return [];
|
|
590
|
+
// Auto-tune parameters based on budget for high-recall queries
|
|
591
|
+
let tunedThreshold = threshold;
|
|
592
|
+
let tunedConfig = { ...config };
|
|
593
|
+
if (maxChars && maxChars > 50000) {
|
|
594
|
+
// High-budget query: lower threshold, more candidates
|
|
595
|
+
tunedThreshold = 0.05; // Lower threshold to catch more associations
|
|
596
|
+
tunedConfig.max_per_hop = Math.max(tunedConfig.max_per_hop || 50, 150);
|
|
597
|
+
tunedConfig.walk_radius = Math.max(tunedConfig.walk_radius || 1, 2);
|
|
598
|
+
console.log(`[PhysicsWalker] High-budget mode (${maxChars} chars): threshold=${tunedThreshold}, max_per_hop=${tunedConfig.max_per_hop}`);
|
|
599
|
+
}
|
|
600
|
+
// Pass everything to the SQL engine
|
|
601
|
+
return this.performRadialInflation(anchorResults.map(r => r.id), tunedConfig.walk_radius || 1, tunedConfig.max_per_hop || 50, tunedConfig.temperature || 0.2, tunedThreshold);
|
|
602
|
+
}
|
|
603
|
+
/**
|
|
604
|
+
* Legacy wrapper
|
|
605
|
+
*/
|
|
606
|
+
async applyPhysicsWeightingLegacy(anchorResults, threshold = 0.1) {
|
|
607
|
+
const results = await this.applyPhysicsWeighting(anchorResults, threshold);
|
|
608
|
+
return results.map(r => r.result);
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
//# sourceMappingURL=physics-tag-walker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-tag-walker.js","sourceRoot":"","sources":["../../../src/services/search/physics-tag-walker.ts"],"names":[],"mappings":"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"}
|