agentic-flow 2.0.3 → 2.0.4
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/.claude/agents/test-neural.md +14 -0
- package/.claude/settings.json +9 -133
- package/README.md +624 -1776
- package/dist/.tsbuildinfo +1 -1
- package/dist/billing/mcp/tools.js +0 -1
- package/dist/billing/mcp/tools.js.map +1 -1
- package/dist/cli/commands/hooks.d.ts.map +1 -1
- package/dist/cli/commands/hooks.js +4 -79
- package/dist/cli/commands/hooks.js.map +1 -1
- package/dist/cli-proxy.js +1 -89
- package/dist/cli-proxy.js.map +1 -1
- package/dist/core/agentdb-fast.js +3 -3
- package/dist/core/agentdb-fast.js.map +1 -1
- package/dist/core/agentdb-wrapper-enhanced.d.ts.map +1 -1
- package/dist/core/agentdb-wrapper-enhanced.js +4 -20
- package/dist/core/agentdb-wrapper-enhanced.js.map +1 -1
- package/dist/core/agentdb-wrapper.d.ts +2 -3
- package/dist/core/agentdb-wrapper.d.ts.map +1 -1
- package/dist/core/agentdb-wrapper.js +1 -15
- package/dist/core/agentdb-wrapper.js.map +1 -1
- package/dist/core/attention-native.d.ts +0 -4
- package/dist/core/attention-native.d.ts.map +1 -1
- package/dist/core/attention-native.js +2 -14
- package/dist/core/attention-native.js.map +1 -1
- package/dist/federation/SecurityManager.d.ts +2 -11
- package/dist/federation/SecurityManager.d.ts.map +1 -1
- package/dist/federation/SecurityManager.js +17 -50
- package/dist/federation/SecurityManager.js.map +1 -1
- package/dist/federation/integrations/supabase-adapter-debug.js +3 -3
- package/dist/federation/integrations/supabase-adapter-debug.js.map +1 -1
- package/dist/hooks/swarm-learning-optimizer.js +5 -5
- package/dist/hooks/swarm-learning-optimizer.js.map +1 -1
- package/dist/intelligence/IntelligenceStore.d.ts +26 -35
- package/dist/intelligence/IntelligenceStore.d.ts.map +1 -1
- package/dist/intelligence/IntelligenceStore.js +123 -308
- package/dist/intelligence/IntelligenceStore.js.map +1 -1
- package/dist/intelligence/RuVectorIntelligence.d.ts +1 -26
- package/dist/intelligence/RuVectorIntelligence.d.ts.map +1 -1
- package/dist/intelligence/RuVectorIntelligence.js +10 -49
- package/dist/intelligence/RuVectorIntelligence.js.map +1 -1
- package/dist/intelligence/agent-booster-enhanced.d.ts +0 -1
- package/dist/intelligence/agent-booster-enhanced.d.ts.map +1 -1
- package/dist/intelligence/agent-booster-enhanced.js +3 -24
- package/dist/intelligence/agent-booster-enhanced.js.map +1 -1
- package/dist/intelligence/index.d.ts +3 -29
- package/dist/intelligence/index.d.ts.map +1 -1
- package/dist/intelligence/index.js +3 -13
- package/dist/intelligence/index.js.map +1 -1
- package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
- package/dist/mcp/claudeFlowSdkServer.js +3 -9
- package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js +5 -5
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js.map +1 -1
- package/dist/mcp/fastmcp/tools/swarm/init.d.ts.map +1 -1
- package/dist/mcp/fastmcp/tools/swarm/init.js +7 -36
- package/dist/mcp/fastmcp/tools/swarm/init.js.map +1 -1
- package/dist/mcp/fastmcp/tools/swarm/spawn.d.ts.map +1 -1
- package/dist/mcp/fastmcp/tools/swarm/spawn.js +8 -47
- package/dist/mcp/fastmcp/tools/swarm/spawn.js.map +1 -1
- package/dist/mcp/tools/agent-booster-tools.d.ts +1 -1
- package/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -1
- package/dist/mcp/tools/agent-booster-tools.js +4 -10
- package/dist/mcp/tools/agent-booster-tools.js.map +1 -1
- package/dist/mcp/tools/sona-tools.d.ts.map +1 -1
- package/dist/mcp/tools/sona-tools.js +0 -6
- package/dist/mcp/tools/sona-tools.js.map +1 -1
- package/dist/optimizations/agent-booster-migration.d.ts.map +1 -1
- package/dist/optimizations/agent-booster-migration.js +2 -5
- package/dist/optimizations/agent-booster-migration.js.map +1 -1
- package/dist/proxy/anthropic-to-openrouter.js.map +1 -1
- package/dist/proxy/anthropic-to-requesty.js.map +1 -1
- package/dist/proxy/quic-proxy.d.ts +1 -0
- package/dist/proxy/quic-proxy.d.ts.map +1 -1
- package/dist/proxy/quic-proxy.js +2 -2
- package/dist/proxy/quic-proxy.js.map +1 -1
- package/dist/reasoningbank/AdvancedMemory.js +1 -1
- package/dist/reasoningbank/AdvancedMemory.js.map +1 -1
- package/dist/reasoningbank/HybridBackend.d.ts.map +1 -1
- package/dist/reasoningbank/HybridBackend.js +5 -2
- package/dist/reasoningbank/HybridBackend.js.map +1 -1
- package/dist/reasoningbank/backend-selector.d.ts +1 -11
- package/dist/reasoningbank/backend-selector.d.ts.map +1 -1
- package/dist/reasoningbank/backend-selector.js +5 -45
- package/dist/reasoningbank/backend-selector.js.map +1 -1
- package/dist/reasoningbank/core/consolidate.d.ts.map +1 -1
- package/dist/reasoningbank/core/consolidate.js +45 -113
- package/dist/reasoningbank/core/consolidate.js.map +1 -1
- package/dist/reasoningbank/index-new.d.ts +6 -1
- package/dist/reasoningbank/index-new.d.ts.map +1 -1
- package/dist/reasoningbank/index-new.js +6 -1
- package/dist/reasoningbank/index-new.js.map +1 -1
- package/dist/reasoningbank/index.d.ts +6 -2
- package/dist/reasoningbank/index.d.ts.map +1 -1
- package/dist/reasoningbank/index.js +6 -2
- package/dist/reasoningbank/index.js.map +1 -1
- package/dist/reasoningbank/utils/embeddings.d.ts +0 -1
- package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -1
- package/dist/reasoningbank/utils/embeddings.js +26 -53
- package/dist/reasoningbank/utils/embeddings.js.map +1 -1
- package/dist/router/index.d.ts +17 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +19 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/providers/onnx-local-optimized.d.ts +0 -2
- package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
- package/dist/router/providers/onnx-local-optimized.js +0 -10
- package/dist/router/providers/onnx-local-optimized.js.map +1 -1
- package/dist/router/providers/onnx-local.d.ts +0 -1
- package/dist/router/providers/onnx-local.d.ts.map +1 -1
- package/dist/router/providers/onnx-local.js +5 -22
- package/dist/router/providers/onnx-local.js.map +1 -1
- package/dist/services/embedding-service.js.map +1 -1
- package/dist/services/sona-agent-training.d.ts +0 -1
- package/dist/services/sona-agent-training.d.ts.map +1 -1
- package/dist/services/sona-agent-training.js.map +1 -1
- package/dist/services/sona-agentdb-integration.d.ts.map +1 -1
- package/dist/services/sona-agentdb-integration.js +6 -9
- package/dist/services/sona-agentdb-integration.js.map +1 -1
- package/dist/services/sona-service.d.ts.map +1 -1
- package/dist/services/sona-service.js +5 -6
- package/dist/services/sona-service.js.map +1 -1
- package/dist/utils/cli.d.ts +1 -1
- package/dist/utils/cli.d.ts.map +1 -1
- package/dist/utils/cli.js +0 -21
- package/dist/utils/cli.js.map +1 -1
- package/package.json +7 -19
- package/scripts/postinstall.js +4 -45
- package/.claude/agents/.claude-flow/metrics/agent-metrics.json +0 -1
- package/.claude/agents/.claude-flow/metrics/performance.json +0 -87
- package/.claude/agents/.claude-flow/metrics/task-metrics.json +0 -10
- package/.claude/skills/.claude-flow/metrics/agent-metrics.json +0 -1
- package/.claude/skills/.claude-flow/metrics/performance.json +0 -87
- package/.claude/skills/.claude-flow/metrics/task-metrics.json +0 -10
- package/.claude/skills/agentic-flow-quickstart/skill.md +0 -69
- package/.claude/skills/hooks-automation/skill.md +0 -155
- package/.claude/skills/memory-patterns/skill.md +0 -110
- package/.claude/skills/skill-builder/.claude-flow/metrics/agent-metrics.json +0 -1
- package/.claude/skills/skill-builder/.claude-flow/metrics/performance.json +0 -87
- package/.claude/skills/skill-builder/.claude-flow/metrics/task-metrics.json +0 -10
- package/.claude/skills/sparc-methodology/skill.md +0 -137
- package/.claude/skills/swarm-coordination/skill.md +0 -94
- package/.claude/skills/worker-benchmarks/skill.md +0 -135
- package/.claude/skills/worker-integration/skill.md +0 -154
- package/.claude/statusline.mjs +0 -109
- package/.claude/statusline.sh +0 -71
- package/dist/agentdb/benchmarks/comprehensive-benchmark.js +0 -664
- package/dist/agentdb/benchmarks/frontier-benchmark.js +0 -419
- package/dist/agentdb/benchmarks/reflexion-benchmark.js +0 -370
- package/dist/agentdb/cli/agentdb-cli.js +0 -717
- package/dist/agentdb/controllers/CausalMemoryGraph.js +0 -322
- package/dist/agentdb/controllers/CausalRecall.js +0 -281
- package/dist/agentdb/controllers/EmbeddingService.d.ts +0 -37
- package/dist/agentdb/controllers/EmbeddingService.d.ts.map +0 -1
- package/dist/agentdb/controllers/EmbeddingService.js +0 -119
- package/dist/agentdb/controllers/EmbeddingService.js.map +0 -1
- package/dist/agentdb/controllers/ExplainableRecall.js +0 -387
- package/dist/agentdb/controllers/NightlyLearner.js +0 -382
- package/dist/agentdb/controllers/ReflexionMemory.js +0 -239
- package/dist/agentdb/controllers/SkillLibrary.js +0 -276
- package/dist/agentdb/controllers/frontier-index.js +0 -9
- package/dist/agentdb/controllers/index.js +0 -8
- package/dist/agentdb/optimizations/BatchOperations.js +0 -198
- package/dist/agentdb/optimizations/QueryOptimizer.js +0 -225
- package/dist/agentdb/optimizations/index.js +0 -7
- package/dist/agentdb/tests/frontier-features.test.js +0 -665
- package/dist/benchmarks/embeddings-benchmark.d.ts +0 -38
- package/dist/benchmarks/embeddings-benchmark.d.ts.map +0 -1
- package/dist/benchmarks/embeddings-benchmark.js +0 -282
- package/dist/benchmarks/embeddings-benchmark.js.map +0 -1
- package/dist/cli/commands/embeddings.d.ts +0 -12
- package/dist/cli/commands/embeddings.d.ts.map +0 -1
- package/dist/cli/commands/embeddings.js +0 -386
- package/dist/cli/commands/embeddings.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -8
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -514
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/workers.d.ts +0 -9
- package/dist/cli/commands/workers.d.ts.map +0 -1
- package/dist/cli/commands/workers.js +0 -991
- package/dist/cli/commands/workers.js.map +0 -1
- package/dist/cli/skills-manager.js +0 -1297
- package/dist/cli/update-message.js +0 -175
- package/dist/embeddings/index.d.ts +0 -17
- package/dist/embeddings/index.d.ts.map +0 -1
- package/dist/embeddings/index.js +0 -17
- package/dist/embeddings/index.js.map +0 -1
- package/dist/embeddings/neural-substrate.d.ts +0 -206
- package/dist/embeddings/neural-substrate.d.ts.map +0 -1
- package/dist/embeddings/neural-substrate.js +0 -629
- package/dist/embeddings/neural-substrate.js.map +0 -1
- package/dist/embeddings/optimized-embedder.d.ts +0 -103
- package/dist/embeddings/optimized-embedder.d.ts.map +0 -1
- package/dist/embeddings/optimized-embedder.js +0 -730
- package/dist/embeddings/optimized-embedder.js.map +0 -1
- package/dist/examples/embedding-geometry.d.ts +0 -105
- package/dist/examples/embedding-geometry.d.ts.map +0 -1
- package/dist/examples/embedding-geometry.js +0 -528
- package/dist/examples/embedding-geometry.js.map +0 -1
- package/dist/memory/SharedMemoryPool.d.ts +0 -129
- package/dist/memory/SharedMemoryPool.d.ts.map +0 -1
- package/dist/memory/SharedMemoryPool.js +0 -243
- package/dist/memory/SharedMemoryPool.js.map +0 -1
- package/dist/memory/index.d.ts +0 -8
- package/dist/memory/index.d.ts.map +0 -1
- package/dist/memory/index.js +0 -7
- package/dist/memory/index.js.map +0 -1
- package/dist/proxy/http3-proxy-old.js +0 -331
- package/dist/proxy/proxy/anthropic-to-gemini.js +0 -439
- package/dist/proxy/utils/logger.js +0 -59
- package/dist/reasoningbank/agentdb-adapter.js +0 -125
- package/dist/reasoningbank/core/database.js +0 -250
- package/dist/reasoningbank/core/memory-engine.js +0 -335
- package/dist/swarm/ipfs-swarm.d.ts +0 -265
- package/dist/swarm/ipfs-swarm.d.ts.map +0 -1
- package/dist/swarm/ipfs-swarm.js +0 -508
- package/dist/swarm/ipfs-swarm.js.map +0 -1
- package/dist/swarm/p2p-free-swarm.d.ts +0 -344
- package/dist/swarm/p2p-free-swarm.d.ts.map +0 -1
- package/dist/swarm/p2p-free-swarm.js +0 -603
- package/dist/swarm/p2p-free-swarm.js.map +0 -1
- package/dist/swarm/real-p2p-swarm.d.ts +0 -183
- package/dist/swarm/real-p2p-swarm.d.ts.map +0 -1
- package/dist/swarm/real-p2p-swarm.js +0 -469
- package/dist/swarm/real-p2p-swarm.js.map +0 -1
- package/dist/utils/adaptive-pool-sizing.js +0 -414
- package/dist/utils/agentdbCommands.js +0 -175
- package/dist/utils/circular-rate-limiter.js +0 -391
- package/dist/utils/dynamic-compression.js +0 -298
- package/dist/utils/http2-multiplexing.js +0 -319
- package/dist/utils/index.d.ts +0 -6
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -6
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/lazy-auth.js +0 -311
- package/dist/utils/model-cache.d.ts +0 -61
- package/dist/utils/model-cache.d.ts.map +0 -1
- package/dist/utils/model-cache.js +0 -176
- package/dist/utils/model-cache.js.map +0 -1
- package/dist/utils/server-push.js +0 -251
- package/dist/utils/suppress-warnings.d.ts +0 -19
- package/dist/utils/suppress-warnings.d.ts.map +0 -1
- package/dist/utils/suppress-warnings.js +0 -59
- package/dist/utils/suppress-warnings.js.map +0 -1
- package/dist/utils/zero-copy-buffer.js +0 -286
- package/dist/workers/consolidated-phases.d.ts +0 -40
- package/dist/workers/consolidated-phases.d.ts.map +0 -1
- package/dist/workers/consolidated-phases.js +0 -497
- package/dist/workers/consolidated-phases.js.map +0 -1
- package/dist/workers/custom-worker-config.d.ts +0 -133
- package/dist/workers/custom-worker-config.d.ts.map +0 -1
- package/dist/workers/custom-worker-config.js +0 -215
- package/dist/workers/custom-worker-config.js.map +0 -1
- package/dist/workers/custom-worker-factory.d.ts +0 -89
- package/dist/workers/custom-worker-factory.d.ts.map +0 -1
- package/dist/workers/custom-worker-factory.js +0 -404
- package/dist/workers/custom-worker-factory.js.map +0 -1
- package/dist/workers/dispatch-service.d.ts +0 -123
- package/dist/workers/dispatch-service.d.ts.map +0 -1
- package/dist/workers/dispatch-service.js +0 -1024
- package/dist/workers/dispatch-service.js.map +0 -1
- package/dist/workers/hooks-integration.d.ts +0 -79
- package/dist/workers/hooks-integration.d.ts.map +0 -1
- package/dist/workers/hooks-integration.js +0 -286
- package/dist/workers/hooks-integration.js.map +0 -1
- package/dist/workers/index.d.ts +0 -42
- package/dist/workers/index.d.ts.map +0 -1
- package/dist/workers/index.js +0 -52
- package/dist/workers/index.js.map +0 -1
- package/dist/workers/mcp-tools.d.ts +0 -56
- package/dist/workers/mcp-tools.d.ts.map +0 -1
- package/dist/workers/mcp-tools.js +0 -359
- package/dist/workers/mcp-tools.js.map +0 -1
- package/dist/workers/phase-executors.d.ts +0 -22
- package/dist/workers/phase-executors.d.ts.map +0 -1
- package/dist/workers/phase-executors.js +0 -445
- package/dist/workers/phase-executors.js.map +0 -1
- package/dist/workers/resource-governor.d.ts +0 -75
- package/dist/workers/resource-governor.d.ts.map +0 -1
- package/dist/workers/resource-governor.js +0 -187
- package/dist/workers/resource-governor.js.map +0 -1
- package/dist/workers/ruvector-integration.d.ts +0 -163
- package/dist/workers/ruvector-integration.d.ts.map +0 -1
- package/dist/workers/ruvector-integration.js +0 -543
- package/dist/workers/ruvector-integration.js.map +0 -1
- package/dist/workers/ruvector-native-integration.d.ts +0 -91
- package/dist/workers/ruvector-native-integration.d.ts.map +0 -1
- package/dist/workers/ruvector-native-integration.js +0 -254
- package/dist/workers/ruvector-native-integration.js.map +0 -1
- package/dist/workers/trigger-detector.d.ts +0 -68
- package/dist/workers/trigger-detector.d.ts.map +0 -1
- package/dist/workers/trigger-detector.js +0 -281
- package/dist/workers/trigger-detector.js.map +0 -1
- package/dist/workers/types.d.ts +0 -145
- package/dist/workers/types.d.ts.map +0 -1
- package/dist/workers/types.js +0 -6
- package/dist/workers/types.js.map +0 -1
- package/dist/workers/worker-agent-integration.d.ts +0 -140
- package/dist/workers/worker-agent-integration.d.ts.map +0 -1
- package/dist/workers/worker-agent-integration.js +0 -471
- package/dist/workers/worker-agent-integration.js.map +0 -1
- package/dist/workers/worker-benchmarks.d.ts +0 -88
- package/dist/workers/worker-benchmarks.d.ts.map +0 -1
- package/dist/workers/worker-benchmarks.js +0 -452
- package/dist/workers/worker-benchmarks.js.map +0 -1
- package/dist/workers/worker-registry.d.ts +0 -85
- package/dist/workers/worker-registry.d.ts.map +0 -1
- package/dist/workers/worker-registry.js +0 -547
- package/dist/workers/worker-registry.js.map +0 -1
- package/docs/.claude-flow/metrics/agent-metrics.json +0 -1
- package/docs/.claude-flow/metrics/performance.json +0 -87
- package/docs/.claude-flow/metrics/task-metrics.json +0 -10
- package/docs/embeddings/EMBEDDING_GEOMETRY.md +0 -935
- /package/.claude/agents/analysis/{analyze-code-quality.md → code-review/analyze-code-quality.md} +0 -0
- /package/.claude/agents/architecture/{arch-system-design.md → system-design/arch-system-design.md} +0 -0
- /package/.claude/agents/data/{data-ml-model.md → ml/data-ml-model.md} +0 -0
- /package/.claude/agents/development/{dev-backend-api.md → backend/dev-backend-api.md} +0 -0
- /package/.claude/agents/devops/{ops-cicd-github.md → ci-cd/ops-cicd-github.md} +0 -0
- /package/.claude/agents/documentation/{docs-api-openapi.md → api-docs/docs-api-openapi.md} +0 -0
- /package/.claude/agents/specialized/{spec-mobile-react-native.md → mobile/spec-mobile-react-native.md} +0 -0
- /package/.claude/agents/testing/{tdd-london-swarm.md → unit/tdd-london-swarm.md} +0 -0
- /package/.claude/agents/testing/{production-validator.md → validation/production-validator.md} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quic-proxy.js","sourceRoot":"","sources":["../../src/proxy/quic-proxy.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,yDAAyD;AAGzD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAc,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAoB1E,MAAM,OAAO,gBAAiB,SAAQ,0BAA0B;IACtD,UAAU,CAAc;IACxB,QAAQ,CAAsB;IAC9B,SAAS,CAA4B;IACrC,WAAW,CAAU;IACrB,eAAe,CAAU;IAEjC,YAAY,MAAuB;QACjC,KAAK,CAAC;YACJ,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACpE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC;QAEtD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAClD,OAAO,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,GAAG,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,UAAsB;QACjD,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YAEtE,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;YAC7C,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAEnC,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAE5D,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAE/D,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBAChD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,0DAA0D;QAC1D,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,WAAW,CAAC,GAAW,EAAE,OAAoB;QAC3D,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEjD,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC9B,SAAS,EAAE,iBAAiB;YAC5B,GAAG;YACH,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,IAAI,iBAAiB,KAAK,MAAM,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,GAAW,EAAE,OAAoB;QAC7D,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAClD,MAAM,CAAC,QAAQ,EACf,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAC7B,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;gBACpC,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,GAAG;aACJ,CAAC,CAAC;YAEH,kBAAkB;YAClB,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,YAAY,OAAO;oBACtD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAE,OAAO,CAAC,OAAe,CAAC,OAAO,EAAE,CAAC;oBAChD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAEpC,KAAK,MAAM,KAAK,IAAI,aAAwC,EAAE,CAAC;oBAC7D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,6BAA6B;YAC7B,IAAI,IAA4B,CAAC;YACjC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrC,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChD,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,YAAY,UAAU,EAAE,CAAC;oBAC9C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAChD,UAAU,CAAC,EAAE,EACb,OAAO,CAAC,MAAM,IAAI,KAAK,EACvB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAC/B,OAAO,EACP,IAAI,CACL,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBACpC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM;aAC5B,CAAC,CAAC;YAEH,4BAA4B;YAC5B,MAAM,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7D,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE;gBAChC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;aACvC,CAAQ,CAAC;QAEZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAEpD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;gBACvD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,GAAW,EAAE,OAAoB;QAC9D,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,GAAG,EAAE,OAAO,CAAQ,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;gBACL,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE;gBACjC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;aACtC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAuB;IACrD,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE3C,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;QAChC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM;QACrC,WAAW,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,MAAM,CAAC;QACnF,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;KAChD,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iCAAiC;AACjC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAExD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC;QAC5B,gBAAgB;QAChB,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACvD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;QACzE,SAAS,EAAG,OAAO,CAAC,GAAG,CAAC,SAAuC,IAAI,MAAM;QACzE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,MAAM;QAC3D,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;YAC/C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,WAAW;YAChD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;YACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;SACnC;KACF,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElB,oBAAoB;IACpB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["// QUIC-enabled Proxy for Anthropic API\n// Optional QUIC transport with automatic HTTP/2 fallback\n\nimport express, { Request, Response as ExpressResponse, NextFunction } from 'express';\nimport { QuicClient, QuicConnectionPool, QuicConfig } from '../transport/quic.js';\nimport { logger } from '../utils/logger.js';\nimport { AnthropicToOpenRouterProxy } from './anthropic-to-openrouter.js';\n\nexport interface QuicProxyConfig {\n // Base proxy config\n openrouterApiKey: string;\n openrouterBaseUrl?: string;\n defaultModel?: string;\n\n // Transport selection\n transport?: 'quic' | 'http2' | 'auto';\n enableQuic?: boolean;\n\n // QUIC configuration\n quic?: QuicConfig;\n\n // Fallback behavior\n fallbackToHttp2?: boolean;\n fallbackTimeout?: number;\n}\n\nexport class QuicEnabledProxy extends AnthropicToOpenRouterProxy {\n private quicClient?: QuicClient;\n private quicPool?: QuicConnectionPool;\n private transport: 'quic' | 'http2' | 'auto';\n private quicEnabled: boolean;\n private fallbackToHttp2: boolean;\n\n constructor(config: QuicProxyConfig) {\n super({\n openrouterApiKey: config.openrouterApiKey,\n openrouterBaseUrl: config.openrouterBaseUrl,\n defaultModel: config.defaultModel\n });\n\n this.transport = config.transport || 'auto';\n this.quicEnabled = config.enableQuic ?? this.checkQuicFeatureFlag();\n this.fallbackToHttp2 = config.fallbackToHttp2 ?? true;\n\n if (this.quicEnabled) {\n this.initializeQuic(config.quic || {});\n }\n }\n\n /**\n * Check if QUIC is enabled via environment variable\n */\n private checkQuicFeatureFlag(): boolean {\n const flag = process.env.AGENTIC_FLOW_ENABLE_QUIC;\n return flag === 'true' || flag === '1';\n }\n\n /**\n * Initialize QUIC client and connection pool\n */\n private async initializeQuic(quicConfig: QuicConfig): Promise<void> {\n try {\n logger.info('Initializing QUIC transport...', { config: quicConfig });\n\n this.quicClient = new QuicClient(quicConfig);\n await this.quicClient.initialize();\n\n this.quicPool = new QuicConnectionPool(this.quicClient, 20);\n\n logger.info('QUIC transport initialized successfully');\n } catch (error) {\n logger.error('Failed to initialize QUIC transport', { error });\n\n if (this.fallbackToHttp2) {\n logger.warn('Falling back to HTTP/2 transport');\n this.quicEnabled = false;\n } else {\n throw error;\n }\n }\n }\n\n /**\n * Select transport protocol based on configuration and availability\n */\n private selectTransport(): 'quic' | 'http2' {\n if (this.transport === 'quic' && this.quicEnabled) {\n return 'quic';\n }\n\n if (this.transport === 'http2') {\n return 'http2';\n }\n\n // Auto mode: prefer QUIC if available, fallback to HTTP/2\n if (this.transport === 'auto') {\n return this.quicEnabled ? 'quic' : 'http2';\n }\n\n return 'http2';\n }\n\n /**\n * Send request using selected transport\n */\n protected async sendRequest(url: string, options: RequestInit): Promise<Response> {\n const selectedTransport = this.selectTransport();\n\n logger.debug('Sending request', {\n transport: selectedTransport,\n url,\n method: options.method\n });\n\n if (selectedTransport === 'quic') {\n return this.sendQuicRequest(url, options);\n } else {\n return this.sendHttp2Request(url, options);\n }\n }\n\n /**\n * Send request over QUIC\n */\n private async sendQuicRequest(url: string, options: RequestInit): Promise<Response> {\n if (!this.quicClient || !this.quicPool) {\n throw new Error('QUIC client not initialized');\n }\n\n try {\n const urlObj = new URL(url);\n const connection = await this.quicPool.getConnection(\n urlObj.hostname,\n parseInt(urlObj.port) || 443\n );\n\n logger.debug('Using QUIC connection', {\n connectionId: connection.id,\n url\n });\n\n // Prepare headers\n const headers: Record<string, string> = {};\n if (options.headers) {\n const headerEntries = options.headers instanceof Headers\n ? Array.from((options.headers as any).entries())\n : Object.entries(options.headers);\n\n for (const entry of headerEntries as Array<[string, string]>) {\n headers[entry[0]] = entry[1];\n }\n }\n\n // Convert body to Uint8Array\n let body: Uint8Array | undefined;\n if (options.body) {\n if (typeof options.body === 'string') {\n body = new TextEncoder().encode(options.body);\n } else if (options.body instanceof Uint8Array) {\n body = options.body;\n } else {\n body = new TextEncoder().encode(JSON.stringify(options.body));\n }\n }\n\n // Send HTTP/3 request over QUIC\n const response = await this.quicClient.sendRequest(\n connection.id,\n options.method || 'GET',\n urlObj.pathname + urlObj.search,\n headers,\n body\n );\n\n logger.info('QUIC request completed', {\n status: response.status,\n bytes: response.body.length\n });\n\n // Convert to fetch Response\n const responseText = new TextDecoder().decode(response.body);\n return new Response(responseText, {\n status: response.status,\n headers: new Headers(response.headers)\n }) as any;\n\n } catch (error) {\n logger.error('QUIC request failed', { error, url });\n\n if (this.fallbackToHttp2) {\n logger.warn('Falling back to HTTP/2 for this request');\n return this.sendHttp2Request(url, options);\n }\n\n throw error;\n }\n }\n\n /**\n * Send request over HTTP/2 (standard fetch)\n */\n private async sendHttp2Request(url: string, options: RequestInit): Promise<Response> {\n logger.debug('Using HTTP/2 transport', { url });\n return fetch(url, options) as any;\n }\n\n /**\n * Get transport statistics\n */\n getTransportStats(): any {\n if (this.quicClient) {\n return {\n transport: this.selectTransport(),\n quicEnabled: this.quicEnabled,\n quicStats: this.quicClient.getStats()\n };\n }\n\n return {\n transport: 'http2',\n quicEnabled: false\n };\n }\n\n /**\n * Shutdown and cleanup\n */\n async shutdown(): Promise<void> {\n if (this.quicPool) {\n await this.quicPool.clear();\n }\n\n if (this.quicClient) {\n await this.quicClient.shutdown();\n }\n\n logger.info('QUIC proxy shutdown complete');\n }\n}\n\n/**\n * Create QUIC-enabled proxy with configuration\n */\nexport function createQuicProxy(config: QuicProxyConfig): QuicEnabledProxy {\n const proxy = new QuicEnabledProxy(config);\n\n logger.info('QUIC proxy created', {\n transport: config.transport || 'auto',\n quicEnabled: config.enableQuic ?? (process.env.AGENTIC_FLOW_ENABLE_QUIC === 'true'),\n fallbackEnabled: config.fallbackToHttp2 ?? true\n });\n\n return proxy;\n}\n\n// CLI entry point for QUIC proxy\nif (import.meta.url === `file://${process.argv[1]}`) {\n const port = parseInt(process.env.PORT || '3000');\n const openrouterApiKey = process.env.OPENROUTER_API_KEY;\n\n if (!openrouterApiKey) {\n console.error('❌ Error: OPENROUTER_API_KEY environment variable required');\n process.exit(1);\n }\n\n const proxy = createQuicProxy({\n openrouterApiKey,\n openrouterBaseUrl: process.env.ANTHROPIC_PROXY_BASE_URL,\n defaultModel: process.env.COMPLETION_MODEL || process.env.REASONING_MODEL,\n transport: (process.env.TRANSPORT as 'quic' | 'http2' | 'auto') || 'auto',\n enableQuic: process.env.AGENTIC_FLOW_ENABLE_QUIC === 'true',\n quic: {\n port: parseInt(process.env.QUIC_PORT || '4433'),\n serverHost: process.env.QUIC_HOST || 'localhost',\n certPath: process.env.QUIC_CERT_PATH,\n keyPath: process.env.QUIC_KEY_PATH\n }\n });\n\n proxy.start(port);\n\n // Graceful shutdown\n process.on('SIGTERM', async () => {\n logger.info('Received SIGTERM, shutting down gracefully...');\n await proxy.shutdown();\n process.exit(0);\n });\n\n process.on('SIGINT', async () => {\n logger.info('Received SIGINT, shutting down gracefully...');\n await proxy.shutdown();\n process.exit(0);\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"quic-proxy.js","sourceRoot":"","sources":["../../src/proxy/quic-proxy.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,yDAAyD;AAGzD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAc,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAoB1E,MAAM,OAAO,gBAAiB,SAAQ,0BAA0B;IACtD,UAAU,CAAc;IACxB,QAAQ,CAAsB;IAC9B,SAAS,CAA4B;IACrC,WAAW,CAAU;IACrB,eAAe,CAAU;IAEjC,YAAY,MAAuB;QACjC,KAAK,CAAC;YACJ,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACpE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC;QAEtD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAClD,OAAO,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,GAAG,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,UAAsB;QACjD,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YAEtE,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;YAC7C,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAEnC,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAE5D,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAE/D,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBAChD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,0DAA0D;QAC1D,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,WAAW,CAAC,GAAW,EAAE,OAAoB;QAC3D,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEjD,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC9B,SAAS,EAAE,iBAAiB;YAC5B,GAAG;YACH,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,IAAI,iBAAiB,KAAK,MAAM,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,GAAW,EAAE,OAAoB;QAC7D,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAClD,MAAM,CAAC,QAAQ,EACf,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAC7B,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;gBACpC,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,GAAG;aACJ,CAAC,CAAC;YAEH,kBAAkB;YAClB,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,YAAY,OAAO;oBACtD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACvC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAEpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC;oBACzC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACvB,CAAC;YACH,CAAC;YAED,6BAA6B;YAC7B,IAAI,IAA4B,CAAC;YACjC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrC,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChD,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,YAAY,UAAU,EAAE,CAAC;oBAC9C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAChD,UAAU,CAAC,EAAE,EACb,OAAO,CAAC,MAAM,IAAI,KAAK,EACvB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAC/B,OAAO,EACP,IAAI,CACL,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBACpC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM;aAC5B,CAAC,CAAC;YAEH,4BAA4B;YAC5B,MAAM,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7D,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE;gBAChC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;aACvC,CAAQ,CAAC;QAEZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAEpD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;gBACvD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,GAAW,EAAE,OAAoB;QAC9D,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,GAAG,EAAE,OAAO,CAAQ,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;gBACL,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE;gBACjC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;aACtC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAuB;IACrD,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE3C,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;QAChC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM;QACrC,WAAW,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,MAAM,CAAC;QACnF,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;KAChD,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iCAAiC;AACjC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAExD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC;QAC5B,gBAAgB;QAChB,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACvD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;QACzE,SAAS,EAAG,OAAO,CAAC,GAAG,CAAC,SAAuC,IAAI,MAAM;QACzE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,MAAM;QAC3D,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;YAC/C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,WAAW;YAChD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;YACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;SACnC;KACF,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElB,oBAAoB;IACpB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["// QUIC-enabled Proxy for Anthropic API\n// Optional QUIC transport with automatic HTTP/2 fallback\n\nimport express, { Request, Response, NextFunction } from 'express';\nimport { QuicClient, QuicConnectionPool, QuicConfig } from '../transport/quic.js';\nimport { logger } from '../utils/logger.js';\nimport { AnthropicToOpenRouterProxy } from './anthropic-to-openrouter.js';\n\nexport interface QuicProxyConfig {\n // Base proxy config\n openrouterApiKey: string;\n openrouterBaseUrl?: string;\n defaultModel?: string;\n\n // Transport selection\n transport?: 'quic' | 'http2' | 'auto';\n enableQuic?: boolean;\n\n // QUIC configuration\n quic?: QuicConfig;\n\n // Fallback behavior\n fallbackToHttp2?: boolean;\n fallbackTimeout?: number;\n}\n\nexport class QuicEnabledProxy extends AnthropicToOpenRouterProxy {\n private quicClient?: QuicClient;\n private quicPool?: QuicConnectionPool;\n private transport: 'quic' | 'http2' | 'auto';\n private quicEnabled: boolean;\n private fallbackToHttp2: boolean;\n\n constructor(config: QuicProxyConfig) {\n super({\n openrouterApiKey: config.openrouterApiKey,\n openrouterBaseUrl: config.openrouterBaseUrl,\n defaultModel: config.defaultModel\n });\n\n this.transport = config.transport || 'auto';\n this.quicEnabled = config.enableQuic ?? this.checkQuicFeatureFlag();\n this.fallbackToHttp2 = config.fallbackToHttp2 ?? true;\n\n if (this.quicEnabled) {\n this.initializeQuic(config.quic || {});\n }\n }\n\n /**\n * Check if QUIC is enabled via environment variable\n */\n private checkQuicFeatureFlag(): boolean {\n const flag = process.env.AGENTIC_FLOW_ENABLE_QUIC;\n return flag === 'true' || flag === '1';\n }\n\n /**\n * Initialize QUIC client and connection pool\n */\n private async initializeQuic(quicConfig: QuicConfig): Promise<void> {\n try {\n logger.info('Initializing QUIC transport...', { config: quicConfig });\n\n this.quicClient = new QuicClient(quicConfig);\n await this.quicClient.initialize();\n\n this.quicPool = new QuicConnectionPool(this.quicClient, 20);\n\n logger.info('QUIC transport initialized successfully');\n } catch (error) {\n logger.error('Failed to initialize QUIC transport', { error });\n\n if (this.fallbackToHttp2) {\n logger.warn('Falling back to HTTP/2 transport');\n this.quicEnabled = false;\n } else {\n throw error;\n }\n }\n }\n\n /**\n * Select transport protocol based on configuration and availability\n */\n private selectTransport(): 'quic' | 'http2' {\n if (this.transport === 'quic' && this.quicEnabled) {\n return 'quic';\n }\n\n if (this.transport === 'http2') {\n return 'http2';\n }\n\n // Auto mode: prefer QUIC if available, fallback to HTTP/2\n if (this.transport === 'auto') {\n return this.quicEnabled ? 'quic' : 'http2';\n }\n\n return 'http2';\n }\n\n /**\n * Send request using selected transport\n */\n protected async sendRequest(url: string, options: RequestInit): Promise<Response> {\n const selectedTransport = this.selectTransport();\n\n logger.debug('Sending request', {\n transport: selectedTransport,\n url,\n method: options.method\n });\n\n if (selectedTransport === 'quic') {\n return this.sendQuicRequest(url, options);\n } else {\n return this.sendHttp2Request(url, options);\n }\n }\n\n /**\n * Send request over QUIC\n */\n private async sendQuicRequest(url: string, options: RequestInit): Promise<Response> {\n if (!this.quicClient || !this.quicPool) {\n throw new Error('QUIC client not initialized');\n }\n\n try {\n const urlObj = new URL(url);\n const connection = await this.quicPool.getConnection(\n urlObj.hostname,\n parseInt(urlObj.port) || 443\n );\n\n logger.debug('Using QUIC connection', {\n connectionId: connection.id,\n url\n });\n\n // Prepare headers\n const headers: Record<string, string> = {};\n if (options.headers) {\n const headerEntries = options.headers instanceof Headers\n ? Array.from(options.headers.entries())\n : Object.entries(options.headers);\n\n for (const [key, value] of headerEntries) {\n headers[key] = value;\n }\n }\n\n // Convert body to Uint8Array\n let body: Uint8Array | undefined;\n if (options.body) {\n if (typeof options.body === 'string') {\n body = new TextEncoder().encode(options.body);\n } else if (options.body instanceof Uint8Array) {\n body = options.body;\n } else {\n body = new TextEncoder().encode(JSON.stringify(options.body));\n }\n }\n\n // Send HTTP/3 request over QUIC\n const response = await this.quicClient.sendRequest(\n connection.id,\n options.method || 'GET',\n urlObj.pathname + urlObj.search,\n headers,\n body\n );\n\n logger.info('QUIC request completed', {\n status: response.status,\n bytes: response.body.length\n });\n\n // Convert to fetch Response\n const responseText = new TextDecoder().decode(response.body);\n return new Response(responseText, {\n status: response.status,\n headers: new Headers(response.headers)\n }) as any;\n\n } catch (error) {\n logger.error('QUIC request failed', { error, url });\n\n if (this.fallbackToHttp2) {\n logger.warn('Falling back to HTTP/2 for this request');\n return this.sendHttp2Request(url, options);\n }\n\n throw error;\n }\n }\n\n /**\n * Send request over HTTP/2 (standard fetch)\n */\n private async sendHttp2Request(url: string, options: RequestInit): Promise<Response> {\n logger.debug('Using HTTP/2 transport', { url });\n return fetch(url, options) as any;\n }\n\n /**\n * Get transport statistics\n */\n getTransportStats(): any {\n if (this.quicClient) {\n return {\n transport: this.selectTransport(),\n quicEnabled: this.quicEnabled,\n quicStats: this.quicClient.getStats()\n };\n }\n\n return {\n transport: 'http2',\n quicEnabled: false\n };\n }\n\n /**\n * Shutdown and cleanup\n */\n async shutdown(): Promise<void> {\n if (this.quicPool) {\n await this.quicPool.clear();\n }\n\n if (this.quicClient) {\n await this.quicClient.shutdown();\n }\n\n logger.info('QUIC proxy shutdown complete');\n }\n}\n\n/**\n * Create QUIC-enabled proxy with configuration\n */\nexport function createQuicProxy(config: QuicProxyConfig): QuicEnabledProxy {\n const proxy = new QuicEnabledProxy(config);\n\n logger.info('QUIC proxy created', {\n transport: config.transport || 'auto',\n quicEnabled: config.enableQuic ?? (process.env.AGENTIC_FLOW_ENABLE_QUIC === 'true'),\n fallbackEnabled: config.fallbackToHttp2 ?? true\n });\n\n return proxy;\n}\n\n// CLI entry point for QUIC proxy\nif (import.meta.url === `file://${process.argv[1]}`) {\n const port = parseInt(process.env.PORT || '3000');\n const openrouterApiKey = process.env.OPENROUTER_API_KEY;\n\n if (!openrouterApiKey) {\n console.error('❌ Error: OPENROUTER_API_KEY environment variable required');\n process.exit(1);\n }\n\n const proxy = createQuicProxy({\n openrouterApiKey,\n openrouterBaseUrl: process.env.ANTHROPIC_PROXY_BASE_URL,\n defaultModel: process.env.COMPLETION_MODEL || process.env.REASONING_MODEL,\n transport: (process.env.TRANSPORT as 'quic' | 'http2' | 'auto') || 'auto',\n enableQuic: process.env.AGENTIC_FLOW_ENABLE_QUIC === 'true',\n quic: {\n port: parseInt(process.env.QUIC_PORT || '4433'),\n serverHost: process.env.QUIC_HOST || 'localhost',\n certPath: process.env.QUIC_CERT_PATH,\n keyPath: process.env.QUIC_KEY_PATH\n }\n });\n\n proxy.start(port);\n\n // Graceful shutdown\n process.on('SIGTERM', async () => {\n logger.info('Received SIGTERM, shutting down gracefully...');\n await proxy.shutdown();\n process.exit(0);\n });\n\n process.on('SIGINT', async () => {\n logger.info('Received SIGINT, shutting down gracefully...');\n await proxy.shutdown();\n process.exit(0);\n });\n}\n"]}
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
26
|
import { HybridReasoningBank } from './HybridBackend.js';
|
|
27
|
-
import { NightlyLearner } from 'agentdb';
|
|
27
|
+
import { NightlyLearner } from 'agentdb/controllers/NightlyLearner';
|
|
28
28
|
import { SharedMemoryPool } from '../memory/SharedMemoryPool.js';
|
|
29
29
|
export class AdvancedMemorySystem {
|
|
30
30
|
reasoning;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedMemory.js","sourceRoot":"","sources":["../../src/reasoningbank/AdvancedMemory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAuBjE,MAAM,OAAO,oBAAoB;IACvB,SAAS,CAAsB;IAC/B,OAAO,CAAiB;IACxB,IAAI,CAAmB;IAE/B,YAAY,UAAoC,EAAE;QAChD,IAAI,CAAC,SAAS,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAE3C,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAS,CAAC;QAEhD,kDAAkD;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE;YAC9C,aAAa,EAAE,GAAG;YAClB,aAAa,EAAE,CAAC;YAChB,mBAAmB,EAAE,GAAG;YACxB,eAAe,EAAE,GAAG;YACpB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,GAAG;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,eAAe,CAAC,UAKlB,EAAE;QACJ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,4DAA4D;YAC5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAExC,wDAAwD;YACxD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CACtD,OAAO,CAAC,OAAO,IAAI,CAAC,EACpB,OAAO,CAAC,cAAc,IAAI,GAAG,EAC7B,OAAO,CAAC,YAAY,IAAI,EAAE,CAC3B,CAAC;YAEF,OAAO;gBACL,aAAa,EAAE,WAAW,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;gBACxE,kBAAkB,EAAE,MAAM,CAAC,eAAe,IAAI,CAAC;gBAC/C,gBAAgB,EAAE,MAAM,CAAC,oBAAoB,IAAI,CAAC;gBAClD,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACvC,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,EAAE;aAC9C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;YAE1E,kCAAkC;YAClC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CACtD,OAAO,CAAC,OAAO,IAAI,CAAC,EACpB,OAAO,CAAC,cAAc,IAAI,GAAG,EAC7B,OAAO,CAAC,YAAY,IAAI,EAAE,CAC3B,CAAC;YAEF,OAAO;gBACL,aAAa,EAAE,WAAW,CAAC,aAAa;gBACxC,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACvC,eAAe,EAAE,CAAC,8DAA8D,CAAC;aAClF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,IAAY,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAC3D,CAAC;YACD,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YAC/C,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACrC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAC/B,eAAe,EAAE,QAAQ,CAAC,MAAM;SACjC,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,OAAY;QAClC,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;QAC9C,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,cAAc,OAAO,CAAC,IAAI,EAAE,CAAC;QACtD,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,OAAY;QACjC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,OAAY;QAChC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,kDAAkD;QAClD,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAEjD,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QAErD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,MAAc;QASjC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAElE,8BAA8B;QAC9B,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,aAAa,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;YAClC,cAAc,GAAG,gCAAgC,CAAC,aAAa,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC7G,CAAC;aAAM,IAAI,aAAa,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;YACzC,cAAc,GAAG,yBAAyB,CAAC,aAAa,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACtG,CAAC;aAAM,IAAI,aAAa,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACvC,cAAc,GAAG,gCAAgC,CAAC,aAAa,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC7G,CAAC;aAAM,IAAI,aAAa,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC;YAC1C,cAAc,GAAG,qBAAqB,CAAC,aAAa,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAClG,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,kCAAkC,CAAC;QACtD,CAAC;QAED,OAAO;YACL,GAAG,aAAa;YAChB,cAAc;SACf,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,IAAY,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAE1D,iCAAiC;QACjC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;YAC/E,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;YAC/E,OAAO,MAAM,GAAG,MAAM,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,eAAe,GAAG,0BAA0B,CAAC;QAC/C,CAAC;aAAM,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1E,CAAC;QAED,qDAAqD;QACrD,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3D,mBAAmB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CACtD,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC,CACzD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,eAAe,EAAE,YAAY;YAC7B,eAAe;YACf,mBAAmB;SACpB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,eAAe,CAAC;YAC1B,OAAO,EAAE,CAAC;YACV,cAAc,EAAE,GAAG;YACnB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,QAAQ;QAKN,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YACxC,OAAO,EAAE,iDAAiD;YAC1D,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;SACjC,CAAC;IACJ,CAAC;CACF","sourcesContent":["/**\n * Advanced Memory System - Full Implementation for v1.7.1\n *\n * Provides high-level memory operations on top of HybridReasoningBank:\n * - Auto-consolidation (patterns → skills) using NightlyLearner\n * - Episodic replay (learn from failures)\n * - Causal reasoning (what-if analysis)\n * - Skill composition (combine learned skills)\n *\n * @example\n * ```typescript\n * import { AdvancedMemorySystem } from 'agentic-flow/reasoningbank';\n *\n * const memory = new AdvancedMemorySystem();\n *\n * // Auto-consolidate patterns into skills\n * const result = await memory.autoConsolidate({ minUses: 3, minSuccessRate: 0.7 });\n *\n * // Learn from failures\n * const failures = await memory.replayFailures('authentication', 5);\n *\n * // Causal what-if analysis\n * const insight = await memory.whatIfAnalysis('add caching');\n * ```\n */\n\nimport { HybridReasoningBank } from './HybridBackend.js';\nimport { NightlyLearner } from 'agentdb';\nimport { SharedMemoryPool } from '../memory/SharedMemoryPool.js';\n\nexport interface FailureAnalysis {\n critique: string;\n whatWentWrong: string[];\n howToFix: string[];\n similarFailures: number;\n}\n\nexport interface SkillComposition {\n availableSkills: any[];\n compositionPlan: string;\n expectedSuccessRate: number;\n}\n\nexport interface ConsolidationResult {\n skillsCreated: number;\n causalEdgesCreated: number;\n patternsAnalyzed: number;\n executionTimeMs: number;\n recommendations: string[];\n}\n\nexport class AdvancedMemorySystem {\n private reasoning: HybridReasoningBank;\n private learner: NightlyLearner;\n private pool: SharedMemoryPool;\n\n constructor(options: { preferWasm?: boolean } = {}) {\n this.reasoning = new HybridReasoningBank(options);\n this.pool = SharedMemoryPool.getInstance();\n\n const db = this.pool.getDatabase();\n const embedder = this.pool.getEmbedder() as any;\n\n // Initialize NightlyLearner with optimized config\n this.learner = new NightlyLearner(db, embedder, {\n minSimilarity: 0.7,\n minSampleSize: 5,\n confidenceThreshold: 0.6,\n upliftThreshold: 0.1,\n pruneOldEdges: true,\n edgeMaxAgeDays: 90,\n autoExperiments: true,\n experimentBudget: 100\n });\n }\n\n /**\n * Auto-consolidate successful patterns into skills\n *\n * Uses NightlyLearner to:\n * 1. Discover causal edges from episode patterns\n * 2. Complete A/B experiments\n * 3. Calculate uplift for experiments\n * 4. Prune low-confidence edges\n * 5. Consolidate high-performing patterns into skills\n */\n async autoConsolidate(options: {\n minUses?: number;\n minSuccessRate?: number;\n lookbackDays?: number;\n dryRun?: boolean;\n } = {}): Promise<ConsolidationResult> {\n const startTime = Date.now();\n\n try {\n // Run NightlyLearner's discovery and consolidation pipeline\n const report = await this.learner.run();\n\n // Also run skill consolidation from HybridReasoningBank\n const skillResult = await this.reasoning.autoConsolidate(\n options.minUses || 3,\n options.minSuccessRate || 0.7,\n options.lookbackDays || 30\n );\n\n return {\n skillsCreated: skillResult.skillsCreated + (report.edgesDiscovered || 0),\n causalEdgesCreated: report.edgesDiscovered || 0,\n patternsAnalyzed: report.experimentsCompleted || 0,\n executionTimeMs: Date.now() - startTime,\n recommendations: report.recommendations || []\n };\n } catch (error) {\n console.error('[AdvancedMemorySystem] Auto-consolidation failed:', error);\n\n // Fallback to basic consolidation\n const skillResult = await this.reasoning.autoConsolidate(\n options.minUses || 3,\n options.minSuccessRate || 0.7,\n options.lookbackDays || 30\n );\n\n return {\n skillsCreated: skillResult.skillsCreated,\n causalEdgesCreated: 0,\n patternsAnalyzed: 0,\n executionTimeMs: Date.now() - startTime,\n recommendations: ['Causal discovery unavailable - basic consolidation completed']\n };\n }\n }\n\n /**\n * Learn from past failures with episodic replay\n *\n * Retrieves failed attempts, extracts lessons, and provides recommendations\n */\n async replayFailures(task: string, k: number = 5): Promise<FailureAnalysis[]> {\n const failures = await this.reasoning.retrievePatterns(task, {\n k,\n onlyFailures: true\n });\n\n return failures.map(f => ({\n critique: f.critique || this.extractCritique(f),\n whatWentWrong: this.analyzeFailure(f),\n howToFix: this.generateFixes(f),\n similarFailures: failures.length\n }));\n }\n\n /**\n * Extract critique from failure pattern\n */\n private extractCritique(failure: any): string {\n if (failure.critique) return failure.critique;\n if (failure.task) return `Failed at: ${failure.task}`;\n return 'No critique available';\n }\n\n /**\n * Analyze what went wrong in a failure\n */\n private analyzeFailure(failure: any): string[] {\n const issues: string[] = [];\n\n if (failure.reward !== undefined && failure.reward < 0.3) {\n issues.push('Low success rate observed');\n }\n\n if (failure.latencyMs && failure.latencyMs > 5000) {\n issues.push('High latency detected');\n }\n\n if (failure.task) {\n issues.push(`Task type: ${failure.task}`);\n }\n\n if (issues.length === 0) {\n issues.push('General failure - review approach');\n }\n\n return issues;\n }\n\n /**\n * Generate fix recommendations\n */\n private generateFixes(failure: any): string[] {\n const fixes: string[] = [];\n\n // Look for successful patterns with similar tasks\n fixes.push('Review similar successful patterns');\n\n if (failure.latencyMs && failure.latencyMs > 5000) {\n fixes.push('Optimize for lower latency');\n }\n\n if (failure.reward !== undefined && failure.reward < 0.3) {\n fixes.push('Consider alternative approach');\n }\n\n fixes.push('Add more validation and error handling');\n\n return fixes;\n }\n\n /**\n * What-if causal analysis\n *\n * Analyzes potential outcomes of taking an action based on causal evidence\n */\n async whatIfAnalysis(action: string): Promise<{\n action: string;\n avgReward: number;\n avgUplift: number;\n confidence: number;\n evidenceCount: number;\n recommendation: 'DO_IT' | 'AVOID' | 'NEUTRAL';\n expectedImpact: string;\n }> {\n const causalInsight = await this.reasoning.whatIfAnalysis(action);\n\n // Generate impact description\n let expectedImpact = '';\n if (causalInsight.avgUplift > 0.2) {\n expectedImpact = `Highly beneficial: Expected +${(causalInsight.avgUplift * 100).toFixed(1)}% improvement`;\n } else if (causalInsight.avgUplift > 0.1) {\n expectedImpact = `Beneficial: Expected +${(causalInsight.avgUplift * 100).toFixed(1)}% improvement`;\n } else if (causalInsight.avgUplift > 0) {\n expectedImpact = `Slightly positive: Expected +${(causalInsight.avgUplift * 100).toFixed(1)}% improvement`;\n } else if (causalInsight.avgUplift < -0.1) {\n expectedImpact = `Harmful: Expected ${(causalInsight.avgUplift * 100).toFixed(1)}% degradation`;\n } else {\n expectedImpact = 'Neutral or insufficient evidence';\n }\n\n return {\n ...causalInsight,\n expectedImpact\n };\n }\n\n /**\n * Compose multiple skills for a complex task\n *\n * Finds relevant skills and creates an execution plan\n */\n async composeSkills(task: string, k: number = 5): Promise<SkillComposition> {\n const skills = await this.reasoning.searchSkills(task, k);\n\n // Sort by success rate and usage\n const sortedSkills = skills.sort((a, b) => {\n const scoreA = (a.successRate || 0) * 0.7 + (Math.log(a.uses || 1) / 10) * 0.3;\n const scoreB = (b.successRate || 0) * 0.7 + (Math.log(b.uses || 1) / 10) * 0.3;\n return scoreB - scoreA;\n });\n\n // Create composition plan\n let compositionPlan = '';\n if (sortedSkills.length === 0) {\n compositionPlan = 'No relevant skills found';\n } else if (sortedSkills.length === 1) {\n compositionPlan = sortedSkills[0].name;\n } else {\n compositionPlan = sortedSkills.slice(0, 3).map(s => s.name).join(' → ');\n }\n\n // Calculate expected success rate (weighted average)\n let expectedSuccessRate = 0;\n if (sortedSkills.length > 0) {\n const weights = sortedSkills.map(s => s.uses || 1);\n const totalWeight = weights.reduce((sum, w) => sum + w, 0);\n expectedSuccessRate = sortedSkills.reduce((sum, s, i) =>\n sum + (s.successRate || 0) * weights[i] / totalWeight, 0\n );\n }\n\n return {\n availableSkills: sortedSkills,\n compositionPlan,\n expectedSuccessRate\n };\n }\n\n /**\n * Run automated learning cycle\n *\n * Discovers causal edges, consolidates skills, and optimizes performance\n */\n async runLearningCycle(): Promise<ConsolidationResult> {\n return this.autoConsolidate({\n minUses: 3,\n minSuccessRate: 0.7,\n lookbackDays: 30,\n dryRun: false\n });\n }\n\n /**\n * Get comprehensive memory statistics\n */\n getStats(): {\n reasoningBank: any;\n learner: string;\n memoryPool: any;\n } {\n return {\n reasoningBank: this.reasoning.getStats(),\n learner: 'NightlyLearner configured with auto-experiments',\n memoryPool: this.pool.getStats()\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AdvancedMemory.js","sourceRoot":"","sources":["../../src/reasoningbank/AdvancedMemory.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Advanced Memory System - Full Implementation for v1.7.1\n *\n * Provides high-level memory operations on top of HybridReasoningBank:\n * - Auto-consolidation (patterns → skills) using NightlyLearner\n * - Episodic replay (learn from failures)\n * - Causal reasoning (what-if analysis)\n * - Skill composition (combine learned skills)\n *\n * @example\n * ```typescript\n * import { AdvancedMemorySystem } from 'agentic-flow/reasoningbank';\n *\n * const memory = new AdvancedMemorySystem();\n *\n * // Auto-consolidate patterns into skills\n * const result = await memory.autoConsolidate({ minUses: 3, minSuccessRate: 0.7 });\n *\n * // Learn from failures\n * const failures = await memory.replayFailures('authentication', 5);\n *\n * // Causal what-if analysis\n * const insight = await memory.whatIfAnalysis('add caching');\n * ```\n */\n\nimport { HybridReasoningBank } from './HybridBackend.js';\nimport { NightlyLearner } from 'agentdb/controllers/NightlyLearner';\nimport { SharedMemoryPool } from '../memory/SharedMemoryPool.js';\n\nexport interface FailureAnalysis {\n critique: string;\n whatWentWrong: string[];\n howToFix: string[];\n similarFailures: number;\n}\n\nexport interface SkillComposition {\n availableSkills: any[];\n compositionPlan: string;\n expectedSuccessRate: number;\n}\n\nexport interface ConsolidationResult {\n skillsCreated: number;\n causalEdgesCreated: number;\n patternsAnalyzed: number;\n executionTimeMs: number;\n recommendations: string[];\n}\n\nexport class AdvancedMemorySystem {\n private reasoning: HybridReasoningBank;\n private learner: NightlyLearner;\n private pool: SharedMemoryPool;\n\n constructor(options: { preferWasm?: boolean } = {}) {\n this.reasoning = new HybridReasoningBank(options);\n this.pool = SharedMemoryPool.getInstance();\n\n const db = this.pool.getDatabase();\n const embedder = this.pool.getEmbedder();\n\n // Initialize NightlyLearner with optimized config\n this.learner = new NightlyLearner(db, embedder, {\n minSimilarity: 0.7,\n minSampleSize: 5,\n confidenceThreshold: 0.6,\n upliftThreshold: 0.1,\n pruneOldEdges: true,\n edgeMaxAgeDays: 90,\n autoExperiments: true,\n experimentBudget: 100\n });\n }\n\n /**\n * Auto-consolidate successful patterns into skills\n *\n * Uses NightlyLearner to:\n * 1. Discover causal edges from episode patterns\n * 2. Complete A/B experiments\n * 3. Calculate uplift for experiments\n * 4. Prune low-confidence edges\n * 5. Consolidate high-performing patterns into skills\n */\n async autoConsolidate(options: {\n minUses?: number;\n minSuccessRate?: number;\n lookbackDays?: number;\n dryRun?: boolean;\n } = {}): Promise<ConsolidationResult> {\n const startTime = Date.now();\n\n try {\n // Run NightlyLearner's discovery and consolidation pipeline\n const report = await this.learner.run();\n\n // Also run skill consolidation from HybridReasoningBank\n const skillResult = await this.reasoning.autoConsolidate(\n options.minUses || 3,\n options.minSuccessRate || 0.7,\n options.lookbackDays || 30\n );\n\n return {\n skillsCreated: skillResult.skillsCreated + (report.edgesDiscovered || 0),\n causalEdgesCreated: report.edgesDiscovered || 0,\n patternsAnalyzed: report.experimentsCompleted || 0,\n executionTimeMs: Date.now() - startTime,\n recommendations: report.recommendations || []\n };\n } catch (error) {\n console.error('[AdvancedMemorySystem] Auto-consolidation failed:', error);\n\n // Fallback to basic consolidation\n const skillResult = await this.reasoning.autoConsolidate(\n options.minUses || 3,\n options.minSuccessRate || 0.7,\n options.lookbackDays || 30\n );\n\n return {\n skillsCreated: skillResult.skillsCreated,\n causalEdgesCreated: 0,\n patternsAnalyzed: 0,\n executionTimeMs: Date.now() - startTime,\n recommendations: ['Causal discovery unavailable - basic consolidation completed']\n };\n }\n }\n\n /**\n * Learn from past failures with episodic replay\n *\n * Retrieves failed attempts, extracts lessons, and provides recommendations\n */\n async replayFailures(task: string, k: number = 5): Promise<FailureAnalysis[]> {\n const failures = await this.reasoning.retrievePatterns(task, {\n k,\n onlyFailures: true\n });\n\n return failures.map(f => ({\n critique: f.critique || this.extractCritique(f),\n whatWentWrong: this.analyzeFailure(f),\n howToFix: this.generateFixes(f),\n similarFailures: failures.length\n }));\n }\n\n /**\n * Extract critique from failure pattern\n */\n private extractCritique(failure: any): string {\n if (failure.critique) return failure.critique;\n if (failure.task) return `Failed at: ${failure.task}`;\n return 'No critique available';\n }\n\n /**\n * Analyze what went wrong in a failure\n */\n private analyzeFailure(failure: any): string[] {\n const issues: string[] = [];\n\n if (failure.reward !== undefined && failure.reward < 0.3) {\n issues.push('Low success rate observed');\n }\n\n if (failure.latencyMs && failure.latencyMs > 5000) {\n issues.push('High latency detected');\n }\n\n if (failure.task) {\n issues.push(`Task type: ${failure.task}`);\n }\n\n if (issues.length === 0) {\n issues.push('General failure - review approach');\n }\n\n return issues;\n }\n\n /**\n * Generate fix recommendations\n */\n private generateFixes(failure: any): string[] {\n const fixes: string[] = [];\n\n // Look for successful patterns with similar tasks\n fixes.push('Review similar successful patterns');\n\n if (failure.latencyMs && failure.latencyMs > 5000) {\n fixes.push('Optimize for lower latency');\n }\n\n if (failure.reward !== undefined && failure.reward < 0.3) {\n fixes.push('Consider alternative approach');\n }\n\n fixes.push('Add more validation and error handling');\n\n return fixes;\n }\n\n /**\n * What-if causal analysis\n *\n * Analyzes potential outcomes of taking an action based on causal evidence\n */\n async whatIfAnalysis(action: string): Promise<{\n action: string;\n avgReward: number;\n avgUplift: number;\n confidence: number;\n evidenceCount: number;\n recommendation: 'DO_IT' | 'AVOID' | 'NEUTRAL';\n expectedImpact: string;\n }> {\n const causalInsight = await this.reasoning.whatIfAnalysis(action);\n\n // Generate impact description\n let expectedImpact = '';\n if (causalInsight.avgUplift > 0.2) {\n expectedImpact = `Highly beneficial: Expected +${(causalInsight.avgUplift * 100).toFixed(1)}% improvement`;\n } else if (causalInsight.avgUplift > 0.1) {\n expectedImpact = `Beneficial: Expected +${(causalInsight.avgUplift * 100).toFixed(1)}% improvement`;\n } else if (causalInsight.avgUplift > 0) {\n expectedImpact = `Slightly positive: Expected +${(causalInsight.avgUplift * 100).toFixed(1)}% improvement`;\n } else if (causalInsight.avgUplift < -0.1) {\n expectedImpact = `Harmful: Expected ${(causalInsight.avgUplift * 100).toFixed(1)}% degradation`;\n } else {\n expectedImpact = 'Neutral or insufficient evidence';\n }\n\n return {\n ...causalInsight,\n expectedImpact\n };\n }\n\n /**\n * Compose multiple skills for a complex task\n *\n * Finds relevant skills and creates an execution plan\n */\n async composeSkills(task: string, k: number = 5): Promise<SkillComposition> {\n const skills = await this.reasoning.searchSkills(task, k);\n\n // Sort by success rate and usage\n const sortedSkills = skills.sort((a, b) => {\n const scoreA = (a.successRate || 0) * 0.7 + (Math.log(a.uses || 1) / 10) * 0.3;\n const scoreB = (b.successRate || 0) * 0.7 + (Math.log(b.uses || 1) / 10) * 0.3;\n return scoreB - scoreA;\n });\n\n // Create composition plan\n let compositionPlan = '';\n if (sortedSkills.length === 0) {\n compositionPlan = 'No relevant skills found';\n } else if (sortedSkills.length === 1) {\n compositionPlan = sortedSkills[0].name;\n } else {\n compositionPlan = sortedSkills.slice(0, 3).map(s => s.name).join(' → ');\n }\n\n // Calculate expected success rate (weighted average)\n let expectedSuccessRate = 0;\n if (sortedSkills.length > 0) {\n const weights = sortedSkills.map(s => s.uses || 1);\n const totalWeight = weights.reduce((sum, w) => sum + w, 0);\n expectedSuccessRate = sortedSkills.reduce((sum, s, i) =>\n sum + (s.successRate || 0) * weights[i] / totalWeight, 0\n );\n }\n\n return {\n availableSkills: sortedSkills,\n compositionPlan,\n expectedSuccessRate\n };\n }\n\n /**\n * Run automated learning cycle\n *\n * Discovers causal edges, consolidates skills, and optimizes performance\n */\n async runLearningCycle(): Promise<ConsolidationResult> {\n return this.autoConsolidate({\n minUses: 3,\n minSuccessRate: 0.7,\n lookbackDays: 30,\n dryRun: false\n });\n }\n\n /**\n * Get comprehensive memory statistics\n */\n getStats(): {\n reasoningBank: any;\n learner: string;\n memoryPool: any;\n } {\n return {\n reasoningBank: this.reasoning.getStats(),\n learner: 'NightlyLearner configured with auto-experiments',\n memoryPool: this.pool.getStats()\n };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HybridBackend.d.ts","sourceRoot":"","sources":["../../src/reasoningbank/HybridBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"HybridBackend.d.ts","sourceRoot":"","sources":["../../src/reasoningbank/HybridBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;CAC/C;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAM;gBAEZ,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO;YA6BpC,cAAc;IAW5B;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IA4BzD;;OAEG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAqDrF;;;;OAIG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACzC,QAAQ,EAAE,GAAG,EAAE,CAAC;QAChB,SAAS,EAAE,aAAa,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IA6DF;;OAEG;IACG,eAAe,CAAC,OAAO,GAAE,MAAU,EAAE,cAAc,GAAE,MAAY,EAAE,YAAY,GAAE,MAAW,GAAG,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IA+CvI;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAwC5D;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAInE;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,GAAG,CAAC;QAClB,SAAS,EAAE,GAAG,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB;CAOF"}
|
|
@@ -18,7 +18,10 @@
|
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
20
|
import { SharedMemoryPool } from '../memory/SharedMemoryPool.js';
|
|
21
|
-
import { ReflexionMemory
|
|
21
|
+
import { ReflexionMemory } from 'agentdb/controllers/ReflexionMemory';
|
|
22
|
+
import { SkillLibrary } from 'agentdb/controllers/SkillLibrary';
|
|
23
|
+
import { CausalRecall } from 'agentdb/controllers/CausalRecall';
|
|
24
|
+
import { CausalMemoryGraph } from 'agentdb/controllers/CausalMemoryGraph';
|
|
22
25
|
export class HybridReasoningBank {
|
|
23
26
|
memory;
|
|
24
27
|
reflexion;
|
|
@@ -34,7 +37,7 @@ export class HybridReasoningBank {
|
|
|
34
37
|
this.reflexion = new ReflexionMemory(db, embedder);
|
|
35
38
|
this.skills = new SkillLibrary(db, embedder);
|
|
36
39
|
this.causalGraph = new CausalMemoryGraph(db);
|
|
37
|
-
// CausalRecall with optimized rerank config
|
|
40
|
+
// CausalRecall with optimized rerank config
|
|
38
41
|
this.causalRecall = new CausalRecall(db, embedder, {
|
|
39
42
|
alpha: 0.6, // 60% weight on similarity
|
|
40
43
|
beta: 0.3, // 30% weight on causal uplift
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HybridBackend.js","sourceRoot":"","sources":["../../src/reasoningbank/HybridBackend.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hybrid ReasoningBank Backend - Full Implementation for v1.7.1\n *\n * Combines Rust WASM (compute) + AgentDB TypeScript (storage) for optimal performance:\n * - WASM: 10x faster similarity computation\n * - AgentDB: Persistent SQLite storage with frontier memory\n * - CausalRecall: Utility-based reranking with causal uplift\n * - Automatic backend selection based on task requirements\n *\n * @example\n * ```typescript\n * import { HybridReasoningBank } from 'agentic-flow/reasoningbank';\n *\n * const rb = new HybridReasoningBank({ preferWasm: true });\n * await rb.storePattern({ task: '...', success: true, reward: 0.95 });\n * const patterns = await rb.retrievePatterns('similar task', { k: 5 });\n * const strategy = await rb.learnStrategy('API optimization');\n * ```\n */\n\nimport { SharedMemoryPool } from '../memory/SharedMemoryPool.js';\nimport { ReflexionMemory, SkillLibrary, CausalRecall, CausalMemoryGraph } from 'agentdb';\n\nexport interface PatternData {\n sessionId: string;\n task: string;\n input?: string;\n output?: string;\n critique?: string;\n success: boolean;\n reward: number;\n latencyMs?: number;\n tokensUsed?: number;\n}\n\nexport interface RetrievalOptions {\n k?: number;\n minReward?: number;\n onlySuccesses?: boolean;\n onlyFailures?: boolean;\n}\n\nexport interface CausalInsight {\n action: string;\n avgReward: number;\n avgUplift: number;\n confidence: number;\n evidenceCount: number;\n recommendation: 'DO_IT' | 'AVOID' | 'NEUTRAL';\n}\n\nexport class HybridReasoningBank {\n private memory: SharedMemoryPool;\n private reflexion: ReflexionMemory;\n private skills: SkillLibrary;\n private causalRecall: CausalRecall;\n private causalGraph: CausalMemoryGraph;\n private useWasm: boolean;\n private wasmModule: any;\n\n constructor(options: { preferWasm?: boolean } = {}) {\n this.memory = SharedMemoryPool.getInstance();\n const db = this.memory.getDatabase();\n const embedder = this.memory.getEmbedder() as any;\n\n this.reflexion = new ReflexionMemory(db, embedder);\n this.skills = new SkillLibrary(db, embedder);\n this.causalGraph = new CausalMemoryGraph(db);\n\n // CausalRecall with optimized rerank config - use any for extended options\n this.causalRecall = new CausalRecall(db, embedder, {\n alpha: 0.6, // 60% weight on similarity\n beta: 0.3, // 30% weight on causal uplift\n gamma: 0.1, // 10% penalty for latency\n minConfidence: 0.7\n } as any);\n\n this.useWasm = options.preferWasm ?? true;\n this.wasmModule = null;\n\n // Try to load WASM module\n if (this.useWasm) {\n this.loadWasmModule().catch(err => {\n console.warn('[HybridReasoningBank] WASM unavailable, using TypeScript:', err.message);\n this.useWasm = false;\n });\n }\n }\n\n private async loadWasmModule(): Promise<void> {\n try {\n // Dynamic import for WASM module\n const wasm = await import('../../wasm/reasoningbank/reasoningbank_wasm.js');\n this.wasmModule = wasm;\n console.log('[HybridReasoningBank] WASM module loaded successfully');\n } catch (error) {\n throw new Error(`WASM load failed: ${error}`);\n }\n }\n\n /**\n * Store a reasoning pattern\n */\n async storePattern(pattern: PatternData): Promise<number> {\n const episodeId = await this.reflexion.storeEpisode(pattern);\n\n // Store causal edge if action led to outcome\n if (pattern.input && pattern.output && pattern.success) {\n try {\n this.causalGraph.addCausalEdge({\n fromMemoryId: episodeId,\n fromMemoryType: 'episode',\n toMemoryId: episodeId + 1, // Next episode\n toMemoryType: 'episode',\n similarity: pattern.reward,\n uplift: pattern.success ? pattern.reward : -pattern.reward,\n confidence: 0.8,\n sampleSize: 1,\n metadata: {\n sessionId: pattern.sessionId,\n task: pattern.task\n }\n });\n } catch (error) {\n console.warn('[HybridReasoningBank] Failed to record causal edge:', error);\n }\n }\n\n return episodeId;\n }\n\n /**\n * Retrieve similar patterns with optional WASM acceleration\n */\n async retrievePatterns(query: string, options: RetrievalOptions = {}): Promise<any[]> {\n const { k = 5, minReward, onlySuccesses, onlyFailures } = options;\n\n // Check cache first\n const cacheKey = `retrieve:${query}:${k}:${onlySuccesses}:${onlyFailures}`;\n const cached = this.memory.getCachedQuery(cacheKey);\n if (cached) return cached;\n\n // Use CausalRecall for intelligent retrieval with utility-based ranking\n try {\n const result = await this.causalRecall.recall(\n `query-${Date.now()}`,\n query,\n k,\n undefined, // requirements\n 'public' // accessLevel\n );\n\n // Convert candidates to pattern format and filter\n let patterns = result.candidates.map(c => ({\n task: c.content,\n similarity: c.similarity,\n uplift: c.uplift || 0,\n utilityScore: c.utilityScore,\n type: c.type,\n id: c.id\n }));\n\n // Apply filters\n if (minReward !== undefined) {\n patterns = patterns.filter(p => (p.uplift || 0) >= minReward);\n }\n\n // Cache and return\n this.memory.cacheQuery(cacheKey, patterns, 60000);\n return patterns;\n } catch (error) {\n console.warn('[HybridReasoningBank] CausalRecall failed, falling back to ReflexionMemory:', error);\n\n // Fallback to basic ReflexionMemory\n const results = await this.reflexion.retrieveRelevant({\n task: query,\n k,\n minReward,\n onlySuccesses,\n onlyFailures\n });\n\n this.memory.cacheQuery(cacheKey, results, 60000);\n return results;\n }\n }\n\n /**\n * Learn optimal strategy for a task\n *\n * Combines pattern retrieval with causal analysis to provide evidence-based recommendations\n */\n async learnStrategy(task: string): Promise<{\n patterns: any[];\n causality: CausalInsight;\n confidence: number;\n recommendation: string;\n }> {\n // Get successful patterns\n const patterns = await this.retrievePatterns(task, { k: 10, onlySuccesses: true });\n\n // Get causal effects for this task type\n let causalData: any;\n try {\n // Note: queryCausalEffects requires specific memory IDs\n // For task-level analysis, we'll use pattern success rates instead\n const stats = await this.reflexion.getTaskStats(task, 30);\n\n if (stats.totalAttempts > 0) {\n causalData = {\n action: task,\n avgReward: stats.avgReward || 0,\n avgUplift: stats.improvementTrend || 0,\n confidence: Math.min(stats.totalAttempts / 10, 1.0),\n evidenceCount: stats.totalAttempts,\n recommendation: (stats.improvementTrend || 0) > 0.1 ? 'DO_IT' :\n (stats.improvementTrend || 0) < -0.1 ? 'AVOID' : 'NEUTRAL'\n };\n }\n } catch (error) {\n console.warn('[HybridReasoningBank] Causal analysis failed:', error);\n }\n\n // Fallback if no causal data\n if (!causalData) {\n causalData = {\n action: task,\n avgReward: patterns.length > 0 ? (patterns[0].reward || 0) : 0,\n avgUplift: 0,\n confidence: patterns.length > 0 ? 0.6 : 0.3,\n evidenceCount: patterns.length,\n recommendation: patterns.length > 0 ? 'DO_IT' : 'NEUTRAL'\n };\n }\n\n // Calculate overall confidence\n const patternConf = Math.min(patterns.length / 10, 1.0); // 10+ patterns = full confidence\n const causalConf = causalData.confidence;\n const confidence = 0.6 * patternConf + 0.4 * causalConf;\n\n // Generate recommendation\n let recommendation = '';\n if (confidence > 0.8 && causalData.avgUplift > 0.1) {\n recommendation = `Strong evidence for success (${patterns.length} patterns, +${(causalData.avgUplift * 100).toFixed(1)}% uplift)`;\n } else if (confidence > 0.5) {\n recommendation = `Moderate evidence (${patterns.length} patterns available)`;\n } else {\n recommendation = `Limited evidence - proceed with caution`;\n }\n\n return {\n patterns,\n causality: causalData,\n confidence,\n recommendation\n };\n }\n\n /**\n * Auto-consolidate patterns into skills\n */\n async autoConsolidate(minUses: number = 3, minSuccessRate: number = 0.7, lookbackDays: number = 30): Promise<{ skillsCreated: number }> {\n // Get task statistics\n const stats = await this.reflexion.getTaskStats('', lookbackDays);\n\n if (stats.totalAttempts < minUses || stats.successRate < minSuccessRate) {\n return { skillsCreated: 0 };\n }\n\n // Get successful episodes for consolidation\n const episodes = await this.reflexion.retrieveRelevant({\n task: '',\n k: 50,\n onlySuccesses: true,\n timeWindowDays: lookbackDays\n });\n\n // Group by task type and consolidate\n const taskGroups = new Map<string, any[]>();\n episodes.forEach(ep => {\n const group = taskGroups.get(ep.task) || [];\n group.push(ep);\n taskGroups.set(ep.task, group);\n });\n\n let skillsCreated = 0;\n for (const [task, group] of taskGroups) {\n if (group.length >= minUses) {\n const successRate = group.filter(e => e.success).length / group.length;\n if (successRate >= minSuccessRate) {\n await this.skills.createSkill({\n name: `skill_${task.replace(/\\s+/g, '_').toLowerCase()}`,\n description: `Consolidated from ${group.length} successful episodes`,\n signature: { inputs: {}, outputs: {} },\n successRate,\n uses: group.length,\n avgReward: group.reduce((sum, e) => sum + e.reward, 0) / group.length,\n avgLatencyMs: group.reduce((sum, e) => sum + (e.latencyMs || 0), 0) / group.length,\n metadata: { consolidatedAt: Date.now(), taskType: task }\n });\n skillsCreated++;\n }\n }\n }\n\n return { skillsCreated };\n }\n\n /**\n * What-if causal analysis\n */\n async whatIfAnalysis(action: string): Promise<CausalInsight> {\n try {\n // Use task statistics for what-if analysis\n const stats = await this.reflexion.getTaskStats(action, 30);\n\n if (stats.totalAttempts === 0) {\n return {\n action,\n avgReward: 0,\n avgUplift: 0,\n confidence: 0,\n evidenceCount: 0,\n recommendation: 'NEUTRAL'\n };\n }\n\n const avgUplift = stats.improvementTrend || 0;\n const confidence = Math.min(stats.totalAttempts / 10, 1.0);\n\n return {\n action,\n avgReward: stats.avgReward || 0,\n avgUplift,\n confidence,\n evidenceCount: stats.totalAttempts,\n recommendation: avgUplift > 0.1 ? 'DO_IT' : avgUplift < -0.1 ? 'AVOID' : 'NEUTRAL'\n };\n } catch (error) {\n console.error('[HybridReasoningBank] What-if analysis failed:', error);\n return {\n action,\n avgReward: 0,\n avgUplift: 0,\n confidence: 0,\n evidenceCount: 0,\n recommendation: 'NEUTRAL'\n };\n }\n }\n\n /**\n * Search for relevant skills\n */\n async searchSkills(taskType: string, k: number = 5): Promise<any[]> {\n return this.skills.searchSkills({ task: taskType, k, minSuccessRate: 0.5 });\n }\n\n /**\n * Get statistics\n */\n getStats(): {\n causalRecall: any;\n reflexion: any;\n skills: number;\n } {\n return {\n causalRecall: this.causalRecall.getStats(),\n reflexion: {}, // ReflexionMemory doesn't expose global stats\n skills: 0 // Would need to query database\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"HybridBackend.js","sourceRoot":"","sources":["../../src/reasoningbank/HybridBackend.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hybrid ReasoningBank Backend - Full Implementation for v1.7.1\n *\n * Combines Rust WASM (compute) + AgentDB TypeScript (storage) for optimal performance:\n * - WASM: 10x faster similarity computation\n * - AgentDB: Persistent SQLite storage with frontier memory\n * - CausalRecall: Utility-based reranking with causal uplift\n * - Automatic backend selection based on task requirements\n *\n * @example\n * ```typescript\n * import { HybridReasoningBank } from 'agentic-flow/reasoningbank';\n *\n * const rb = new HybridReasoningBank({ preferWasm: true });\n * await rb.storePattern({ task: '...', success: true, reward: 0.95 });\n * const patterns = await rb.retrievePatterns('similar task', { k: 5 });\n * const strategy = await rb.learnStrategy('API optimization');\n * ```\n */\n\nimport { SharedMemoryPool } from '../memory/SharedMemoryPool.js';\nimport { ReflexionMemory } from 'agentdb/controllers/ReflexionMemory';\nimport { SkillLibrary } from 'agentdb/controllers/SkillLibrary';\nimport { CausalRecall } from 'agentdb/controllers/CausalRecall';\nimport { CausalMemoryGraph } from 'agentdb/controllers/CausalMemoryGraph';\n\nexport interface PatternData {\n sessionId: string;\n task: string;\n input?: string;\n output?: string;\n critique?: string;\n success: boolean;\n reward: number;\n latencyMs?: number;\n tokensUsed?: number;\n}\n\nexport interface RetrievalOptions {\n k?: number;\n minReward?: number;\n onlySuccesses?: boolean;\n onlyFailures?: boolean;\n}\n\nexport interface CausalInsight {\n action: string;\n avgReward: number;\n avgUplift: number;\n confidence: number;\n evidenceCount: number;\n recommendation: 'DO_IT' | 'AVOID' | 'NEUTRAL';\n}\n\nexport class HybridReasoningBank {\n private memory: SharedMemoryPool;\n private reflexion: ReflexionMemory;\n private skills: SkillLibrary;\n private causalRecall: CausalRecall;\n private causalGraph: CausalMemoryGraph;\n private useWasm: boolean;\n private wasmModule: any;\n\n constructor(options: { preferWasm?: boolean } = {}) {\n this.memory = SharedMemoryPool.getInstance();\n const db = this.memory.getDatabase();\n const embedder = this.memory.getEmbedder();\n\n this.reflexion = new ReflexionMemory(db, embedder);\n this.skills = new SkillLibrary(db, embedder);\n this.causalGraph = new CausalMemoryGraph(db);\n\n // CausalRecall with optimized rerank config\n this.causalRecall = new CausalRecall(db, embedder, {\n alpha: 0.6, // 60% weight on similarity\n beta: 0.3, // 30% weight on causal uplift\n gamma: 0.1, // 10% penalty for latency\n minConfidence: 0.7\n });\n\n this.useWasm = options.preferWasm ?? true;\n this.wasmModule = null;\n\n // Try to load WASM module\n if (this.useWasm) {\n this.loadWasmModule().catch(err => {\n console.warn('[HybridReasoningBank] WASM unavailable, using TypeScript:', err.message);\n this.useWasm = false;\n });\n }\n }\n\n private async loadWasmModule(): Promise<void> {\n try {\n // Dynamic import for WASM module\n const wasm = await import('../../wasm/reasoningbank/reasoningbank_wasm.js');\n this.wasmModule = wasm;\n console.log('[HybridReasoningBank] WASM module loaded successfully');\n } catch (error) {\n throw new Error(`WASM load failed: ${error}`);\n }\n }\n\n /**\n * Store a reasoning pattern\n */\n async storePattern(pattern: PatternData): Promise<number> {\n const episodeId = await this.reflexion.storeEpisode(pattern);\n\n // Store causal edge if action led to outcome\n if (pattern.input && pattern.output && pattern.success) {\n try {\n this.causalGraph.addCausalEdge({\n fromMemoryId: episodeId,\n fromMemoryType: 'episode',\n toMemoryId: episodeId + 1, // Next episode\n toMemoryType: 'episode',\n similarity: pattern.reward,\n uplift: pattern.success ? pattern.reward : -pattern.reward,\n confidence: 0.8,\n sampleSize: 1,\n metadata: {\n sessionId: pattern.sessionId,\n task: pattern.task\n }\n });\n } catch (error) {\n console.warn('[HybridReasoningBank] Failed to record causal edge:', error);\n }\n }\n\n return episodeId;\n }\n\n /**\n * Retrieve similar patterns with optional WASM acceleration\n */\n async retrievePatterns(query: string, options: RetrievalOptions = {}): Promise<any[]> {\n const { k = 5, minReward, onlySuccesses, onlyFailures } = options;\n\n // Check cache first\n const cacheKey = `retrieve:${query}:${k}:${onlySuccesses}:${onlyFailures}`;\n const cached = this.memory.getCachedQuery(cacheKey);\n if (cached) return cached;\n\n // Use CausalRecall for intelligent retrieval with utility-based ranking\n try {\n const result = await this.causalRecall.recall(\n `query-${Date.now()}`,\n query,\n k,\n undefined, // requirements\n 'public' // accessLevel\n );\n\n // Convert candidates to pattern format and filter\n let patterns = result.candidates.map(c => ({\n task: c.content,\n similarity: c.similarity,\n uplift: c.uplift || 0,\n utilityScore: c.utilityScore,\n type: c.type,\n id: c.id\n }));\n\n // Apply filters\n if (minReward !== undefined) {\n patterns = patterns.filter(p => (p.uplift || 0) >= minReward);\n }\n\n // Cache and return\n this.memory.cacheQuery(cacheKey, patterns, 60000);\n return patterns;\n } catch (error) {\n console.warn('[HybridReasoningBank] CausalRecall failed, falling back to ReflexionMemory:', error);\n\n // Fallback to basic ReflexionMemory\n const results = await this.reflexion.retrieveRelevant({\n task: query,\n k,\n minReward,\n onlySuccesses,\n onlyFailures\n });\n\n this.memory.cacheQuery(cacheKey, results, 60000);\n return results;\n }\n }\n\n /**\n * Learn optimal strategy for a task\n *\n * Combines pattern retrieval with causal analysis to provide evidence-based recommendations\n */\n async learnStrategy(task: string): Promise<{\n patterns: any[];\n causality: CausalInsight;\n confidence: number;\n recommendation: string;\n }> {\n // Get successful patterns\n const patterns = await this.retrievePatterns(task, { k: 10, onlySuccesses: true });\n\n // Get causal effects for this task type\n let causalData: any;\n try {\n // Note: queryCausalEffects requires specific memory IDs\n // For task-level analysis, we'll use pattern success rates instead\n const stats = await this.reflexion.getTaskStats(task, 30);\n\n if (stats.totalAttempts > 0) {\n causalData = {\n action: task,\n avgReward: stats.avgReward || 0,\n avgUplift: stats.improvementTrend || 0,\n confidence: Math.min(stats.totalAttempts / 10, 1.0),\n evidenceCount: stats.totalAttempts,\n recommendation: (stats.improvementTrend || 0) > 0.1 ? 'DO_IT' :\n (stats.improvementTrend || 0) < -0.1 ? 'AVOID' : 'NEUTRAL'\n };\n }\n } catch (error) {\n console.warn('[HybridReasoningBank] Causal analysis failed:', error);\n }\n\n // Fallback if no causal data\n if (!causalData) {\n causalData = {\n action: task,\n avgReward: patterns.length > 0 ? (patterns[0].reward || 0) : 0,\n avgUplift: 0,\n confidence: patterns.length > 0 ? 0.6 : 0.3,\n evidenceCount: patterns.length,\n recommendation: patterns.length > 0 ? 'DO_IT' : 'NEUTRAL'\n };\n }\n\n // Calculate overall confidence\n const patternConf = Math.min(patterns.length / 10, 1.0); // 10+ patterns = full confidence\n const causalConf = causalData.confidence;\n const confidence = 0.6 * patternConf + 0.4 * causalConf;\n\n // Generate recommendation\n let recommendation = '';\n if (confidence > 0.8 && causalData.avgUplift > 0.1) {\n recommendation = `Strong evidence for success (${patterns.length} patterns, +${(causalData.avgUplift * 100).toFixed(1)}% uplift)`;\n } else if (confidence > 0.5) {\n recommendation = `Moderate evidence (${patterns.length} patterns available)`;\n } else {\n recommendation = `Limited evidence - proceed with caution`;\n }\n\n return {\n patterns,\n causality: causalData,\n confidence,\n recommendation\n };\n }\n\n /**\n * Auto-consolidate patterns into skills\n */\n async autoConsolidate(minUses: number = 3, minSuccessRate: number = 0.7, lookbackDays: number = 30): Promise<{ skillsCreated: number }> {\n // Get task statistics\n const stats = await this.reflexion.getTaskStats('', lookbackDays);\n\n if (stats.totalAttempts < minUses || stats.successRate < minSuccessRate) {\n return { skillsCreated: 0 };\n }\n\n // Get successful episodes for consolidation\n const episodes = await this.reflexion.retrieveRelevant({\n task: '',\n k: 50,\n onlySuccesses: true,\n timeWindowDays: lookbackDays\n });\n\n // Group by task type and consolidate\n const taskGroups = new Map<string, any[]>();\n episodes.forEach(ep => {\n const group = taskGroups.get(ep.task) || [];\n group.push(ep);\n taskGroups.set(ep.task, group);\n });\n\n let skillsCreated = 0;\n for (const [task, group] of taskGroups) {\n if (group.length >= minUses) {\n const successRate = group.filter(e => e.success).length / group.length;\n if (successRate >= minSuccessRate) {\n await this.skills.createSkill({\n name: `skill_${task.replace(/\\s+/g, '_').toLowerCase()}`,\n description: `Consolidated from ${group.length} successful episodes`,\n signature: { inputs: {}, outputs: {} },\n successRate,\n uses: group.length,\n avgReward: group.reduce((sum, e) => sum + e.reward, 0) / group.length,\n avgLatencyMs: group.reduce((sum, e) => sum + (e.latencyMs || 0), 0) / group.length,\n metadata: { consolidatedAt: Date.now(), taskType: task }\n });\n skillsCreated++;\n }\n }\n }\n\n return { skillsCreated };\n }\n\n /**\n * What-if causal analysis\n */\n async whatIfAnalysis(action: string): Promise<CausalInsight> {\n try {\n // Use task statistics for what-if analysis\n const stats = await this.reflexion.getTaskStats(action, 30);\n\n if (stats.totalAttempts === 0) {\n return {\n action,\n avgReward: 0,\n avgUplift: 0,\n confidence: 0,\n evidenceCount: 0,\n recommendation: 'NEUTRAL'\n };\n }\n\n const avgUplift = stats.improvementTrend || 0;\n const confidence = Math.min(stats.totalAttempts / 10, 1.0);\n\n return {\n action,\n avgReward: stats.avgReward || 0,\n avgUplift,\n confidence,\n evidenceCount: stats.totalAttempts,\n recommendation: avgUplift > 0.1 ? 'DO_IT' : avgUplift < -0.1 ? 'AVOID' : 'NEUTRAL'\n };\n } catch (error) {\n console.error('[HybridReasoningBank] What-if analysis failed:', error);\n return {\n action,\n avgReward: 0,\n avgUplift: 0,\n confidence: 0,\n evidenceCount: 0,\n recommendation: 'NEUTRAL'\n };\n }\n }\n\n /**\n * Search for relevant skills\n */\n async searchSkills(taskType: string, k: number = 5): Promise<any[]> {\n return this.skills.searchSkills({ task: taskType, k, minSuccessRate: 0.5 });\n }\n\n /**\n * Get statistics\n */\n getStats(): {\n causalRecall: any;\n reflexion: any;\n skills: number;\n } {\n return {\n causalRecall: this.causalRecall.getStats(),\n reflexion: {}, // ReflexionMemory doesn't expose global stats\n skills: 0 // Would need to query database\n };\n }\n}\n"]}
|
|
@@ -29,15 +29,6 @@ export declare function hasIndexedDB(): boolean;
|
|
|
29
29
|
* Check if SQLite native module is available (Node.js)
|
|
30
30
|
*/
|
|
31
31
|
export declare function hasSQLite(): boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Check if sql.js (WASM SQLite) is available
|
|
34
|
-
*/
|
|
35
|
-
export declare function hasSqlJs(): boolean;
|
|
36
|
-
/**
|
|
37
|
-
* Get best available SQLite implementation
|
|
38
|
-
* Priority: better-sqlite3 > sql.js > none
|
|
39
|
-
*/
|
|
40
|
-
export declare function getSQLiteImplementation(): 'better-sqlite3' | 'sql.js' | 'none';
|
|
41
32
|
/**
|
|
42
33
|
* Create ReasoningBank instance with optimal backend for current environment
|
|
43
34
|
*
|
|
@@ -66,7 +57,7 @@ export declare function createOptimalReasoningBank(dbName?: string, options?: {
|
|
|
66
57
|
* Get backend information and capabilities
|
|
67
58
|
*/
|
|
68
59
|
export declare function getBackendInfo(): {
|
|
69
|
-
backend: "
|
|
60
|
+
backend: "wasm" | "nodejs";
|
|
70
61
|
environment: string;
|
|
71
62
|
features: {
|
|
72
63
|
persistent: boolean;
|
|
@@ -83,7 +74,6 @@ export declare function validateEnvironment(): {
|
|
|
83
74
|
valid: boolean;
|
|
84
75
|
warnings: string[];
|
|
85
76
|
backend: 'nodejs' | 'wasm';
|
|
86
|
-
sqliteImpl: 'better-sqlite3' | 'sql.js' | 'none';
|
|
87
77
|
};
|
|
88
78
|
export { validateEnvironment as checkEnvironment };
|
|
89
79
|
//# sourceMappingURL=backend-selector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-selector.d.ts","sourceRoot":"","sources":["../../src/reasoningbank/backend-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,GAAG,MAAM,CAazD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAOnC;AAED
|
|
1
|
+
{"version":3,"file":"backend-selector.d.ts","sourceRoot":"","sources":["../../src/reasoningbank/backend-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,GAAG,MAAM,CAazD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAOnC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,GAAE,MAAwB,EAChC,OAAO,GAAE;IACP,wDAAwD;IACxD,YAAY,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACjC,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACd,GACL,OAAO,CAAC,GAAG,CAAC,CAuCd;AAED;;GAEG;AACH,wBAAgB,cAAc;;;;;;;;;;EAkB7B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC5B,CAqBA;AAGD,OAAO,EAAE,mBAAmB,IAAI,gBAAgB,EAAE,CAAC"}
|
|
@@ -50,29 +50,6 @@ export function hasSQLite() {
|
|
|
50
50
|
return false;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
/**
|
|
54
|
-
* Check if sql.js (WASM SQLite) is available
|
|
55
|
-
*/
|
|
56
|
-
export function hasSqlJs() {
|
|
57
|
-
try {
|
|
58
|
-
require.resolve('sql.js');
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get best available SQLite implementation
|
|
67
|
-
* Priority: better-sqlite3 > sql.js > none
|
|
68
|
-
*/
|
|
69
|
-
export function getSQLiteImplementation() {
|
|
70
|
-
if (hasSQLite())
|
|
71
|
-
return 'better-sqlite3';
|
|
72
|
-
if (hasSqlJs())
|
|
73
|
-
return 'sql.js';
|
|
74
|
-
return 'none';
|
|
75
|
-
}
|
|
76
53
|
/**
|
|
77
54
|
* Create ReasoningBank instance with optimal backend for current environment
|
|
78
55
|
*
|
|
@@ -96,24 +73,11 @@ export async function createOptimalReasoningBank(dbName = 'reasoningbank', optio
|
|
|
96
73
|
console.log(`[ReasoningBank] Database: ${dbName}`);
|
|
97
74
|
}
|
|
98
75
|
if (backend === 'nodejs') {
|
|
99
|
-
const sqliteImpl = getSQLiteImplementation();
|
|
100
|
-
if (options.verbose) {
|
|
101
|
-
console.log(`[ReasoningBank] SQLite implementation: ${sqliteImpl}`);
|
|
102
|
-
}
|
|
103
|
-
// If better-sqlite3 not available, fallback to WASM/sql.js
|
|
104
|
-
if (sqliteImpl === 'none' || sqliteImpl === 'sql.js') {
|
|
105
|
-
if (options.verbose) {
|
|
106
|
-
console.log(`[ReasoningBank] Native SQLite not available, using WASM backend`);
|
|
107
|
-
}
|
|
108
|
-
// Use WASM backend as fallback (works on Windows without native compilation)
|
|
109
|
-
const { createReasoningBank } = await import('./wasm-adapter.js');
|
|
110
|
-
return await createReasoningBank(dbName);
|
|
111
|
-
}
|
|
112
76
|
// Import Node.js backend (SQLite)
|
|
113
77
|
const reasoningBankModule = await import('./index.js');
|
|
114
78
|
const dbPath = options.dbPath || `.swarm/${dbName}.db`;
|
|
115
79
|
if (options.verbose) {
|
|
116
|
-
console.log(`[ReasoningBank] Using Node.js backend with
|
|
80
|
+
console.log(`[ReasoningBank] Using Node.js backend with SQLite`);
|
|
117
81
|
console.log(`[ReasoningBank] Database path: ${dbPath}`);
|
|
118
82
|
}
|
|
119
83
|
// The Node.js backend uses the db module and core algorithms
|
|
@@ -161,15 +125,11 @@ export function getBackendInfo() {
|
|
|
161
125
|
*/
|
|
162
126
|
export function validateEnvironment() {
|
|
163
127
|
const backend = getRecommendedBackend();
|
|
164
|
-
const sqliteImpl = getSQLiteImplementation();
|
|
165
128
|
const warnings = [];
|
|
166
129
|
let valid = true;
|
|
167
|
-
if (backend === 'nodejs' &&
|
|
168
|
-
warnings.push('
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
else if (backend === 'nodejs' && sqliteImpl === 'sql.js') {
|
|
172
|
-
warnings.push('Using sql.js (WASM) instead of better-sqlite3 - this is normal on Windows');
|
|
130
|
+
if (backend === 'nodejs' && !hasSQLite()) {
|
|
131
|
+
warnings.push('better-sqlite3 not found - database operations will fail');
|
|
132
|
+
valid = false;
|
|
173
133
|
}
|
|
174
134
|
if (backend === 'wasm' && typeof window !== 'undefined' && !hasIndexedDB()) {
|
|
175
135
|
warnings.push('IndexedDB not available - using ephemeral memory storage');
|
|
@@ -179,7 +139,7 @@ export function validateEnvironment() {
|
|
|
179
139
|
warnings.push('WASM in Node.js uses in-memory storage (ephemeral)');
|
|
180
140
|
warnings.push('Consider using Node.js backend for persistence');
|
|
181
141
|
}
|
|
182
|
-
return { valid, warnings, backend
|
|
142
|
+
return { valid, warnings, backend };
|
|
183
143
|
}
|
|
184
144
|
// Export validation helper for use in initialization
|
|
185
145
|
export { validateEnvironment as checkEnvironment };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-selector.js","sourceRoot":"","sources":["../../src/reasoningbank/backend-selector.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Backend Selection Helper for ReasoningBank\n *\n * Automatically selects the optimal ReasoningBank backend based on runtime environment.\n *\n * Usage:\n * ```typescript\n * import { createOptimalReasoningBank, getRecommendedBackend } from 'agentic-flow/reasoningbank/backend-selector';\n *\n * // Automatic backend selection\n * const rb = await createOptimalReasoningBank('my-db');\n *\n * // Manual check\n * const backend = getRecommendedBackend();\n * console.log(`Using ${backend} backend`);\n * ```\n */\n\n/**\n * Detect runtime environment and recommend optimal backend\n *\n * @returns 'nodejs' for Node.js/Deno environments, 'wasm' for browsers\n */\nexport function getRecommendedBackend(): 'nodejs' | 'wasm' {\n // Check for browser environment\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n return 'wasm';\n }\n\n // Check for Node.js/Deno\n if (typeof process !== 'undefined' && process.versions?.node) {\n return 'nodejs';\n }\n\n // Default to WASM for unknown environments (likely web workers, etc.)\n return 'wasm';\n}\n\n/**\n * Check if IndexedDB is available (browser environment)\n */\nexport function hasIndexedDB(): boolean {\n return typeof indexedDB !== 'undefined';\n}\n\n/**\n * Check if SQLite native module is available (Node.js)\n */\nexport function hasSQLite(): boolean {\n try {\n require.resolve('better-sqlite3');\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if sql.js (WASM SQLite) is available\n */\nexport function hasSqlJs(): boolean {\n try {\n require.resolve('sql.js');\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get best available SQLite implementation\n * Priority: better-sqlite3 > sql.js > none\n */\nexport function getSQLiteImplementation(): 'better-sqlite3' | 'sql.js' | 'none' {\n if (hasSQLite()) return 'better-sqlite3';\n if (hasSqlJs()) return 'sql.js';\n return 'none';\n}\n\n/**\n * Create ReasoningBank instance with optimal backend for current environment\n *\n * @param dbName - Database name (used differently by each backend)\n * @param options - Additional configuration options\n * @returns ReasoningBank instance using optimal backend\n *\n * @example\n * ```typescript\n * // Node.js: Creates SQLite database at .swarm/my-app.db\n * const rb = await createOptimalReasoningBank('my-app');\n *\n * // Browser: Creates IndexedDB database named 'my-app'\n * const rb = await createOptimalReasoningBank('my-app');\n * ```\n */\nexport async function createOptimalReasoningBank(\n dbName: string = 'reasoningbank',\n options: {\n /** Force specific backend (overrides auto-detection) */\n forceBackend?: 'nodejs' | 'wasm';\n /** Custom database path (Node.js only) */\n dbPath?: string;\n /** Enable verbose logging */\n verbose?: boolean;\n } = {}\n): Promise<any> {\n const backend = options.forceBackend || getRecommendedBackend();\n\n if (options.verbose) {\n console.log(`[ReasoningBank] Environment: ${backend}`);\n console.log(`[ReasoningBank] Database: ${dbName}`);\n }\n\n if (backend === 'nodejs') {\n const sqliteImpl = getSQLiteImplementation();\n\n if (options.verbose) {\n console.log(`[ReasoningBank] SQLite implementation: ${sqliteImpl}`);\n }\n\n // If better-sqlite3 not available, fallback to WASM/sql.js\n if (sqliteImpl === 'none' || sqliteImpl === 'sql.js') {\n if (options.verbose) {\n console.log(`[ReasoningBank] Native SQLite not available, using WASM backend`);\n }\n // Use WASM backend as fallback (works on Windows without native compilation)\n const { createReasoningBank } = await import('./wasm-adapter.js');\n return await createReasoningBank(dbName);\n }\n\n // Import Node.js backend (SQLite)\n const reasoningBankModule = await import('./index.js');\n\n const dbPath = options.dbPath || `.swarm/${dbName}.db`;\n\n if (options.verbose) {\n console.log(`[ReasoningBank] Using Node.js backend with better-sqlite3`);\n console.log(`[ReasoningBank] Database path: ${dbPath}`);\n }\n\n // The Node.js backend uses the db module and core algorithms\n // Initialize the database\n await reasoningBankModule.initialize();\n\n // Note: The Node.js backend has a different API than WASM\n // It uses the functions from db/queries.ts and core algorithms\n // We return the full module for direct access to all functions\n return reasoningBankModule;\n } else {\n // Import WASM backend (IndexedDB in browser, Memory in Node.js)\n const { createReasoningBank } = await import('./wasm-adapter.js');\n\n if (options.verbose) {\n const storageType = hasIndexedDB() ? 'IndexedDB (persistent)' : 'Memory (ephemeral)';\n console.log(`[ReasoningBank] Using WASM backend with ${storageType}`);\n console.log(`[ReasoningBank] Database name: ${dbName}`);\n }\n\n return await createReasoningBank(dbName);\n }\n}\n\n/**\n * Get backend information and capabilities\n */\nexport function getBackendInfo() {\n const backend = getRecommendedBackend();\n\n return {\n backend,\n environment: typeof window !== 'undefined' ? 'browser' : 'nodejs',\n features: {\n persistent: backend === 'nodejs' || hasIndexedDB(),\n sqlite: backend === 'nodejs' && hasSQLite(),\n indexeddb: backend === 'wasm' && hasIndexedDB(),\n wasm: backend === 'wasm',\n },\n storage: backend === 'nodejs'\n ? 'SQLite (disk)'\n : hasIndexedDB()\n ? 'IndexedDB (browser)'\n : 'Memory (ephemeral)',\n };\n}\n\n/**\n * Validate environment and warn about limitations\n */\nexport function validateEnvironment(): {\n valid: boolean;\n warnings: string[];\n backend: 'nodejs' | 'wasm';\n sqliteImpl: 'better-sqlite3' | 'sql.js' | 'none';\n} {\n const backend = getRecommendedBackend();\n const sqliteImpl = getSQLiteImplementation();\n const warnings: string[] = [];\n let valid = true;\n\n if (backend === 'nodejs' && sqliteImpl === 'none') {\n warnings.push('No SQLite implementation available - will use WASM fallback');\n warnings.push('Install sql.js for persistence: npm install sql.js');\n } else if (backend === 'nodejs' && sqliteImpl === 'sql.js') {\n warnings.push('Using sql.js (WASM) instead of better-sqlite3 - this is normal on Windows');\n }\n\n if (backend === 'wasm' && typeof window !== 'undefined' && !hasIndexedDB()) {\n warnings.push('IndexedDB not available - using ephemeral memory storage');\n warnings.push('Data will be lost when page/process exits');\n }\n\n if (backend === 'wasm' && typeof window === 'undefined') {\n warnings.push('WASM in Node.js uses in-memory storage (ephemeral)');\n warnings.push('Consider using Node.js backend for persistence');\n }\n\n return { valid, warnings, backend, sqliteImpl };\n}\n\n// Export validation helper for use in initialization\nexport { validateEnvironment as checkEnvironment };\n"]}
|
|
1
|
+
{"version":3,"file":"backend-selector.js","sourceRoot":"","sources":["../../src/reasoningbank/backend-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,gCAAgC;IAChC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC7D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,sEAAsE;IACtE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,SAAS,KAAK,WAAW,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,SAAiB,eAAe,EAChC,UAOI,EAAE;IAEN,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,IAAI,qBAAqB,EAAE,CAAC;IAEhE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,kCAAkC;QAClC,MAAM,mBAAmB,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,MAAM,KAAK,CAAC;QAEvD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,6DAA6D;QAC7D,0BAA0B;QAC1B,MAAM,mBAAmB,CAAC,UAAU,EAAE,CAAC;QAEvC,0DAA0D;QAC1D,+DAA+D;QAC/D,+DAA+D;QAC/D,OAAO,mBAAmB,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,gEAAgE;QAChE,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAElE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,WAAW,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,oBAAoB,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,2CAA2C,WAAW,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IAExC,OAAO;QACL,OAAO;QACP,WAAW,EAAE,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QACjE,QAAQ,EAAE;YACR,UAAU,EAAE,OAAO,KAAK,QAAQ,IAAI,YAAY,EAAE;YAClD,MAAM,EAAE,OAAO,KAAK,QAAQ,IAAI,SAAS,EAAE;YAC3C,SAAS,EAAE,OAAO,KAAK,MAAM,IAAI,YAAY,EAAE;YAC/C,IAAI,EAAE,OAAO,KAAK,MAAM;SACzB;QACD,OAAO,EAAE,OAAO,KAAK,QAAQ;YAC3B,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,YAAY,EAAE;gBACd,CAAC,CAAC,qBAAqB;gBACvB,CAAC,CAAC,oBAAoB;KAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IAKjC,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,IAAI,OAAO,KAAK,QAAQ,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QAC1E,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QAC3E,QAAQ,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QAC1E,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACxD,QAAQ,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACpE,QAAQ,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,qDAAqD;AACrD,OAAO,EAAE,mBAAmB,IAAI,gBAAgB,EAAE,CAAC","sourcesContent":["/**\n * Backend Selection Helper for ReasoningBank\n *\n * Automatically selects the optimal ReasoningBank backend based on runtime environment.\n *\n * Usage:\n * ```typescript\n * import { createOptimalReasoningBank, getRecommendedBackend } from 'agentic-flow/reasoningbank/backend-selector';\n *\n * // Automatic backend selection\n * const rb = await createOptimalReasoningBank('my-db');\n *\n * // Manual check\n * const backend = getRecommendedBackend();\n * console.log(`Using ${backend} backend`);\n * ```\n */\n\n/**\n * Detect runtime environment and recommend optimal backend\n *\n * @returns 'nodejs' for Node.js/Deno environments, 'wasm' for browsers\n */\nexport function getRecommendedBackend(): 'nodejs' | 'wasm' {\n // Check for browser environment\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n return 'wasm';\n }\n\n // Check for Node.js/Deno\n if (typeof process !== 'undefined' && process.versions?.node) {\n return 'nodejs';\n }\n\n // Default to WASM for unknown environments (likely web workers, etc.)\n return 'wasm';\n}\n\n/**\n * Check if IndexedDB is available (browser environment)\n */\nexport function hasIndexedDB(): boolean {\n return typeof indexedDB !== 'undefined';\n}\n\n/**\n * Check if SQLite native module is available (Node.js)\n */\nexport function hasSQLite(): boolean {\n try {\n require.resolve('better-sqlite3');\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Create ReasoningBank instance with optimal backend for current environment\n *\n * @param dbName - Database name (used differently by each backend)\n * @param options - Additional configuration options\n * @returns ReasoningBank instance using optimal backend\n *\n * @example\n * ```typescript\n * // Node.js: Creates SQLite database at .swarm/my-app.db\n * const rb = await createOptimalReasoningBank('my-app');\n *\n * // Browser: Creates IndexedDB database named 'my-app'\n * const rb = await createOptimalReasoningBank('my-app');\n * ```\n */\nexport async function createOptimalReasoningBank(\n dbName: string = 'reasoningbank',\n options: {\n /** Force specific backend (overrides auto-detection) */\n forceBackend?: 'nodejs' | 'wasm';\n /** Custom database path (Node.js only) */\n dbPath?: string;\n /** Enable verbose logging */\n verbose?: boolean;\n } = {}\n): Promise<any> {\n const backend = options.forceBackend || getRecommendedBackend();\n\n if (options.verbose) {\n console.log(`[ReasoningBank] Environment: ${backend}`);\n console.log(`[ReasoningBank] Database: ${dbName}`);\n }\n\n if (backend === 'nodejs') {\n // Import Node.js backend (SQLite)\n const reasoningBankModule = await import('./index.js');\n\n const dbPath = options.dbPath || `.swarm/${dbName}.db`;\n\n if (options.verbose) {\n console.log(`[ReasoningBank] Using Node.js backend with SQLite`);\n console.log(`[ReasoningBank] Database path: ${dbPath}`);\n }\n\n // The Node.js backend uses the db module and core algorithms\n // Initialize the database\n await reasoningBankModule.initialize();\n\n // Note: The Node.js backend has a different API than WASM\n // It uses the functions from db/queries.ts and core algorithms\n // We return the full module for direct access to all functions\n return reasoningBankModule;\n } else {\n // Import WASM backend (IndexedDB in browser, Memory in Node.js)\n const { createReasoningBank } = await import('./wasm-adapter.js');\n\n if (options.verbose) {\n const storageType = hasIndexedDB() ? 'IndexedDB (persistent)' : 'Memory (ephemeral)';\n console.log(`[ReasoningBank] Using WASM backend with ${storageType}`);\n console.log(`[ReasoningBank] Database name: ${dbName}`);\n }\n\n return await createReasoningBank(dbName);\n }\n}\n\n/**\n * Get backend information and capabilities\n */\nexport function getBackendInfo() {\n const backend = getRecommendedBackend();\n\n return {\n backend,\n environment: typeof window !== 'undefined' ? 'browser' : 'nodejs',\n features: {\n persistent: backend === 'nodejs' || hasIndexedDB(),\n sqlite: backend === 'nodejs' && hasSQLite(),\n indexeddb: backend === 'wasm' && hasIndexedDB(),\n wasm: backend === 'wasm',\n },\n storage: backend === 'nodejs'\n ? 'SQLite (disk)'\n : hasIndexedDB()\n ? 'IndexedDB (browser)'\n : 'Memory (ephemeral)',\n };\n}\n\n/**\n * Validate environment and warn about limitations\n */\nexport function validateEnvironment(): {\n valid: boolean;\n warnings: string[];\n backend: 'nodejs' | 'wasm';\n} {\n const backend = getRecommendedBackend();\n const warnings: string[] = [];\n let valid = true;\n\n if (backend === 'nodejs' && !hasSQLite()) {\n warnings.push('better-sqlite3 not found - database operations will fail');\n valid = false;\n }\n\n if (backend === 'wasm' && typeof window !== 'undefined' && !hasIndexedDB()) {\n warnings.push('IndexedDB not available - using ephemeral memory storage');\n warnings.push('Data will be lost when page/process exits');\n }\n\n if (backend === 'wasm' && typeof window === 'undefined') {\n warnings.push('WASM in Node.js uses in-memory storage (ephemeral)');\n warnings.push('Consider using Node.js backend for persistence');\n }\n\n return { valid, warnings, backend };\n}\n\n// Export validation helper for use in initialization\nexport { validateEnvironment as checkEnvironment };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consolidate.d.ts","sourceRoot":"","sources":["../../../src/reasoningbank/core/consolidate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAqDhE;
|
|
1
|
+
{"version":3,"file":"consolidate.d.ts","sourceRoot":"","sources":["../../../src/reasoningbank/core/consolidate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAqDhE;AAuGD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C"}
|