codesift-mcp 0.8.6 → 0.8.10

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 (59) hide show
  1. package/README.md +8 -0
  2. package/dist/cli/help.d.ts.map +1 -1
  3. package/dist/cli/help.js +6 -0
  4. package/dist/cli/help.js.map +1 -1
  5. package/dist/cli/hooks.js +2 -2
  6. package/dist/cli/hooks.js.map +1 -1
  7. package/dist/cli/setup.d.ts +4 -0
  8. package/dist/cli/setup.d.ts.map +1 -1
  9. package/dist/cli/setup.js +97 -7
  10. package/dist/cli/setup.js.map +1 -1
  11. package/dist/formatters-shortening.d.ts +7 -0
  12. package/dist/formatters-shortening.d.ts.map +1 -1
  13. package/dist/formatters-shortening.js +48 -0
  14. package/dist/formatters-shortening.js.map +1 -1
  15. package/dist/formatters.d.ts.map +1 -1
  16. package/dist/formatters.js +14 -2
  17. package/dist/formatters.js.map +1 -1
  18. package/dist/instructions.d.ts +1 -1
  19. package/dist/instructions.d.ts.map +1 -1
  20. package/dist/instructions.js +2 -2
  21. package/dist/register-tool-loaders.d.ts +1 -0
  22. package/dist/register-tool-loaders.d.ts.map +1 -1
  23. package/dist/register-tool-loaders.js +1 -0
  24. package/dist/register-tool-loaders.js.map +1 -1
  25. package/dist/register-tools.d.ts +2 -0
  26. package/dist/register-tools.d.ts.map +1 -1
  27. package/dist/register-tools.js +41 -17
  28. package/dist/register-tools.js.map +1 -1
  29. package/dist/server-helpers.d.ts.map +1 -1
  30. package/dist/server-helpers.js +7 -3
  31. package/dist/server-helpers.js.map +1 -1
  32. package/dist/storage/registry.d.ts.map +1 -1
  33. package/dist/storage/registry.js +35 -1
  34. package/dist/storage/registry.js.map +1 -1
  35. package/dist/storage/usage-tracker.d.ts +13 -5
  36. package/dist/storage/usage-tracker.d.ts.map +1 -1
  37. package/dist/storage/usage-tracker.js +18 -2
  38. package/dist/storage/usage-tracker.js.map +1 -1
  39. package/dist/tools/conversation-tools.d.ts +8 -1
  40. package/dist/tools/conversation-tools.d.ts.map +1 -1
  41. package/dist/tools/conversation-tools.js +61 -15
  42. package/dist/tools/conversation-tools.js.map +1 -1
  43. package/dist/tools/index-tools.d.ts +2 -0
  44. package/dist/tools/index-tools.d.ts.map +1 -1
  45. package/dist/tools/index-tools.js +64 -7
  46. package/dist/tools/index-tools.js.map +1 -1
  47. package/dist/tools/plan-turn-tools.d.ts +24 -0
  48. package/dist/tools/plan-turn-tools.d.ts.map +1 -1
  49. package/dist/tools/plan-turn-tools.js +158 -3
  50. package/dist/tools/plan-turn-tools.js.map +1 -1
  51. package/dist/tools/search-tools.d.ts +12 -0
  52. package/dist/tools/search-tools.d.ts.map +1 -1
  53. package/dist/tools/search-tools.js +120 -6
  54. package/dist/tools/search-tools.js.map +1 -1
  55. package/package.json +1 -1
  56. package/rules/codesift.md +1 -1
  57. package/rules/codesift.mdc +1 -1
  58. package/rules/codex.md +1 -1
  59. package/rules/gemini.md +1 -1
@@ -762,19 +762,25 @@ export const OutputSchemas = {
762
762
  /** list_repos */
763
763
  repoList: z.union([z.array(z.string()), z.array(z.object({ name: z.string() }).passthrough())]),
764
764
  };
765
+ /** Usage-critical tools that must never require discover_tools/describe_tools. */
766
+ export const ALWAYS_VISIBLE_TOOL_NAMES = [
767
+ "search_text",
768
+ "get_file_outline",
769
+ "plan_turn",
770
+ "index_file",
771
+ "search_symbols",
772
+ "get_file_tree",
773
+ "search_all_conversations",
774
+ "codebase_retrieval",
775
+ ];
765
776
  /** Tools visible in ListTools — core (high usage) + direct-use (agents call without discovery) */
766
777
  export const CORE_TOOL_NAMES = new Set([
767
- // --- Top 10 by usage (91% of calls) ---
768
- "search_text", // #1: 1841 calls
769
- "codebase_retrieval", // #2: 574 calls
770
- "get_file_outline", // #3: 351 calls
771
- "search_symbols", // #4: 332 calls
772
- "list_repos", // #5: 292 calls
773
- "get_file_tree", // #6: 268 calls
774
- "index_file", // #7: 209 calls
775
- "get_symbol", // #8: 138 calls
776
- "search_patterns", // #9: 135 calls
777
- "index_conversations", // #10: 127 calls
778
+ ...ALWAYS_VISIBLE_TOOL_NAMES,
779
+ // --- Additional high-usage/direct-use tools ---
780
+ "list_repos",
781
+ "get_symbol",
782
+ "search_patterns",
783
+ "index_conversations",
778
784
  // --- Direct-use: agents call these without discovery ---
779
785
  "assemble_context", // 64 calls, 21 sessions, 100% direct
780
786
  "get_symbols", // 69 calls — batch symbol reads
@@ -809,7 +815,6 @@ export const CORE_TOOL_NAMES = new Set([
809
815
  "index_folder", // repo onboarding
810
816
  "discover_tools", // meta: discovers remaining hidden tools
811
817
  "describe_tools", // meta: full schema for hidden tools
812
- "plan_turn", // meta: route query to best tools/symbols/files
813
818
  "initial_instructions", // meta: Serena-style onboarding tool, "must call first"
814
819
  "get_session_snapshot", // session: compaction survival
815
820
  "analyze_project", // project profile
@@ -1034,9 +1039,11 @@ const TOOL_DEFINITIONS = [
1034
1039
  auto_group: args.auto_group,
1035
1040
  ranked: args.ranked,
1036
1041
  });
1037
- // Zero-result hint: 41% of search_text calls return nothing in telemetry.
1038
- // Suggest the most likely fix based on query shape so the agent doesn't
1039
- // burn 2-3 follow-up turns guessing.
1042
+ // Zero-result fallback: 44% of search_text calls return nothing in
1043
+ // telemetry. Instead of a bare empty array, return (a) shape-based
1044
+ // hints, (b) near-miss symbol names from the index vocabulary, and
1045
+ // (c) semantic results when an embeddings index already exists —
1046
+ // so the agent doesn't burn 2-3 follow-up turns guessing.
1040
1047
  const isEmpty = (Array.isArray(result) && result.length === 0)
1041
1048
  || (typeof result === "string" && result.length === 0);
1042
1049
  if (isEmpty) {
@@ -1054,7 +1061,19 @@ const TOOL_DEFINITIONS = [
1054
1061
  hints.push("Try regex=false (literal) — escapes may be off.");
1055
1062
  if (!fp && !looksLikeSymbol)
1056
1063
  hints.push("Try a shorter substring, or add file_pattern= to scope.");
1057
- return { matches: [], hint: hints.join(" ") };
1064
+ const { zeroHitFallback } = await import("./register-tool-loaders.js");
1065
+ const fallback = await zeroHitFallback(args.repo, q);
1066
+ if (fallback.semantic_results) {
1067
+ hints.push("Exact text not found — semantic_fallback below shows closest matches by meaning.");
1068
+ }
1069
+ const response = { matches: [], hint: hints.join(" ") };
1070
+ if (fallback.suggestions) {
1071
+ response["did_you_mean"] = fallback.suggestions;
1072
+ }
1073
+ if (fallback.semantic_results) {
1074
+ response["semantic_fallback"] = fallback.semantic_results;
1075
+ }
1076
+ return response;
1058
1077
  }
1059
1078
  return result;
1060
1079
  },
@@ -3594,7 +3613,12 @@ const TOOL_DEFINITIONS = [
3594
3613
  // Pass first matched workspace path through the existing file_pattern-style hook
3595
3614
  opts.file_pattern = `${scope.rootPaths[0]}/**`;
3596
3615
  }
3597
- return nestAudit(args.repo ?? "", opts);
3616
+ const result = await nestAudit(args.repo ?? "", opts);
3617
+ // Telemetry: nest_audit averaged 18.4K tok/call with 110K-tok peaks —
3618
+ // cap arrays to keep JSON valid instead of letting the cascade
3619
+ // hard-truncate mid-structure.
3620
+ const { capArraysToBudget } = await import("./formatters-shortening.js");
3621
+ return capArraysToBudget(result);
3598
3622
  },
3599
3623
  },
3600
3624
  // --- Agent config audit ---