nodebench-mcp 2.15.0 → 2.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/LICENSE +21 -0
  2. package/NODEBENCH_AGENTS.md +2 -2
  3. package/README.md +514 -82
  4. package/dist/__tests__/analytics.test.d.ts +11 -0
  5. package/dist/__tests__/analytics.test.js +546 -0
  6. package/dist/__tests__/analytics.test.js.map +1 -0
  7. package/dist/__tests__/architectComplex.test.d.ts +1 -0
  8. package/dist/__tests__/architectComplex.test.js +375 -0
  9. package/dist/__tests__/architectComplex.test.js.map +1 -0
  10. package/dist/__tests__/architectSmoke.test.d.ts +1 -0
  11. package/dist/__tests__/architectSmoke.test.js +92 -0
  12. package/dist/__tests__/architectSmoke.test.js.map +1 -0
  13. package/dist/__tests__/dynamicLoading.test.d.ts +1 -0
  14. package/dist/__tests__/dynamicLoading.test.js +278 -0
  15. package/dist/__tests__/dynamicLoading.test.js.map +1 -0
  16. package/dist/__tests__/evalHarness.test.js +7 -2
  17. package/dist/__tests__/evalHarness.test.js.map +1 -1
  18. package/dist/__tests__/gaiaCapabilityEval.test.js +229 -12
  19. package/dist/__tests__/gaiaCapabilityEval.test.js.map +1 -1
  20. package/dist/__tests__/gaiaCapabilityMediaEval.test.js +194 -109
  21. package/dist/__tests__/gaiaCapabilityMediaEval.test.js.map +1 -1
  22. package/dist/__tests__/helpers/answerMatch.js +22 -22
  23. package/dist/__tests__/presetRealWorldBench.test.js +11 -2
  24. package/dist/__tests__/presetRealWorldBench.test.js.map +1 -1
  25. package/dist/__tests__/tools.test.js +10 -4
  26. package/dist/__tests__/tools.test.js.map +1 -1
  27. package/dist/__tests__/toolsetGatingEval.test.js +12 -4
  28. package/dist/__tests__/toolsetGatingEval.test.js.map +1 -1
  29. package/dist/analytics/index.d.ts +10 -0
  30. package/dist/analytics/index.js +11 -0
  31. package/dist/analytics/index.js.map +1 -0
  32. package/dist/analytics/projectDetector.d.ts +19 -0
  33. package/dist/analytics/projectDetector.js +259 -0
  34. package/dist/analytics/projectDetector.js.map +1 -0
  35. package/dist/analytics/schema.d.ts +57 -0
  36. package/dist/analytics/schema.js +157 -0
  37. package/dist/analytics/schema.js.map +1 -0
  38. package/dist/analytics/smartPreset.d.ts +63 -0
  39. package/dist/analytics/smartPreset.js +300 -0
  40. package/dist/analytics/smartPreset.js.map +1 -0
  41. package/dist/analytics/toolTracker.d.ts +59 -0
  42. package/dist/analytics/toolTracker.js +163 -0
  43. package/dist/analytics/toolTracker.js.map +1 -0
  44. package/dist/analytics/usageStats.d.ts +64 -0
  45. package/dist/analytics/usageStats.js +252 -0
  46. package/dist/analytics/usageStats.js.map +1 -0
  47. package/dist/db.js +359 -321
  48. package/dist/db.js.map +1 -1
  49. package/dist/index.d.ts +2 -1
  50. package/dist/index.js +653 -84
  51. package/dist/index.js.map +1 -1
  52. package/dist/tools/architectTools.d.ts +15 -0
  53. package/dist/tools/architectTools.js +304 -0
  54. package/dist/tools/architectTools.js.map +1 -0
  55. package/dist/tools/critterTools.js +14 -14
  56. package/dist/tools/emailTools.d.ts +15 -0
  57. package/dist/tools/emailTools.js +664 -0
  58. package/dist/tools/emailTools.js.map +1 -0
  59. package/dist/tools/metaTools.js +660 -0
  60. package/dist/tools/metaTools.js.map +1 -1
  61. package/dist/tools/parallelAgentTools.js +176 -176
  62. package/dist/tools/patternTools.js +11 -11
  63. package/dist/tools/progressiveDiscoveryTools.d.ts +5 -1
  64. package/dist/tools/progressiveDiscoveryTools.js +113 -21
  65. package/dist/tools/progressiveDiscoveryTools.js.map +1 -1
  66. package/dist/tools/researchWritingTools.js +42 -42
  67. package/dist/tools/rssTools.d.ts +8 -0
  68. package/dist/tools/rssTools.js +833 -0
  69. package/dist/tools/rssTools.js.map +1 -0
  70. package/dist/tools/toolRegistry.d.ts +17 -0
  71. package/dist/tools/toolRegistry.js +236 -17
  72. package/dist/tools/toolRegistry.js.map +1 -1
  73. package/dist/tools/voiceBridgeTools.js +498 -498
  74. package/dist/toolsetRegistry.d.ts +10 -0
  75. package/dist/toolsetRegistry.js +84 -0
  76. package/dist/toolsetRegistry.js.map +1 -0
  77. package/package.json +12 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rssTools.js","sourceRoot":"","sources":["../../src/tools/rssTools.ts"],"names":[],"mappings":"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"}
@@ -105,6 +105,23 @@ export declare function hybridSearch(query: string, tools: Array<{
105
105
  explain?: boolean;
106
106
  /** Pre-computed query embedding vector for semantic search (passed from async caller) */
107
107
  embeddingQueryVec?: Float32Array;
108
+ /** If true, search ALL_REGISTRY_ENTRIES (full 175-tool registry) regardless of loaded preset.
109
+ * Needed for dynamic loading: discover_tools must find unloaded tools to suggest load_toolset. */
110
+ searchFullRegistry?: boolean;
111
+ /** Ablation flags: disable individual strategies to measure their contribution */
112
+ ablation?: {
113
+ disableSynonyms?: boolean;
114
+ disableFuzzy?: boolean;
115
+ disableTagCoverage?: boolean;
116
+ disableTfIdf?: boolean;
117
+ disableNgram?: boolean;
118
+ disableBigram?: boolean;
119
+ disableDense?: boolean;
120
+ disableDomainBoost?: boolean;
121
+ disableTraceEdges?: boolean;
122
+ disablePrefix?: boolean;
123
+ disableEmbedding?: boolean;
124
+ };
108
125
  }): SearchResult[];
109
126
  /** Available search modes for discover_tools */
110
127
  export declare const SEARCH_MODES: SearchMode[];
@@ -1097,7 +1097,7 @@ const REGISTRY_ENTRIES = [
1097
1097
  {
1098
1098
  name: "call_llm",
1099
1099
  category: "llm",
1100
- tags: ["llm", "call", "generate", "prompt", "gemini", "openai", "anthropic", "gpt", "claude"],
1100
+ tags: ["llm", "call", "generate", "prompt", "gemini", "openai", "anthropic", "gpt", "claude", "model", "ai", "inference", "completion", "analyze", "text"],
1101
1101
  quickRef: {
1102
1102
  nextAction: "LLM response received. Validate output quality. Use for analysis, generation, or judgment tasks.",
1103
1103
  nextTools: ["extract_structured_data", "record_learning"],
@@ -1107,7 +1107,7 @@ const REGISTRY_ENTRIES = [
1107
1107
  {
1108
1108
  name: "extract_structured_data",
1109
1109
  category: "llm",
1110
- tags: ["extract", "structured", "data", "json", "parse", "schema", "llm"],
1110
+ tags: ["extract", "structured", "data", "json", "parse", "schema", "llm", "model", "ai", "transform", "output"],
1111
1111
  quickRef: {
1112
1112
  nextAction: "Structured data extracted. Validate against expected schema. Use for downstream processing.",
1113
1113
  nextTools: ["record_eval_result", "record_learning"],
@@ -1117,7 +1117,7 @@ const REGISTRY_ENTRIES = [
1117
1117
  {
1118
1118
  name: "benchmark_models",
1119
1119
  category: "llm",
1120
- tags: ["benchmark", "models", "compare", "latency", "quality", "cost", "llm"],
1120
+ tags: ["benchmark", "models", "compare", "latency", "quality", "cost", "llm", "ai", "gpt", "claude", "gemini", "evaluate"],
1121
1121
  quickRef: {
1122
1122
  nextAction: "Benchmark complete. Compare models on quality, latency, and cost. Record winner with record_learning.",
1123
1123
  nextTools: ["record_learning", "call_llm"],
@@ -1495,6 +1495,17 @@ const REGISTRY_ENTRIES = [
1495
1495
  },
1496
1496
  phase: "meta",
1497
1497
  },
1498
+ {
1499
+ name: "check_mcp_setup",
1500
+ category: "meta",
1501
+ tags: ["setup", "wizard", "diagnostic", "config", "env", "api-key", "onboarding", "health-check", "status", "readiness"],
1502
+ quickRef: {
1503
+ nextAction: "Review the readiness report. Configure missing domains by following setupInstructions. Re-run to verify.",
1504
+ nextTools: ["check_email_setup", "discover_tools", "getMethodology"],
1505
+ tip: "Run this FIRST when starting with NodeBench MCP. Checks all env vars, API keys, npm packages, and servers across every domain.",
1506
+ },
1507
+ phase: "meta",
1508
+ },
1498
1509
  // ── Image solver tools (GAIA media lane) ──────────────────────────────
1499
1510
  {
1500
1511
  name: "solve_red_green_deviation_average_from_image",
@@ -1838,6 +1849,141 @@ const REGISTRY_ENTRIES = [
1838
1849
  },
1839
1850
  phase: "research",
1840
1851
  },
1852
+ // ═══ EMAIL (SMTP send, IMAP read, draft replies) ═══
1853
+ {
1854
+ name: "send_email",
1855
+ category: "email",
1856
+ tags: ["email", "smtp", "send", "gmail", "notification", "alert", "digest", "report"],
1857
+ quickRef: {
1858
+ nextAction: "Email sent. Log the action with save_session_note and continue with your workflow.",
1859
+ nextTools: ["save_session_note", "record_learning", "build_research_digest"],
1860
+ methodology: "agent_contract",
1861
+ tip: "Requires EMAIL_USER and EMAIL_PASS env vars. For Gmail, use an App Password. Supports html parameter for rich emails.",
1862
+ },
1863
+ phase: "implement",
1864
+ },
1865
+ {
1866
+ name: "read_emails",
1867
+ category: "email",
1868
+ tags: ["email", "imap", "read", "inbox", "gmail", "fetch", "messages", "unread"],
1869
+ quickRef: {
1870
+ nextAction: "Emails retrieved. Review subjects/content, then draft_email_reply for actionable items or save_session_note to persist context.",
1871
+ nextTools: ["draft_email_reply", "save_session_note", "extract_structured_data"],
1872
+ methodology: "agent_contract",
1873
+ tip: "Requires EMAIL_USER and EMAIL_PASS env vars. Use folder param for specific mailboxes (INBOX default). Limit controls count.",
1874
+ },
1875
+ phase: "research",
1876
+ },
1877
+ {
1878
+ name: "draft_email_reply",
1879
+ category: "email",
1880
+ tags: ["email", "reply", "draft", "compose", "response", "assistant"],
1881
+ quickRef: {
1882
+ nextAction: "Draft generated. Review the draft, then send_email to deliver or edit and re-draft.",
1883
+ nextTools: ["send_email", "save_session_note"],
1884
+ methodology: "agent_contract",
1885
+ tip: "Generates a professional reply draft from original email context. Always review before sending.",
1886
+ },
1887
+ phase: "implement",
1888
+ },
1889
+ // ═══ RSS (subscribe, fetch, digest feeds) ═══
1890
+ {
1891
+ name: "add_rss_source",
1892
+ category: "rss",
1893
+ tags: ["rss", "atom", "feed", "subscribe", "source", "monitor", "research", "news"],
1894
+ quickRef: {
1895
+ nextAction: "RSS source registered. Call fetch_rss_feeds to pull articles, then build_research_digest for a summary.",
1896
+ nextTools: ["fetch_rss_feeds", "build_research_digest", "save_session_note"],
1897
+ methodology: "research_digest",
1898
+ tip: "Validates the feed URL on add. Use category param to group sources for filtered digests.",
1899
+ },
1900
+ phase: "research",
1901
+ },
1902
+ {
1903
+ name: "fetch_rss_feeds",
1904
+ category: "rss",
1905
+ tags: ["rss", "atom", "feed", "fetch", "articles", "news", "update", "pull"],
1906
+ quickRef: {
1907
+ nextAction: "Feeds fetched. New articles stored in SQLite. Call build_research_digest to generate a summary of new items.",
1908
+ nextTools: ["build_research_digest", "save_session_note", "record_learning"],
1909
+ methodology: "research_digest",
1910
+ tip: "Deduplicates automatically — same article won't be stored twice. Fetches all registered sources if no URLs specified.",
1911
+ },
1912
+ phase: "research",
1913
+ },
1914
+ {
1915
+ name: "build_research_digest",
1916
+ category: "rss",
1917
+ tags: ["rss", "digest", "summary", "research", "newsletter", "report", "markdown", "html"],
1918
+ quickRef: {
1919
+ nextAction: "Digest generated. Use send_email with html format to distribute, or save_session_note to persist the digest.",
1920
+ nextTools: ["send_email", "save_session_note", "record_learning"],
1921
+ methodology: "research_digest",
1922
+ tip: "Marks articles as seen after digest — next call only shows truly new content. Use format='html' for email-ready output.",
1923
+ },
1924
+ phase: "implement",
1925
+ },
1926
+ // ═══ SETUP WIZARDS ═══
1927
+ {
1928
+ name: "check_email_setup",
1929
+ category: "email",
1930
+ tags: ["email", "setup", "wizard", "diagnostic", "config", "smtp", "imap", "onboarding", "gmail", "outlook"],
1931
+ quickRef: {
1932
+ nextAction: "Setup check complete. If ready, try send_email or read_emails. If not, follow the setup instructions.",
1933
+ nextTools: ["send_email", "read_emails", "get_workflow_chain"],
1934
+ methodology: "agent_contract",
1935
+ tip: "Run this FIRST before using any email tools. Tests SMTP/IMAP connections and generates MCP config snippets.",
1936
+ },
1937
+ phase: "research",
1938
+ },
1939
+ {
1940
+ name: "scaffold_research_pipeline",
1941
+ category: "rss",
1942
+ tags: ["rss", "scaffold", "pipeline", "project", "cron", "automation", "digest", "email", "standalone", "setup", "wizard"],
1943
+ quickRef: {
1944
+ nextAction: "Pipeline scaffolded. Save the generated files, configure .env, add feeds, and run.",
1945
+ nextTools: ["save_session_note", "check_email_setup"],
1946
+ methodology: "research_digest",
1947
+ tip: "Generates a ZERO-dependency standalone Node.js project. Copy files, add feeds, run. No nodebench-mcp needed at runtime.",
1948
+ },
1949
+ phase: "implement",
1950
+ },
1951
+ // ═══════════════════════════════════════════
1952
+ // ARCHITECT — Structural code analysis
1953
+ // ═══════════════════════════════════════════
1954
+ {
1955
+ name: "scan_capabilities",
1956
+ category: "architect",
1957
+ tags: ["structural-analysis", "capability-scan", "code-patterns", "regex-scan", "react", "backend", "state-management", "layout", "interaction", "rendering"],
1958
+ quickRef: {
1959
+ nextAction: "Review the capability report. Use verify_concept_support to check if a specific concept is implemented.",
1960
+ nextTools: ["verify_concept_support", "generate_implementation_plan", "save_session_note"],
1961
+ tip: "Pure regex analysis — no LLM needed, instant results. Scans React hooks, layout patterns, interaction handlers, rendering, and backend patterns.",
1962
+ },
1963
+ phase: "research",
1964
+ },
1965
+ {
1966
+ name: "verify_concept_support",
1967
+ category: "architect",
1968
+ tags: ["concept-verification", "gap-analysis", "structural-analysis", "regex-scan", "implementation-check", "progress-tracking"],
1969
+ quickRef: {
1970
+ nextAction: "If gaps found, use generate_implementation_plan to build a plan. If fully implemented, move on.",
1971
+ nextTools: ["generate_implementation_plan", "scan_capabilities", "record_learning"],
1972
+ tip: "Define required signatures from web research, then verify against code. Results persisted to SQLite for tracking progress.",
1973
+ },
1974
+ phase: "research",
1975
+ },
1976
+ {
1977
+ name: "generate_implementation_plan",
1978
+ category: "architect",
1979
+ tags: ["implementation-plan", "gap-analysis", "code-generation", "structural-analysis", "concept-verification", "strategy"],
1980
+ quickRef: {
1981
+ nextAction: "Follow the step-by-step plan. After each step, re-run verify_concept_support to track progress.",
1982
+ nextTools: ["verify_concept_support", "scan_capabilities", "start_verification_cycle"],
1983
+ tip: "Pass current_context from scan_capabilities to get conflict-aware injection strategies.",
1984
+ },
1985
+ phase: "implement",
1986
+ },
1841
1987
  ];
1842
1988
  // ── Exported lookup structures ───────────────────────────────────────────
1843
1989
  /** Map of tool name → registry entry for O(1) lookup */
@@ -1892,6 +2038,9 @@ const CATEGORY_COMPLEXITY = {
1892
2038
  seo: "medium",
1893
2039
  voice_bridge: "medium",
1894
2040
  critter: "low",
2041
+ email: "medium",
2042
+ rss: "low",
2043
+ architect: "low",
1895
2044
  };
1896
2045
  /** Per-tool complexity overrides (when category default is wrong) */
1897
2046
  const TOOL_COMPLEXITY_OVERRIDES = {
@@ -1961,6 +2110,7 @@ export function getToolComplexity(toolName) {
1961
2110
  }
1962
2111
  // ── Synonym / semantic expansion map ──────────────────────────────────────
1963
2112
  const SYNONYM_MAP = {
2113
+ // ── Existing technical synonyms ──
1964
2114
  verify: ["validate", "check", "confirm", "test", "assert", "ensure", "correct"],
1965
2115
  test: ["verify", "validate", "check", "assert", "spec", "expect"],
1966
2116
  search: ["find", "discover", "lookup", "query", "locate", "browse"],
@@ -1969,7 +2119,7 @@ const SYNONYM_MAP = {
1969
2119
  setup: ["bootstrap", "init", "configure", "scaffold", "create"],
1970
2120
  fix: ["resolve", "repair", "debug", "patch", "correct"],
1971
2121
  deploy: ["ship", "publish", "release", "launch", "ci", "cd", "pipeline"],
1972
- analyze: ["inspect", "review", "examine", "audit", "scan"],
2122
+ analyze: ["inspect", "review", "examine", "audit", "scan", "screenshot"],
1973
2123
  monitor: ["watch", "observe", "track", "follow"],
1974
2124
  security: ["vulnerability", "audit", "cve", "secret", "credential", "leak", "exposure"],
1975
2125
  benchmark: ["measure", "evaluate", "score", "grade", "performance", "capability"],
@@ -1982,7 +2132,7 @@ const SYNONYM_MAP = {
1982
2132
  ui: ["frontend", "visual", "screenshot", "responsive", "layout", "css", "component"],
1983
2133
  llm: ["model", "ai", "generate", "prompt", "gpt", "claude", "gemini"],
1984
2134
  migrate: ["upgrade", "update", "port", "convert", "transition", "refactor"],
1985
- review: ["inspect", "audit", "pr", "pull-request", "feedback", "critique"],
2135
+ review: ["inspect", "audit", "pr", "pull-request", "feedback", "critique", "merge"],
1986
2136
  performance: ["speed", "latency", "optimize", "fast", "slow", "bottleneck"],
1987
2137
  data: ["csv", "xlsx", "json", "pdf", "file", "parse", "extract", "spreadsheet"],
1988
2138
  paper: ["academic", "research", "write", "publish", "neurips", "icml", "arxiv", "section"],
@@ -1998,6 +2148,31 @@ const SYNONYM_MAP = {
1998
2148
  why: ["purpose", "reason", "intentionality", "motivation", "goal", "critter"],
1999
2149
  purpose: ["why", "reason", "intentionality", "motivation", "goal", "critter"],
2000
2150
  reflect: ["think", "pause", "reconsider", "intentionality", "metacognition", "critter"],
2151
+ // ── New user natural language expansions (ablation-driven) ──
2152
+ website: ["seo", "url", "web", "fetch", "page", "lighthouse", "performance"],
2153
+ webpage: ["seo", "url", "web", "fetch", "page", "html"],
2154
+ fast: ["seo", "performance", "speed", "latency", "lighthouse"],
2155
+ slow: ["seo", "performance", "speed", "latency", "lighthouse", "bottleneck"],
2156
+ inbox: ["email", "read_emails", "send_email", "messages"],
2157
+ email: ["send_email", "read_emails", "inbox", "messages", "smtp", "imap"],
2158
+ ai: ["llm", "model", "prompt", "generate", "gpt", "claude", "gemini", "call_llm"],
2159
+ summarize: ["llm", "extract", "generate", "analyze", "call_llm"],
2160
+ bugs: ["scan", "code", "analysis", "dependencies", "vulnerabilities", "debug"],
2161
+ readme: ["documentation", "generate", "report", "markdown", "document"],
2162
+ compiles: ["closed_loop", "build", "test", "verify", "compile"],
2163
+ works: ["test", "verify", "closed_loop", "flywheel", "quality", "check"],
2164
+ commits: ["git", "commit", "messages", "conventional", "pr"],
2165
+ push: ["git", "commit", "merge", "pr", "deploy"],
2166
+ merge: ["git", "pr", "review", "checklist", "enforce"],
2167
+ open: ["read", "file", "csv", "json", "parse", "load"],
2168
+ look: ["read", "analyze", "inspect", "view", "examine", "fetch"],
2169
+ good: ["quality", "gate", "check", "validate", "analysis"],
2170
+ screenshot: ["analyze", "capture", "vision", "ui", "responsive", "visual"],
2171
+ run: ["test", "execute", "closed_loop", "quality", "cli"],
2172
+ check: ["verify", "validate", "audit", "scan", "review", "gate", "test"],
2173
+ help: ["generate", "create", "scaffold", "analyze", "recommend"],
2174
+ computer: ["llm", "ai", "model", "analyze", "extract"],
2175
+ text: ["extract", "parse", "read", "llm", "structured", "analyze"],
2001
2176
  };
2002
2177
  // ── TF-IDF: compute inverse document frequency for tags ───────────────────
2003
2178
  let _idfCache = null;
@@ -2309,6 +2484,7 @@ export function hybridSearch(query, tools, options) {
2309
2484
  const explain = options?.explain ?? false;
2310
2485
  const mode = options?.mode ?? "hybrid";
2311
2486
  const idf = computeIDF();
2487
+ const ab = options?.ablation ?? {};
2312
2488
  // Regex mode: compile pattern, match against name+description
2313
2489
  let regexPattern = null;
2314
2490
  if (mode === "regex") {
@@ -2367,7 +2543,16 @@ export function hybridSearch(query, tools, options) {
2367
2543
  }
2368
2544
  }
2369
2545
  const toolScores = new Map();
2370
- for (const tool of tools) {
2546
+ // When searchFullRegistry is enabled, search ALL registry entries (not just loaded tools).
2547
+ // This lets discover_tools find unloaded tools and suggest load_toolset.
2548
+ const toolDescMap = new Map(tools.map(t => [t.name, t.description]));
2549
+ const searchList = options?.searchFullRegistry
2550
+ ? ALL_REGISTRY_ENTRIES.map(e => ({
2551
+ name: e.name,
2552
+ description: toolDescMap.get(e.name) ?? `${e.tags.join(" ")} ${e.category} ${e.phase}`,
2553
+ }))
2554
+ : tools;
2555
+ for (const tool of searchList) {
2371
2556
  const entry = TOOL_REGISTRY.get(tool.name);
2372
2557
  if (!entry)
2373
2558
  continue;
@@ -2408,7 +2593,7 @@ export function hybridSearch(query, tools, options) {
2408
2593
  }
2409
2594
  }
2410
2595
  // ── MODE: prefix ──
2411
- if (mode === "hybrid" || mode === "prefix") {
2596
+ if ((mode === "hybrid" || mode === "prefix") && !ab.disablePrefix) {
2412
2597
  for (const word of queryWords) {
2413
2598
  if (nameLower.startsWith(word)) {
2414
2599
  score += 20;
@@ -2440,7 +2625,7 @@ export function hybridSearch(query, tools, options) {
2440
2625
  // Tag exact match (weighted by TF-IDF)
2441
2626
  if (entry.tags.includes(word)) {
2442
2627
  const idfWeight = idf.get(word) ?? 3;
2443
- const tagScore = Math.round(10 * (idfWeight / 3));
2628
+ const tagScore = ab.disableTfIdf ? 10 : Math.round(10 * (idfWeight / 3));
2444
2629
  score += tagScore;
2445
2630
  reasons.push(`keyword:tag(${word},idf=${idfWeight.toFixed(1)})`);
2446
2631
  }
@@ -2465,9 +2650,21 @@ export function hybridSearch(query, tools, options) {
2465
2650
  score += 12;
2466
2651
  reasons.push(`keyword:methodology(${entry.quickRef.methodology})`);
2467
2652
  }
2653
+ // ── TAG COVERAGE BONUS: reward tools where many query words hit tags ──
2654
+ // If 60%+ of query words match tags, that's a strong relevance signal.
2655
+ if (queryWords.length >= 3 && !ab.disableTagCoverage) {
2656
+ const tagSet = new Set(entry.tags);
2657
+ const hits = queryWords.filter(w => tagSet.has(w)).length;
2658
+ const coverage = hits / queryWords.length;
2659
+ if (coverage >= 0.6) {
2660
+ const coverageBonus = Math.round(coverage * hits * 5);
2661
+ score += coverageBonus;
2662
+ reasons.push(`tag_coverage:${hits}/${queryWords.length}(${(coverage * 100).toFixed(0)}%,+${coverageBonus})`);
2663
+ }
2664
+ }
2468
2665
  }
2469
2666
  // ── SEMANTIC: synonym expansion (only score expanded words, not original) ──
2470
- if (mode === "hybrid" || mode === "semantic") {
2667
+ if ((mode === "hybrid" || mode === "semantic") && !ab.disableSynonyms) {
2471
2668
  for (const syn of expandedWords) {
2472
2669
  if (queryWords.includes(syn))
2473
2670
  continue; // skip original words
@@ -2486,7 +2683,7 @@ export function hybridSearch(query, tools, options) {
2486
2683
  }
2487
2684
  }
2488
2685
  // ── FUZZY: Levenshtein distance for typo tolerance ──
2489
- if (mode === "hybrid" || mode === "fuzzy") {
2686
+ if ((mode === "hybrid" || mode === "fuzzy") && !ab.disableFuzzy) {
2490
2687
  for (const word of queryWords) {
2491
2688
  if (word.length < 4)
2492
2689
  continue; // skip short words for fuzzy
@@ -2513,7 +2710,7 @@ export function hybridSearch(query, tools, options) {
2513
2710
  }
2514
2711
  }
2515
2712
  // ── N-GRAM: trigram similarity ──
2516
- if (mode === "hybrid" || mode === "fuzzy") {
2713
+ if ((mode === "hybrid" || mode === "fuzzy") && !ab.disableNgram) {
2517
2714
  for (const word of queryWords) {
2518
2715
  if (word.length < 4)
2519
2716
  continue;
@@ -2534,7 +2731,7 @@ export function hybridSearch(query, tools, options) {
2534
2731
  }
2535
2732
  }
2536
2733
  // ── BIGRAM: phrase matching ──
2537
- if (queryBigrams.length > 0) {
2734
+ if (queryBigrams.length > 0 && !ab.disableBigram) {
2538
2735
  for (const bigram of queryBigrams) {
2539
2736
  if (allText.includes(bigram)) {
2540
2737
  score += 15;
@@ -2543,7 +2740,7 @@ export function hybridSearch(query, tools, options) {
2543
2740
  }
2544
2741
  }
2545
2742
  // ── DENSE: TF-IDF cosine similarity (query vec pre-computed above) ──
2546
- if (denseQueryVec && denseDocVectors) {
2743
+ if (denseQueryVec && denseDocVectors && !ab.disableDense) {
2547
2744
  const docVec = denseDocVectors.get(tool.name);
2548
2745
  if (docVec) {
2549
2746
  const sim = cosineSimilarity(denseQueryVec, docVec);
@@ -2555,7 +2752,7 @@ export function hybridSearch(query, tools, options) {
2555
2752
  }
2556
2753
  }
2557
2754
  // ── EMBEDDING: Agent-as-a-Graph bipartite RRF (ranks pre-computed above) ──
2558
- if (embToolRanks && embDomainRanks) {
2755
+ if (embToolRanks && embDomainRanks && !ab.disableEmbedding) {
2559
2756
  const toolRank = embToolRanks.get(tool.name);
2560
2757
  if (toolRank) {
2561
2758
  const rrfScore = Math.round(WRRF_ALPHA_T * 1000 / (WRRF_K + toolRank));
@@ -2595,18 +2792,18 @@ export function hybridSearch(query, tools, options) {
2595
2792
  neighbors.forEach((n) => traceBoostTargets.add(n));
2596
2793
  }
2597
2794
  const results = [];
2598
- for (const tool of tools) {
2795
+ for (const tool of searchList) {
2599
2796
  const entry = TOOL_REGISTRY.get(tool.name);
2600
2797
  const scored = toolScores.get(tool.name);
2601
2798
  if (!entry || !scored)
2602
2799
  continue;
2603
- const domainBoost = getDomainBoost(entry.category, topCategories);
2800
+ const domainBoost = ab.disableDomainBoost ? 0 : getDomainBoost(entry.category, topCategories);
2604
2801
  if (domainBoost > 0) {
2605
2802
  scored.score += domainBoost;
2606
2803
  scored.reasons.push(`domain_boost:+${domainBoost}`);
2607
2804
  }
2608
2805
  // Execution trace edge: boost tools that frequently co-occur with top results
2609
- if (traceBoostTargets.has(tool.name) && !topToolNames.includes(tool.name)) {
2806
+ if (traceBoostTargets.has(tool.name) && !topToolNames.includes(tool.name) && !ab.disableTraceEdges) {
2610
2807
  scored.score += TRACE_EDGE_BOOST;
2611
2808
  scored.reasons.push(`trace_edge:+${TRACE_EDGE_BOOST}`);
2612
2809
  }
@@ -2964,5 +3161,27 @@ export const WORKFLOW_CHAINS = {
2964
3161
  { tool: "run_recon", action: "Gather context now that purpose is clear" },
2965
3162
  ],
2966
3163
  },
3164
+ research_digest: {
3165
+ name: "Automated Research Digest",
3166
+ description: "Subscribe to RSS/Atom feeds, fetch new articles, build a digest, and optionally email it",
3167
+ steps: [
3168
+ { tool: "add_rss_source", action: "Register RSS/Atom feed URLs for topics of interest (arXiv, blogs, news)" },
3169
+ { tool: "fetch_rss_feeds", action: "Pull latest articles from all registered sources — new items stored in SQLite" },
3170
+ { tool: "build_research_digest", action: "Generate a categorized digest of new (unseen) articles in markdown, json, or html" },
3171
+ { tool: "send_email", action: "Email the html digest to yourself or your team for daily/weekly review" },
3172
+ { tool: "save_session_note", action: "Persist key findings so they survive context compaction" },
3173
+ { tool: "record_learning", action: "Record insights from noteworthy articles for the knowledge base" },
3174
+ ],
3175
+ },
3176
+ email_assistant: {
3177
+ name: "Email Draft Assistant",
3178
+ description: "Read inbox, draft professional replies, review, and send — all from the agent",
3179
+ steps: [
3180
+ { tool: "read_emails", action: "Fetch recent/unread emails from IMAP inbox to understand what needs attention" },
3181
+ { tool: "draft_email_reply", action: "Generate a professional reply draft from original email context and your instructions" },
3182
+ { tool: "send_email", action: "Send the reviewed and approved draft reply" },
3183
+ { tool: "save_session_note", action: "Log sent emails so you have an audit trail that survives compaction" },
3184
+ ],
3185
+ },
2967
3186
  };
2968
3187
  //# sourceMappingURL=toolRegistry.js.map