adaptive-memory-multi-model-router 2.14.45 → 2.14.47
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/dist/index.d.ts +4 -0
- package/dist/index.js +8 -2
- package/dist/memory/hybridMemory.d.ts +71 -0
- package/dist/memory/hybridMemory.js +124 -0
- package/dist/memory/reasoningBank.d.ts +88 -0
- package/dist/memory/reasoningBank.js +303 -0
- package/{docs/llms.txt → llms.txt.bak} +6 -6
- package/package.json +13 -84
- package/src/index.ts +8 -0
- package/src/memory/hybridMemory.ts +155 -0
- package/src/memory/reasoningBank.ts +335 -0
- package/src/routing/advancedRouter.ts.bak +650 -0
- package/test.js.bak +376 -0
- package/.dockerignore +0 -82
- package/.env.example +0 -303
- package/.github/DISCUSSIONS_WELCOME.md +0 -27
- package/.github/DISCUSSION_TEMPLATE.yml +0 -5
- package/.github/FUNDING.yml +0 -2
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -94
- package/.github/ISSUE_TEMPLATE/config.yml +0 -17
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -71
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -71
- package/.github/dependabot.yml +0 -9
- package/.github/workflows/auto-publish.yml +0 -51
- package/.github/workflows/ci.yml +0 -263
- package/.github/workflows/codeql.yml +0 -38
- package/.github/workflows/npm-publish.yml +0 -20
- package/.github/workflows/pages.yml +0 -37
- package/.github/workflows/stale.yml +0 -54
- package/.publish-tick +0 -1
- package/.well-known/ai-plugin.json +0 -16
- package/AGENT_COUNCIL_FINDINGS.md +0 -142
- package/ARCHITECTURE.md +0 -346
- package/AUDIT_REPORT.md +0 -28
- package/CODE_OF_CONDUCT.md +0 -128
- package/CONTRIBUTING.md +0 -50
- package/CONTRIBUTORS.md +0 -20
- package/Dockerfile +0 -53
- package/Dockerfile.proxy +0 -33
- package/HEALTH_REPORT.md +0 -118
- package/IMPROVEMENT_PLAN.md +0 -107
- package/LANDING.md +0 -43
- package/LAUNCH-PAIN-DRIVEN.md +0 -339
- package/LAUNCH.md +0 -337
- package/LAUNCH_CHECKLIST.md +0 -141
- package/LAUNCH_SNAPSHOT.md +0 -260
- package/MANIFESTO.md +0 -41
- package/POPULARITY_BOOSTERS.md +0 -285
- package/PR_STATUS_REPORT.md +0 -148
- package/REDESIGN.md +0 -95
- package/RUNKIT.md +0 -83
- package/SECURITY.md +0 -29
- package/SUBMISSIONS.md +0 -43
- package/_schema.html +0 -53
- package/ai-plugin.json +0 -16
- package/articles/AI_AGENT_LLM_ROUTING.md +0 -150
- package/articles/CHINESE_DIRECTORIES.md +0 -100
- package/articles/CHINESE_SUBMISSIONS_READY.md +0 -322
- package/articles/COMPETITOR_ALERTS.md +0 -31
- package/articles/COMPLETE_POSTING_DIRECTORY.md +0 -147
- package/articles/CONTENT_STRUCTURE.md +0 -292
- package/articles/DEVTO_COST_GUIDE.md +0 -473
- package/articles/DEVTO_FINAL.md +0 -416
- package/articles/DEVTO_MULTI_PROVIDER.md +0 -542
- package/articles/DEVTO_READY.md +0 -255
- package/articles/DEVTO_V2_ANNOUNCEMENT.md +0 -160
- package/articles/DEVTO_VIRAL_GROWTH.md +0 -280
- package/articles/FRESH_devto.md +0 -460
- package/articles/FRESH_devto_2026_05.md +0 -73
- package/articles/FRESH_hackernews.md +0 -14
- package/articles/FRESH_reddit_ml.md +0 -90
- package/articles/FRESH_reddit_node.md +0 -198
- package/articles/FRESH_reddit_sideproject.md +0 -72
- package/articles/FRESH_reddit_webdev.md +0 -130
- package/articles/FROM_ZERO_TO_10K.md +0 -107
- package/articles/HN_10X_BETTER.md +0 -430
- package/articles/HN_ACCOUNT_GUIDE.md +0 -21
- package/articles/HN_CHINESE_STYLE.md +0 -308
- package/articles/HN_FINAL.md +0 -148
- package/articles/HN_POSTED_VERSION.md +0 -56
- package/articles/HN_POST_READY.md +0 -137
- package/articles/HN_RESEARCH.md +0 -364
- package/articles/HN_SHOW_routerarena.md +0 -17
- package/articles/HN_TIMING_GUIDE.md +0 -52
- package/articles/INDIEHACKERS_POST.md +0 -52
- package/articles/INDIEHACKERS_READY.md +0 -120
- package/articles/LLM_BENCHMARK_DEEP_DIVE.md +0 -153
- package/articles/MASTER_POSTING_DIRECTORY.md +0 -189
- package/articles/NEWSLETTER_SEND_NOW.md +0 -259
- package/articles/NEWSLETTER_SUBMISSIONS.md +0 -112
- package/articles/PAIN-DRIVEN-devto-v2.md +0 -308
- package/articles/PAIN-DRIVEN-devto-v3.md +0 -268
- package/articles/PAIN-DRIVEN-devto.md +0 -242
- package/articles/PAIN-DRIVEN-hackernews-v2.md +0 -138
- package/articles/PAIN-DRIVEN-hackernews-v3.md +0 -151
- package/articles/PAIN-DRIVEN-hackernews.md +0 -131
- package/articles/PAIN-DRIVEN-reddit-v2.md +0 -301
- package/articles/PAIN-DRIVEN-reddit-v3.md +0 -236
- package/articles/PAIN-DRIVEN-reddit.md +0 -218
- package/articles/PAIN-DRIVEN-twitter-v2.md +0 -110
- package/articles/PAIN-DRIVEN-twitter-v3.md +0 -121
- package/articles/PAIN-DRIVEN-twitter.md +0 -120
- package/articles/PORTKEY_VS_A3M.md +0 -147
- package/articles/POSTING_KIT_2026_05.md +0 -67
- package/articles/PRESS_KIT_routerarena.md +0 -77
- package/articles/PRODUCTHUNT_LISTING.md +0 -48
- package/articles/PRODUCTHUNT_READY.md +0 -106
- package/articles/PR_PLAN_vault.md +0 -125
- package/articles/REDDIT_FINAL.md +0 -232
- package/articles/REDDIT_POST.md +0 -67
- package/articles/REDDIT_SUBMISSION_READY.md +0 -348
- package/articles/ROUTERARENA_LEADER.md +0 -45
- package/articles/SHOW_HN_FINAL.md +0 -29
- package/articles/TWEETS_10K_DOWNLOADS.md +0 -47
- package/articles/TWEETS_BENCHMARK_FIRST.md +0 -46
- package/articles/TWEETS_MCP_PLAY.md +0 -51
- package/articles/TWEETS_SEQUENTIAL_BROKEN.md +0 -49
- package/articles/TWEETS_WHY_BUILD.md +0 -54
- package/articles/TWEETS_routerarena_leader.md +0 -53
- package/articles/TWEET_STORM_READY.md +0 -165
- package/articles/TWITTER_FINAL.md +0 -167
- package/articles/WHY_10X_BETTER.md +0 -261
- package/articles/WHY_CHINESE_STYLE_BETTER.md +0 -323
- package/articles/ai-discoverability-llm-routing.md +0 -210
- package/articles/devto-llm-routing.md +0 -138
- package/articles/hackernews-show-hn.md +0 -54
- package/articles/hashnode-llm-cost-optimization.md +0 -125
- package/articles/hn_show_2026_05.md +0 -11
- package/articles/medium-building-llm-router.md +0 -205
- package/articles/reddit-ml.md +0 -76
- package/articles/twitter-thread-cost-savings.md +0 -50
- package/articles/youtube-tutorial-script.md +0 -262
- package/assets/a3m_3blue1brown.mp4 +0 -0
- package/assets/banner.svg +0 -109
- package/assets/chart-cost-v2.svg +0 -91
- package/assets/chart-cost-v3.svg +0 -143
- package/assets/chart-features-v2.svg +0 -132
- package/assets/chart-features-v3.svg +0 -211
- package/assets/chart-growth-v2.svg +0 -122
- package/assets/chart-growth-v3.svg +0 -189
- package/assets/cost-comparison.svg +0 -134
- package/assets/cost-simple.svg +0 -64
- package/assets/demo-hn.gif +0 -0
- package/assets/feature-matrix.svg +0 -136
- package/assets/growth-chart-animated.svg +0 -76
- package/assets/growth-chart.svg +0 -82
- package/assets/growth-simple.svg +0 -69
- package/assets/hero-diagram.svg +0 -81
- package/assets/logo-new.svg +0 -21
- package/assets/logo.svg +0 -68
- package/assets/provider-comparison.svg +0 -121
- package/assets/social-preview-new.svg +0 -100
- package/assets/social-preview.svg +0 -194
- package/assets/social-v2.svg +0 -130
- package/assets/social-v3.svg +0 -212
- package/benchmark-provider-results.json +0 -245
- package/benchmark-results.json +0 -54
- package/council-votes/architecture-vote.md +0 -121
- package/council-votes/coverage-vote.md +0 -93
- package/data/adaptive-benchmark.json +0 -92
- package/data/benchmark-results.json +0 -47
- package/data/labeled-benchmark.json +0 -88
- package/demo/3blue1brown_video.py +0 -285
- package/demo/3blue1brown_video_v2.py +0 -310
- package/demo/IMPROVED_PROMPTS.md +0 -229
- package/demo/VEO3_PROMPTS.md +0 -269
- package/demo/VIDEO_PRODUCTION_GUIDE.md +0 -333
- package/demo/a3m_3blue1brown.mp4 +0 -0
- package/demo/asciinema-demo.sh +0 -195
- package/demo/demo-hn.tape +0 -74
- package/demo/demo-script.md +0 -53
- package/demo/demo-script.sh +0 -62
- package/demo/demo.svg +0 -75
- package/demo/frame1_ai_data_center.png +0 -0
- package/demo/frame1_sunset_video.mp4 +0 -0
- package/demo/frame2_cost_comparison.png +0 -0
- package/demo/frame2_cost_comparison_fallback.png +0 -0
- package/demo/frame3_parallel_execution.png +0 -0
- package/demo/frame3_parallel_execution_fallback.png +0 -0
- package/demo/frame4_providers.png +0 -0
- package/demo/frame4_providers_fallback.png +0 -0
- package/demo/frame5_endcard.png +0 -0
- package/demo/frame5_endcard_fallback.png +0 -0
- package/demo/new_frame1_hook.png +0 -0
- package/demo/new_frame2_proof.png +0 -0
- package/demo/new_frame3_wow.png +0 -0
- package/demo/new_frame4_social.png +0 -0
- package/demo/new_frame5_cta.png +0 -0
- package/demo/package.json +0 -13
- package/demo/product-video-final.mp4 +0 -0
- package/demo/product-video-hype-v1.mp4 +0 -0
- package/demo/product-video-v1.mp4 +0 -0
- package/demo/public/index.html +0 -762
- package/demo/recording.cast +0 -55
- package/demo/server.js +0 -405
- package/demo-new.tape +0 -71
- package/demo-real.sh +0 -198
- package/demo-simple.tape +0 -205
- package/demo.html +0 -520
- package/demo.sh +0 -85
- package/demo.tape +0 -259
- package/dist/analytics/costAnalytics.d.ts.map +0 -1
- package/dist/analytics/costAnalytics.js.map +0 -1
- package/dist/benchmark/comprehensive.js.map +0 -1
- package/dist/benchmark/reproducible.d.ts.map +0 -1
- package/dist/benchmark/reproducible.js.map +0 -1
- package/dist/cache/prefixCache.d.ts.map +0 -1
- package/dist/cache/prefixCache.js.map +0 -1
- package/dist/cache/responseCache.d.ts.map +0 -1
- package/dist/cache/responseCache.js.map +0 -1
- package/dist/cache/semanticCache.d.ts.map +0 -1
- package/dist/cache/semanticCache.js.map +0 -1
- package/dist/cli/setupWizard.d.ts.map +0 -1
- package/dist/cli/setupWizard.js.map +0 -1
- package/dist/cost/budgetEnforcer.d.ts.map +0 -1
- package/dist/cost/budgetEnforcer.js.map +0 -1
- package/dist/cost/costTracker.d.ts.map +0 -1
- package/dist/cost/costTracker.js.map +0 -1
- package/dist/ensemble/multiRoundDialog.js.map +0 -1
- package/dist/ensemble/shapleyValue.js.map +0 -1
- package/dist/integrations/langchainAdapter.d.ts.map +0 -1
- package/dist/integrations/langchainAdapter.js.map +0 -1
- package/dist/integrations/oauth.d.ts.map +0 -1
- package/dist/integrations/oauth.js.map +0 -1
- package/dist/integrations/scienceAdapter.js.map +0 -1
- package/dist/memory/autoFetch.d.ts.map +0 -1
- package/dist/memory/autoFetch.js.map +0 -1
- package/dist/memory/episodicMemory.d.ts.map +0 -1
- package/dist/memory/episodicMemory.js.map +0 -1
- package/dist/memory/memoryTree.d.ts.map +0 -1
- package/dist/memory/memoryTree.js.map +0 -1
- package/dist/memory/obsidianVault.d.ts.map +0 -1
- package/dist/memory/obsidianVault.js.map +0 -1
- package/dist/observability/changeWatch.d.ts.map +0 -1
- package/dist/observability/changeWatch.js.map +0 -1
- package/dist/observability/fatigueDetector.d.ts.map +0 -1
- package/dist/observability/fatigueDetector.js.map +0 -1
- package/dist/observability/index.d.ts.map +0 -1
- package/dist/observability/index.js.map +0 -1
- package/dist/observability/metrics.d.ts.map +0 -1
- package/dist/observability/metrics.js.map +0 -1
- package/dist/observability/middleware.d.ts.map +0 -1
- package/dist/observability/middleware.js.map +0 -1
- package/dist/observability/tracer.d.ts.map +0 -1
- package/dist/observability/tracer.js.map +0 -1
- package/dist/observability/types.d.ts.map +0 -1
- package/dist/observability/types.js.map +0 -1
- package/dist/orchestration/haloOrchestrator.d.ts.map +0 -1
- package/dist/orchestration/haloOrchestrator.js.map +0 -1
- package/dist/orchestration/mctsWorkflow.d.ts.map +0 -1
- package/dist/orchestration/mctsWorkflow.js.map +0 -1
- package/dist/providers/localProvider.d.ts.map +0 -1
- package/dist/providers/localProvider.js.map +0 -1
- package/dist/providers/providerConfig.d.ts.map +0 -1
- package/dist/providers/providerConfig.js.map +0 -1
- package/dist/providers/registry.d.ts.map +0 -1
- package/dist/providers/registry.js.map +0 -1
- package/dist/routing/advancedRouter.d.ts.map +0 -1
- package/dist/routing/advancedRouter.js.map +0 -1
- package/dist/routing/crossModelValidation.d.ts.map +0 -1
- package/dist/routing/crossModelValidation.js.map +0 -1
- package/dist/routing/providerHealth.d.ts.map +0 -1
- package/dist/routing/providerHealth.js.map +0 -1
- package/dist/routing/providerRetry.d.ts.map +0 -1
- package/dist/routing/providerRetry.js.map +0 -1
- package/dist/scripts/banner.js +0 -29
- package/dist/security/guardrails.d.ts.map +0 -1
- package/dist/security/guardrails.js.map +0 -1
- package/dist/server/dashboard.d.ts.map +0 -1
- package/dist/server/dashboard.js.map +0 -1
- package/dist/server/modelMapper.d.ts.map +0 -1
- package/dist/server/modelMapper.js.map +0 -1
- package/dist/server/proxyServer.d.ts.map +0 -1
- package/dist/server/proxyServer.js.map +0 -1
- package/dist/skills/__tests__/skill_manager.test.d.ts +0 -2
- package/dist/skills/__tests__/skill_manager.test.d.ts.map +0 -1
- package/dist/skills/__tests__/skill_manager.test.js +0 -268
- package/dist/skills/__tests__/skill_manager.test.js.map +0 -1
- package/dist/tools/tmlpdTools.d.ts.map +0 -1
- package/dist/tools/tmlpdTools.js.map +0 -1
- package/dist/tui/dashboard.d.ts.map +0 -1
- package/dist/tui/dashboard.js.map +0 -1
- package/dist/tui/index.d.ts.map +0 -1
- package/dist/tui/index.js.map +0 -1
- package/dist/utils/batchProcessor.d.ts.map +0 -1
- package/dist/utils/batchProcessor.js.map +0 -1
- package/dist/utils/compression.d.ts.map +0 -1
- package/dist/utils/compression.js.map +0 -1
- package/dist/utils/costUtils.d.ts.map +0 -1
- package/dist/utils/costUtils.js.map +0 -1
- package/dist/utils/reliability.d.ts.map +0 -1
- package/dist/utils/reliability.js.map +0 -1
- package/dist/utils/sorting.d.ts.map +0 -1
- package/dist/utils/sorting.js.map +0 -1
- package/dist/utils/speculativeDecoding.d.ts.map +0 -1
- package/dist/utils/speculativeDecoding.js.map +0 -1
- package/dist/utils/tokenUtils.d.ts.map +0 -1
- package/dist/utils/tokenUtils.js.map +0 -1
- package/docs/.nojekyll +0 -0
- package/docs/ANALYSIS_PRINCIPLES.md +0 -162
- package/docs/API.md +0 -855
- package/docs/ARCHITECTURAL-IMPROVEMENTS-2025.md +0 -1391
- package/docs/ARCHITECTURAL-IMPROVEMENTS-REVISED-2025.md +0 -1051
- package/docs/BENCHMARK.md +0 -170
- package/docs/CHINESE_PROVIDER_RELIABILITY.md +0 -37
- package/docs/CITATIONS.md +0 -74
- package/docs/CLAIMS_AND_EVIDENCE.md +0 -58
- package/docs/CONFIGURATION.md +0 -476
- package/docs/COUNCIL_DECISION.json +0 -816
- package/docs/COUNCIL_SUMMARY.md +0 -319
- package/docs/COUNCIL_V2.2_DECISION.md +0 -416
- package/docs/ENGINEERING_SPEC.md +0 -55
- package/docs/FACTORY_RESET.md +0 -34
- package/docs/GEO.md +0 -66
- package/docs/GEO_OPTIMIZATION.md +0 -30
- package/docs/GEO_ROOT_CAUSE.md +0 -136
- package/docs/GEO_STATUS.md +0 -85
- package/docs/GEO_TEST_RESULTS.md +0 -176
- package/docs/HN_CHECKLIST.md +0 -38
- package/docs/HN_FOUNDER_COMMENT.md +0 -17
- package/docs/HN_SUBMISSION_FINAL.md +0 -180
- package/docs/HN_SUBMISSION_V3.md +0 -56
- package/docs/IMPROVEMENT_ROADMAP.md +0 -515
- package/docs/INTEGRATIONS.md +0 -420
- package/docs/LANGCHAIN_INTEGRATION.md +0 -147
- package/docs/LLM_COUNCIL_DECISION.md +0 -508
- package/docs/MIDDLEWARE_CHAIN.md +0 -35
- package/docs/PROMO_CHECKLIST.md +0 -200
- package/docs/QUICKSTART.md +0 -271
- package/docs/QUICK_START.md +0 -43
- package/docs/QUICK_START_VISIBILITY.md +0 -782
- package/docs/REDDIT_GAP_ANALYSIS.md +0 -299
- package/docs/RELEASE_CHECKLIST.md +0 -32
- package/docs/REPRODUCIBILITY.md +0 -63
- package/docs/RESEARCH_BACKED_IMPROVEMENTS.md +0 -1180
- package/docs/ROUTING_RUBRIC.md +0 -197
- package/docs/SEO_AUDIT.md +0 -186
- package/docs/SOCIAL_LISTENING.md +0 -219
- package/docs/TMLPD_QNA.md +0 -751
- package/docs/TMLPD_V2.1_COMPLETE.md +0 -763
- package/docs/TMLPD_V2.2_RESEARCH_ROADMAP.md +0 -754
- package/docs/UPDATE_TOPICS.md +0 -15
- package/docs/USE_CASES.md +0 -59
- package/docs/V2.2_IMPLEMENTATION_COMPLETE.md +0 -446
- package/docs/V2_IMPLEMENTATION_GUIDE.md +0 -388
- package/docs/VERCEL_AI_SDK.md +0 -209
- package/docs/VISIBILITY_ADOPTION_PLAN.md +0 -1005
- package/docs/_config.yml +0 -49
- package/docs/ai-plugin.json +0 -16
- package/docs/api.html +0 -513
- package/docs/architecture-diagram.md +0 -40
- package/docs/benchmark-chart.png +0 -0
- package/docs/benchmark.html +0 -387
- package/docs/blog/routerarena-number-one.html +0 -73
- package/docs/cli-cheatsheet.md +0 -339
- package/docs/compare.md +0 -109
- package/docs/comparison-litellm.md +0 -88
- package/docs/comparison.md +0 -108
- package/docs/cost-chart-ascii.md +0 -42
- package/docs/cost-comparison-chart.svg +0 -88
- package/docs/curl-examples.md +0 -247
- package/docs/demo-auto.html +0 -264
- package/docs/demo.html +0 -416
- package/docs/geo/GENERATIVE_ENGINE_OPTIMIZATION.md +0 -232
- package/docs/index.html +0 -507
- package/docs/launch-content/LAUNCH_EXECUTION_CHECKLIST.md +0 -421
- package/docs/launch-content/README.md +0 -457
- package/docs/launch-content/assets/cost_comparison_100_tasks.png +0 -0
- package/docs/launch-content/assets/cumulative_savings.png +0 -0
- package/docs/launch-content/assets/parallel_speedup.png +0 -0
- package/docs/launch-content/assets/provider_pricing_comparison.png +0 -0
- package/docs/launch-content/assets/task_breakdown_comparison.png +0 -0
- package/docs/launch-content/generate_charts.py +0 -313
- package/docs/launch-content/hn_show_post.md +0 -139
- package/docs/launch-content/partner_outreach_templates.md +0 -745
- package/docs/launch-content/reddit_posts.md +0 -467
- package/docs/launch-content/twitter_thread.txt +0 -460
- package/docs/npm-downloads-chart.svg +0 -43
- package/docs/openapi.json +0 -139
- package/docs/openapi.yaml +0 -1318
- package/docs/quick-start.html +0 -366
- package/docs/robots.txt +0 -52
- package/docs/sitemap.xml +0 -57
- package/docs/styles.css +0 -682
- package/docs/well-known/ai-plugin.json +0 -16
- package/docs/wellknown/ai-plugin.json +0 -16
- package/docs-site/assets/og-banner.svg +0 -194
- package/docs-site/index.html +0 -632
- package/eval/README.md +0 -46
- package/eval/baselines/main.json +0 -12
- package/eval/benchmark_dataset.jsonl +0 -16
- package/eval/check_golden_routes.js +0 -64
- package/eval/datasets/catalog.json +0 -33
- package/eval/datasets/slices/cn_provider_reliability_v1.jsonl +0 -3
- package/eval/datasets/slices/cost_pressure_v1.jsonl +0 -3
- package/eval/datasets/slices/safety_guardrails_v1.jsonl +0 -3
- package/eval/evals.json +0 -199
- package/eval/fault_injection_thresholds.json +0 -3
- package/eval/generate_report.js +0 -128
- package/eval/golden_routes.json +0 -114
- package/eval/lib/experiment_registry.js +0 -24
- package/eval/run_eval.js +0 -197
- package/eval/run_fault_injection.js +0 -201
- package/eval/run_shadow_eval.js +0 -85
- package/eval/thresholds.json +0 -9
- package/examples/QUICKSTART.md +0 -183
- package/examples/README.md +0 -61
- package/examples/a3m-sdk.js +0 -124
- package/examples/basic-route.js +0 -54
- package/examples/chat-loop.js +0 -202
- package/examples/classify-then-route.js +0 -102
- package/examples/cost-compare.js +0 -120
- package/examples/ensemble.js +0 -160
- package/examples/whatsapp-telegram-bridge-demo.js +0 -302
- package/examples/whatsapp-telegram-bridge.js +0 -269
- package/hf-space/README.md +0 -23
- package/hf-space/app.py +0 -240
- package/hf-space/requirements.txt +0 -1
- package/huggingface_space/README.md +0 -35
- package/huggingface_space/app.py +0 -126
- package/huggingface_space/create_space.py +0 -208
- package/huggingface_space/requirements.txt +0 -1
- package/mcp-server/README.md +0 -188
- package/mcp-server/package.json +0 -29
- package/mcp-server/src/index.ts +0 -744
- package/mcp-server/tsconfig.json +0 -19
- package/openclaw-alexa-bridge/ALL_REMAINING_FIXES_PLAN.md +0 -313
- package/openclaw-alexa-bridge/REMAINING_FIXES_SUMMARY.md +0 -277
- package/openclaw-alexa-bridge/src/alexa_handler_no_tmlpd.js +0 -1234
- package/openclaw-alexa-bridge/test_fixes.js +0 -77
- package/playground/README.md +0 -51
- package/playground/codesandbox.json +0 -12
- package/playground/index.js +0 -39
- package/proxy/README.md +0 -227
- package/proxy/package-lock.json +0 -831
- package/proxy/package.json +0 -17
- package/proxy/rate-limit.js +0 -145
- package/proxy/rate-limit.test.js +0 -311
- package/proxy/server.js +0 -970
- package/python/README.md +0 -102
- package/python/a3m/__init__.py +0 -6
- package/python/a3m/client.py +0 -190
- package/python/a3m/models.py +0 -40
- package/python/a3m/sync_client.py +0 -61
- package/python/examples.py +0 -53
- package/python/integrations.py +0 -330
- package/python/pyproject.toml +0 -23
- package/python/setup.py +0 -28
- package/python/tmlpd.py +0 -369
- package/qna/REDDIT_GAP_ANALYSIS.md +0 -299
- package/qna/TMLPD_QNA.md +0 -751
- package/research/FINDING_001_safety.md +0 -28
- package/research/FINDING_002_error_diversity.md +0 -32
- package/research/FINDING_003_confidence_weighted_voting.md +0 -32
- package/research/FINDING_004_cross_model_semantic_detection.md +0 -37
- package/research/FINDING_005_knowledge_gap_orthogonality.md +0 -34
- package/research/HALLUCINATION_RESEARCH.md +0 -27
- package/research/ensemble-voting.md +0 -324
- package/research/loss-functions.md +0 -545
- package/research-log.md +0 -49
- package/scripts/banner.js +0 -29
- package/scripts/benchmark-local-routerarena.ts +0 -176
- package/scripts/benchmark.js +0 -145
- package/scripts/benchmark.sh +0 -61
- package/scripts/compare-providers.sh +0 -230
- package/scripts/content-planner.js +0 -25
- package/scripts/create-labeled-benchmark.ts +0 -105
- package/scripts/cross_post.py +0 -443
- package/scripts/local-router-benchmark.ts +0 -154
- package/scripts/post-all.sh +0 -41
- package/scripts/publish_fcc.py +0 -106
- package/scripts/push-to-gitee.sh +0 -25
- package/scripts/routerarena_ensemble.js +0 -144
- package/scripts/routing-benchmark-v2.js +0 -373
- package/scripts/routing-benchmark-v3.js +0 -118
- package/scripts/routing-benchmark.js +0 -462
- package/scripts/run-labeled-benchmark.mjs +0 -104
- package/scripts/run-mmlu-benchmark.js +0 -176
- package/scripts/run-provider-benchmark.js +0 -244
- package/scripts/update-npm-badges.js +0 -158
- package/skill/SKILL.md +0 -238
- package/src/__tests__/integration/tmpld_integration.test.py +0 -540
- package/src/skills/__tests__/skill_manager.test.ts +0 -328
- package/submissions/benchmarks/ALL_PLATFORMS_SUBMISSION.md +0 -94
- package/submissions/benchmarks/LLMROUTERBENCH_SUBMISSION.md +0 -121
- package/submissions/benchmarks/MMRBENCH_SUBMISSION.md +0 -94
- package/submissions/benchmarks/ROUTERARENA_UPDATE.md +0 -83
- package/submissions/benchmarks/ROUTERBENCH_SUBMISSION.md +0 -225
- package/test-council/1-structure-tests.test.js +0 -353
- package/test-council/1-structure-tests.test.ts +0 -353
- package/test-council/2-edge-case-tests.test.ts +0 -361
- package/test-council/3-performance-tests.test.ts +0 -669
- package/test-council/4-integration-tests.test.ts +0 -391
- package/test-council/5-agent-council-eval.test.ts +0 -413
- package/test-council/AGENT_COUNCIL_ARCHITECTURE.md +0 -349
- package/test-council/TEST_COUNCIL_REPORT.md +0 -201
- package/test-council/agents/edge-case-agent.ts +0 -363
- package/test-council/agents/performance-agent.ts +0 -426
- package/test-council/agents/structure-agent.ts +0 -227
- package/test-council/council.md +0 -183
- package/tests/__mocks__/tokenUtils.ts +0 -8
- package/tests/memory/episodicMemory.test.ts +0 -227
- package/tests/package-lock.json +0 -1628
- package/tests/package.json +0 -18
- package/tests/routing/ensembleVoting.test.ts +0 -236
- package/tests/routing/providerRetry.test.ts +0 -360
- package/tests/routing/queryTypePresets.test.ts +0 -208
- package/tests/security/guardrailEngine.test.ts +0 -700
- package/tests/tsconfig.json +0 -21
- package/tests/vitest.config.ts +0 -18
- package/tmlpd-pi-extension/README.md +0 -66
- package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts +0 -114
- package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/cache/prefixCache.js +0 -285
- package/tmlpd-pi-extension/dist/cache/prefixCache.js.map +0 -1
- package/tmlpd-pi-extension/dist/cache/responseCache.d.ts +0 -58
- package/tmlpd-pi-extension/dist/cache/responseCache.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/cache/responseCache.js +0 -153
- package/tmlpd-pi-extension/dist/cache/responseCache.js.map +0 -1
- package/tmlpd-pi-extension/dist/cli.js +0 -59
- package/tmlpd-pi-extension/dist/cost/costTracker.d.ts +0 -95
- package/tmlpd-pi-extension/dist/cost/costTracker.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/cost/costTracker.js +0 -240
- package/tmlpd-pi-extension/dist/cost/costTracker.js.map +0 -1
- package/tmlpd-pi-extension/dist/index.d.ts +0 -723
- package/tmlpd-pi-extension/dist/index.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/index.js +0 -239
- package/tmlpd-pi-extension/dist/index.js.map +0 -1
- package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts +0 -82
- package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/memory/episodicMemory.js +0 -145
- package/tmlpd-pi-extension/dist/memory/episodicMemory.js.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts +0 -102
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js +0 -207
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts +0 -85
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js +0 -210
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js.map +0 -1
- package/tmlpd-pi-extension/dist/providers/localProvider.d.ts +0 -102
- package/tmlpd-pi-extension/dist/providers/localProvider.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/providers/localProvider.js +0 -338
- package/tmlpd-pi-extension/dist/providers/localProvider.js.map +0 -1
- package/tmlpd-pi-extension/dist/providers/registry.d.ts +0 -55
- package/tmlpd-pi-extension/dist/providers/registry.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/providers/registry.js +0 -138
- package/tmlpd-pi-extension/dist/providers/registry.js.map +0 -1
- package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts +0 -68
- package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/routing/advancedRouter.js +0 -332
- package/tmlpd-pi-extension/dist/routing/advancedRouter.js.map +0 -1
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts +0 -101
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.js +0 -368
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts +0 -96
- package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/batchProcessor.js +0 -170
- package/tmlpd-pi-extension/dist/utils/batchProcessor.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/compression.d.ts +0 -61
- package/tmlpd-pi-extension/dist/utils/compression.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/compression.js +0 -281
- package/tmlpd-pi-extension/dist/utils/compression.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/reliability.d.ts +0 -74
- package/tmlpd-pi-extension/dist/utils/reliability.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/reliability.js +0 -177
- package/tmlpd-pi-extension/dist/utils/reliability.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts +0 -117
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js +0 -246
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts +0 -50
- package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/tokenUtils.js +0 -124
- package/tmlpd-pi-extension/dist/utils/tokenUtils.js.map +0 -1
- package/tmlpd-pi-extension/examples/QUICKSTART.md +0 -183
- package/tmlpd-pi-extension/package-lock.json +0 -79
- package/tmlpd-pi-extension/package.json +0 -172
- package/tmlpd-pi-extension/python/examples.py +0 -53
- package/tmlpd-pi-extension/python/integrations.py +0 -330
- package/tmlpd-pi-extension/python/setup.py +0 -28
- package/tmlpd-pi-extension/python/tmlpd.py +0 -369
- package/tmlpd-pi-extension/qna/REDDIT_GAP_ANALYSIS.md +0 -299
- package/tmlpd-pi-extension/qna/TMLPD_QNA.md +0 -751
- package/tmlpd-pi-extension/skill/SKILL.md +0 -238
- package/tmlpd-pi-extension/src/cache/responseCache.ts +0 -147
- package/tmlpd-pi-extension/src/cost/costTracker.ts +0 -302
- package/tmlpd-pi-extension/src/index.ts +0 -232
- package/tmlpd-pi-extension/src/memory/episodicMemory.ts +0 -257
- package/tmlpd-pi-extension/src/orchestration/haloOrchestrator.ts +0 -266
- package/tmlpd-pi-extension/src/orchestration/mctsWorkflow.ts +0 -262
- package/tmlpd-pi-extension/src/providers/localProvider.ts +0 -406
- package/tmlpd-pi-extension/src/providers/registry.ts +0 -164
- package/tmlpd-pi-extension/src/routing/ensembleVoting.ts +0 -159
- package/tmlpd-pi-extension/src/routing/queryTypePresets.ts +0 -136
- package/tmlpd-pi-extension/src/tools/tmlpdTools.ts +0 -433
- package/tmlpd-pi-extension/src/utils/batchProcessor.ts +0 -232
- package/tmlpd-pi-extension/src/utils/compression.ts +0 -325
- package/tmlpd-pi-extension/src/utils/reliability.ts +0 -221
- package/tmlpd-pi-extension/src/utils/tokenUtils.ts +0 -145
- package/tmlpd-pi-extension/tsconfig.json +0 -18
- package/tsconfig.build.json +0 -29
- package/tsconfig.json +0 -18
- /package/{docs/llms-full.txt → llms-full.txt.bak} +0 -0
package/test-council/council.md
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
# A3M Router Test Council
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
The A3M Router Test Council is a multi-agent testing approach inspired by the agent council pattern used in production LLM systems. Instead of a single monolithic test suite, we use **3 specialist agents**, each evaluating the codebase from a distinct perspective.
|
|
6
|
-
|
|
7
|
-
## Why Agent Council?
|
|
8
|
-
|
|
9
|
-
Traditional testing treats all tests equally. A council approach recognizes that:
|
|
10
|
-
|
|
11
|
-
1. **Different aspects of code quality require different testing strategies**
|
|
12
|
-
2. **Specialized agents can find issues a general test would miss**
|
|
13
|
-
3. **Council decisions are more robust than single-agent decisions**
|
|
14
|
-
|
|
15
|
-
## The 3 Specialist Agents
|
|
16
|
-
|
|
17
|
-
### 1. Structure Agent (`1-structure-tests.ts`)
|
|
18
|
-
|
|
19
|
-
**Focus:** Code architecture, type safety, and export validation
|
|
20
|
-
|
|
21
|
-
**Specialization:**
|
|
22
|
-
- Verifies all exports are present and correctly typed
|
|
23
|
-
- Validates provider configuration structure
|
|
24
|
-
- Checks model profile completeness
|
|
25
|
-
- Ensures class instantiation works
|
|
26
|
-
- Validates enum and constant values
|
|
27
|
-
|
|
28
|
-
**Key Questions:**
|
|
29
|
-
- Are all public APIs exported correctly?
|
|
30
|
-
- Do model profiles have required fields?
|
|
31
|
-
- Are provider configs valid?
|
|
32
|
-
- Do class constructors work?
|
|
33
|
-
|
|
34
|
-
**Example Findings:**
|
|
35
|
-
- Missing required fields in provider config
|
|
36
|
-
- Inconsistent type definitions
|
|
37
|
-
- Invalid enum values
|
|
38
|
-
- Missing method exports
|
|
39
|
-
|
|
40
|
-
### 2. Edge-Case Agent (`2-edge-case-tests.ts`)
|
|
41
|
-
|
|
42
|
-
**Focus:** Boundary conditions, error handling, and invalid inputs
|
|
43
|
-
|
|
44
|
-
**Specialization:**
|
|
45
|
-
- Tests empty and null inputs
|
|
46
|
-
- Validates extremely long inputs
|
|
47
|
-
- Checks unknown/invalid models
|
|
48
|
-
- Tests missing API key handling
|
|
49
|
-
- Verifies concurrent request safety
|
|
50
|
-
- Tests special characters and unicode
|
|
51
|
-
- Validates error recovery
|
|
52
|
-
|
|
53
|
-
**Key Questions:**
|
|
54
|
-
- What happens with empty strings?
|
|
55
|
-
- How does the system handle null inputs?
|
|
56
|
-
- What about 10,000 word queries?
|
|
57
|
-
- Does concurrent access cause race conditions?
|
|
58
|
-
- Are special characters handled safely?
|
|
59
|
-
|
|
60
|
-
**Example Findings:**
|
|
61
|
-
- Null pointer exceptions on empty inputs
|
|
62
|
-
- Buffer overflow on very long queries
|
|
63
|
-
- Race conditions in shared state
|
|
64
|
-
- Missing error boundaries
|
|
65
|
-
|
|
66
|
-
### 3. Performance Agent (`3-performance-tests.ts`)
|
|
67
|
-
|
|
68
|
-
**Focus:** Latency, throughput, and scalability
|
|
69
|
-
|
|
70
|
-
**Specialization:**
|
|
71
|
-
- Benchmarks token counting (< 1ms target)
|
|
72
|
-
- Measures route decision latency (< 5ms target)
|
|
73
|
-
- Tests memory tree operations
|
|
74
|
-
- Validates cost estimation accuracy
|
|
75
|
-
- Measures batch routing throughput
|
|
76
|
-
- Tests concurrent operation performance
|
|
77
|
-
|
|
78
|
-
**Key Questions:**
|
|
79
|
-
- Is token counting fast enough?
|
|
80
|
-
- Can we route 100 queries per second?
|
|
81
|
-
- Do memory operations scale?
|
|
82
|
-
- Is cost estimation accurate?
|
|
83
|
-
- Are operations deterministic?
|
|
84
|
-
|
|
85
|
-
**Example Findings:**
|
|
86
|
-
- Token counting too slow for real-time use
|
|
87
|
-
- Memory tree operations don't scale
|
|
88
|
-
- Inconsistent results under load
|
|
89
|
-
- Cost calculation drift over time
|
|
90
|
-
|
|
91
|
-
## Supporting Test Files
|
|
92
|
-
|
|
93
|
-
### 4. Integration Tests (`4-integration-tests.ts`)
|
|
94
|
-
|
|
95
|
-
**Focus:** Full pipeline workflows across components
|
|
96
|
-
|
|
97
|
-
**Tests:**
|
|
98
|
-
- Extract features → Route → Return structure
|
|
99
|
-
- Memory tree add → search → verify
|
|
100
|
-
- Cost tracker add → verify total
|
|
101
|
-
- Provider register → get → deregister
|
|
102
|
-
- Cross-component workflows
|
|
103
|
-
|
|
104
|
-
### 5. Cost Model Tests (`5-cost-model-tests.ts`)
|
|
105
|
-
|
|
106
|
-
**Focus:** Financial accuracy and budget enforcement
|
|
107
|
-
|
|
108
|
-
**Tests:**
|
|
109
|
-
- MODEL_COSTS matches actual provider pricing
|
|
110
|
-
- estimateCost accuracy across tiers (free/cheap/mid/premium)
|
|
111
|
-
- Cost comparison between models is correct
|
|
112
|
-
- Budget enforcer respects limits
|
|
113
|
-
- CostTracker calculations match expected values
|
|
114
|
-
|
|
115
|
-
## How the Council Evaluates
|
|
116
|
-
|
|
117
|
-
Each agent runs independently and reports:
|
|
118
|
-
|
|
119
|
-
```
|
|
120
|
-
Agent: Structure
|
|
121
|
-
✅ All exports present
|
|
122
|
-
✅ Provider configs valid
|
|
123
|
-
❌ MODEL_PROFILES missing context_window field
|
|
124
|
-
✅ Class instantiation works
|
|
125
|
-
|
|
126
|
-
Result: 47/48 passed
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
The council **passes** only if **all agents pass**. This ensures:
|
|
130
|
-
- No single aspect degrades
|
|
131
|
-
- Issues in any dimension are caught
|
|
132
|
-
- Overall system quality is maintained
|
|
133
|
-
|
|
134
|
-
## Success Criteria
|
|
135
|
-
|
|
136
|
-
For the council to pass, we require:
|
|
137
|
-
|
|
138
|
-
| Agent | Metric | Target |
|
|
139
|
-
|-------|--------|--------|
|
|
140
|
-
| Structure | Tests passed | 100% |
|
|
141
|
-
| Edge-Case | Tests passed | 100% |
|
|
142
|
-
| Performance | Latency targets met | 100% |
|
|
143
|
-
| Integration | Pipeline tests passed | 100% |
|
|
144
|
-
| Cost Model | Cost accuracy | 100% |
|
|
145
|
-
|
|
146
|
-
## Running the Council
|
|
147
|
-
|
|
148
|
-
```bash
|
|
149
|
-
# Run all tests
|
|
150
|
-
node test-council/1-structure-tests.ts
|
|
151
|
-
node test-council/2-edge-case-tests.ts
|
|
152
|
-
node test-council/3-performance-tests.ts
|
|
153
|
-
node test-council/4-integration-tests.ts
|
|
154
|
-
node test-council/5-cost-model-tests.ts
|
|
155
|
-
|
|
156
|
-
# Or use the test runner
|
|
157
|
-
./test-council/run-all.sh
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## Design Principles
|
|
161
|
-
|
|
162
|
-
1. **Independence**: Each test file runs standalone
|
|
163
|
-
2. **Isolation**: Tests don't depend on each other
|
|
164
|
-
3. **Clear reporting**: Pass/fail with actionable messages
|
|
165
|
-
4. **Focused scope**: Each agent has clear responsibilities
|
|
166
|
-
5. **Realistic inputs**: Tests use real-world query patterns
|
|
167
|
-
|
|
168
|
-
## Evolution
|
|
169
|
-
|
|
170
|
-
The council pattern can be extended:
|
|
171
|
-
|
|
172
|
-
- **Security Agent**: Input sanitization, injection attacks
|
|
173
|
-
- **Reliability Agent**: Network failure simulation
|
|
174
|
-
- **Scalability Agent**: Load testing with 1000+ concurrent users
|
|
175
|
-
- **Compatibility Agent**: Node.js version, dependency conflicts
|
|
176
|
-
|
|
177
|
-
## Credits
|
|
178
|
-
|
|
179
|
-
Inspired by:
|
|
180
|
-
- Ensemble methods in machine learning
|
|
181
|
-
- Agent councils in production LLM systems (Mixtral, GPT-4)
|
|
182
|
-
- Test-driven development principles
|
|
183
|
-
- Separation of concerns in software architecture
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import { EpisodicMemoryStore } from '../../tmlpd-pi-extension/src/memory/episodicMemory';
|
|
3
|
-
|
|
4
|
-
describe('EpisodicMemoryStore', () => {
|
|
5
|
-
let store: EpisodicMemoryStore;
|
|
6
|
-
|
|
7
|
-
const sampleEntry = {
|
|
8
|
-
task: {
|
|
9
|
-
description: 'Test task execution',
|
|
10
|
-
type: 'code_generation',
|
|
11
|
-
complexity: 3,
|
|
12
|
-
},
|
|
13
|
-
result: {
|
|
14
|
-
success: true,
|
|
15
|
-
output: 'Successfully generated code',
|
|
16
|
-
duration_ms: 1500,
|
|
17
|
-
},
|
|
18
|
-
agent: {
|
|
19
|
-
id: 'agent-1',
|
|
20
|
-
model: 'gpt-4o',
|
|
21
|
-
provider: 'openai',
|
|
22
|
-
},
|
|
23
|
-
metadata: { source: 'test' },
|
|
24
|
-
importance: 5,
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
beforeEach(() => {
|
|
28
|
-
store = new EpisodicMemoryStore(100);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
describe('store and query', () => {
|
|
32
|
-
it('stores an entry and returns a non-empty id', () => {
|
|
33
|
-
const id = store.store(sampleEntry);
|
|
34
|
-
expect(id).toBeTruthy();
|
|
35
|
-
expect(typeof id).toBe('string');
|
|
36
|
-
expect(id.length).toBeGreaterThan(0);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('stores multiple entries and retrieves them', () => {
|
|
40
|
-
store.store(sampleEntry);
|
|
41
|
-
store.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'Second task' } });
|
|
42
|
-
|
|
43
|
-
const results = store.query({ limit: 10 });
|
|
44
|
-
expect(results.length).toBe(2);
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it('filters by task type', () => {
|
|
48
|
-
store.store(sampleEntry);
|
|
49
|
-
store.store({
|
|
50
|
-
...sampleEntry,
|
|
51
|
-
task: { ...sampleEntry.task, type: 'data_analysis' },
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
const codeResults = store.query({ task_type: 'code_generation' });
|
|
55
|
-
expect(codeResults.length).toBe(1);
|
|
56
|
-
expect(codeResults[0].task.type).toBe('code_generation');
|
|
57
|
-
|
|
58
|
-
const analysisResults = store.query({ task_type: 'data_analysis' });
|
|
59
|
-
expect(analysisResults.length).toBe(1);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('filters by keywords', () => {
|
|
63
|
-
store.store(sampleEntry);
|
|
64
|
-
store.store({
|
|
65
|
-
...sampleEntry,
|
|
66
|
-
task: { ...sampleEntry.task, description: 'Database query optimization' },
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
const results = store.query({ keywords: ['database'] });
|
|
70
|
-
expect(results.length).toBe(1);
|
|
71
|
-
expect(results[0].task.description).toContain('Database');
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it('returns newest entries first', () => {
|
|
75
|
-
store.store(sampleEntry);
|
|
76
|
-
store.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'Second' } });
|
|
77
|
-
|
|
78
|
-
const results = store.query({ limit: 10 });
|
|
79
|
-
expect(results[results.length - 1].task.description).toBe('Second');
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('respects limit parameter', () => {
|
|
83
|
-
for (let i = 0; i < 10; i++) {
|
|
84
|
-
store.store({ ...sampleEntry, task: { ...sampleEntry.task, description: `Task ${i}` } });
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
expect(store.query({ limit: 3 }).length).toBe(3);
|
|
88
|
-
expect(store.query({ limit: 20 }).length).toBe(10);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
describe('max entries eviction', () => {
|
|
93
|
-
it('evicts oldest entries when at capacity', () => {
|
|
94
|
-
const smallStore = new EpisodicMemoryStore(3);
|
|
95
|
-
smallStore.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'A' } });
|
|
96
|
-
smallStore.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'B' } });
|
|
97
|
-
smallStore.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'C' } });
|
|
98
|
-
smallStore.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'D' } });
|
|
99
|
-
|
|
100
|
-
expect(smallStore.query({ limit: 10 }).length).toBe(3);
|
|
101
|
-
const descriptions = smallStore.query({ limit: 10 }).map(e => e.task.description);
|
|
102
|
-
expect(descriptions).not.toContain('A');
|
|
103
|
-
expect(descriptions).toContain('D');
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
describe('getSimilarTasks', () => {
|
|
108
|
-
it('finds tasks with overlapping words', () => {
|
|
109
|
-
store.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'Build REST API endpoint' } });
|
|
110
|
-
store.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'Deploy database cluster' } });
|
|
111
|
-
store.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'Fix API authentication bug' } });
|
|
112
|
-
|
|
113
|
-
const similar = store.getSimilarTasks('Build API endpoint');
|
|
114
|
-
expect(similar.length).toBeGreaterThanOrEqual(1);
|
|
115
|
-
// "API" should match entries 0 and 2
|
|
116
|
-
const descriptions = similar.map(e => e.task.description);
|
|
117
|
-
expect(descriptions.some(d => d.includes('API'))).toBe(true);
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('returns empty array for no matches', () => {
|
|
121
|
-
store.store(sampleEntry);
|
|
122
|
-
const similar = store.getSimilarTasks('xyznonexistent12345');
|
|
123
|
-
expect(similar.length).toBe(0);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it('respects limit parameter', () => {
|
|
127
|
-
store.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'Task A' } });
|
|
128
|
-
store.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'Task B' } });
|
|
129
|
-
store.store({ ...sampleEntry, task: { ...sampleEntry.task, description: 'Task C' } });
|
|
130
|
-
|
|
131
|
-
const similar = store.getSimilarTasks('Task', 2);
|
|
132
|
-
expect(similar.length).toBeLessThanOrEqual(2);
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
describe('getStats', () => {
|
|
137
|
-
it('returns zeroed stats for empty store', () => {
|
|
138
|
-
const stats = store.getStats();
|
|
139
|
-
expect(stats.total_entries).toBe(0);
|
|
140
|
-
expect(stats.indexed_keywords).toBe(0);
|
|
141
|
-
expect(stats.success_rate).toBe(0);
|
|
142
|
-
expect(stats.avg_duration_ms).toBe(0);
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
it('returns accurate stats after entries', () => {
|
|
146
|
-
store.store(sampleEntry);
|
|
147
|
-
store.store({
|
|
148
|
-
...sampleEntry,
|
|
149
|
-
result: { ...sampleEntry.result, success: false },
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
const stats = store.getStats();
|
|
153
|
-
expect(stats.total_entries).toBe(2);
|
|
154
|
-
expect(stats.success_rate).toBe(0.5);
|
|
155
|
-
expect(stats.avg_duration_ms).toBe(1500);
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
describe('clear', () => {
|
|
160
|
-
it('removes all entries', () => {
|
|
161
|
-
store.store(sampleEntry);
|
|
162
|
-
store.store(sampleEntry);
|
|
163
|
-
expect(store.query({ limit: 10 }).length).toBe(2);
|
|
164
|
-
|
|
165
|
-
store.clear();
|
|
166
|
-
expect(store.query({ limit: 10 }).length).toBe(0);
|
|
167
|
-
expect(store.getStats().total_entries).toBe(0);
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
describe('persistence', () => {
|
|
172
|
-
let fsMock: any;
|
|
173
|
-
|
|
174
|
-
beforeEach(() => {
|
|
175
|
-
fsMock = {
|
|
176
|
-
existsSync: vi.fn().mockReturnValue(false),
|
|
177
|
-
readFileSync: vi.fn(),
|
|
178
|
-
writeFileSync: vi.fn(),
|
|
179
|
-
unlinkSync: vi.fn(),
|
|
180
|
-
};
|
|
181
|
-
|
|
182
|
-
vi.doMock('fs', () => fsMock);
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
afterEach(() => {
|
|
186
|
-
vi.restoreAllMocks();
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
it('loadFromDisk returns false when file does not exist', () => {
|
|
190
|
-
const store2 = new EpisodicMemoryStore(100, '/tmp/test-memory.json');
|
|
191
|
-
expect(store2['loadFromDisk']()).toBe(false);
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
it('saveToDisk returns false when no persistence path', () => {
|
|
195
|
-
expect(store.saveToDisk()).toBe(false);
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
it('autoPersist triggers after every 3 entries', () => {
|
|
199
|
-
const saveSpy = vi.spyOn(store as any, 'autoPersist');
|
|
200
|
-
store.store(sampleEntry);
|
|
201
|
-
store.store(sampleEntry);
|
|
202
|
-
expect(saveSpy).toHaveBeenCalledTimes(2); // called on each store
|
|
203
|
-
expect((store as any).entries.length % 3 === 0).toBe(false);
|
|
204
|
-
|
|
205
|
-
store.store(sampleEntry); // 3rd entry
|
|
206
|
-
expect((store as any).entries.length % 3 === 0).toBe(true);
|
|
207
|
-
});
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
describe('keyword indexing', () => {
|
|
211
|
-
it('indexes words longer than 3 characters', () => {
|
|
212
|
-
store.store(sampleEntry);
|
|
213
|
-
const index = (store as any).keywordIndex as Map<string, string[]>;
|
|
214
|
-
|
|
215
|
-
// 'test' (4 chars) should be indexed, 'is' (2 chars) should not
|
|
216
|
-
const keys = Array.from(index.keys());
|
|
217
|
-
expect(keys.some(k => k.length <= 3)).toBe(false);
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
it('automatically indexes on store', () => {
|
|
221
|
-
store.store(sampleEntry);
|
|
222
|
-
const index = (store as any).keywordIndex as Map<string, string[]>;
|
|
223
|
-
expect(index.has('test')).toBe(true);
|
|
224
|
-
expect(index.has('task')).toBe(true);
|
|
225
|
-
});
|
|
226
|
-
});
|
|
227
|
-
});
|