mcp-code-indexer 1.8.0__tar.gz → 1.8.1__tar.gz

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 (41) hide show
  1. {mcp_code_indexer-1.8.0/src/mcp_code_indexer.egg-info → mcp_code_indexer-1.8.1}/PKG-INFO +1 -1
  2. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/pyproject.toml +1 -1
  3. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/git_hook_handler.py +44 -1
  4. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1/src/mcp_code_indexer.egg-info}/PKG-INFO +1 -1
  5. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/LICENSE +0 -0
  6. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/MANIFEST.in +0 -0
  7. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/README.md +0 -0
  8. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/docs/api-reference.md +0 -0
  9. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/docs/architecture.md +0 -0
  10. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/docs/configuration.md +0 -0
  11. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/docs/contributing.md +0 -0
  12. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/docs/git-hook-setup.md +0 -0
  13. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/migrations/001_initial.sql +0 -0
  14. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/migrations/002_performance_indexes.sql +0 -0
  15. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/migrations/003_project_overviews.sql +0 -0
  16. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/requirements.txt +0 -0
  17. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/setup.cfg +0 -0
  18. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/setup.py +0 -0
  19. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/__init__.py +0 -0
  20. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/__main__.py +0 -0
  21. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/data/stop_words_english.txt +0 -0
  22. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/database/__init__.py +0 -0
  23. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/database/database.py +0 -0
  24. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/database/models.py +0 -0
  25. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/error_handler.py +0 -0
  26. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/file_scanner.py +0 -0
  27. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/logging_config.py +0 -0
  28. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/main.py +0 -0
  29. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/merge_handler.py +0 -0
  30. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/middleware/__init__.py +0 -0
  31. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/middleware/error_middleware.py +0 -0
  32. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/server/__init__.py +0 -0
  33. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/server/mcp_server.py +0 -0
  34. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  35. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/token_counter.py +0 -0
  36. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer/tools/__init__.py +0 -0
  37. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer.egg-info/SOURCES.txt +0 -0
  38. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer.egg-info/dependency_links.txt +0 -0
  39. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer.egg-info/entry_points.txt +0 -0
  40. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer.egg-info/requires.txt +0 -0
  41. {mcp_code_indexer-1.8.0 → mcp_code_indexer-1.8.1}/src/mcp_code_indexer.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-code-indexer
3
- Version: 1.8.0
3
+ Version: 1.8.1
4
4
  Summary: MCP server that tracks file descriptions across codebases, enabling AI agents to efficiently navigate and understand code through searchable summaries and token-aware overviews.
5
5
  Author: MCP Code Indexer Contributors
6
6
  Maintainer: MCP Code Indexer Contributors
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mcp-code-indexer"
7
- version = "1.8.0"
7
+ version = "1.8.1"
8
8
  description = "MCP server that tracks file descriptions across codebases, enabling AI agents to efficiently navigate and understand code through searchable summaries and token-aware overviews."
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -667,8 +667,49 @@ Return ONLY a JSON object:
667
667
  Returns:
668
668
  Validated response data
669
669
  """
670
+ def extract_json_from_response(text: str) -> str:
671
+ """Extract JSON from response that might have extra text before/after."""
672
+ text = text.strip()
673
+
674
+ # Try to find JSON in the response
675
+ json_start = -1
676
+ json_end = -1
677
+
678
+ # Look for opening brace
679
+ for i, char in enumerate(text):
680
+ if char == '{':
681
+ json_start = i
682
+ break
683
+
684
+ if json_start == -1:
685
+ return text # No JSON found, return original
686
+
687
+ # Find matching closing brace
688
+ brace_count = 0
689
+ for i in range(json_start, len(text)):
690
+ if text[i] == '{':
691
+ brace_count += 1
692
+ elif text[i] == '}':
693
+ brace_count -= 1
694
+ if brace_count == 0:
695
+ json_end = i + 1
696
+ break
697
+
698
+ if json_end == -1:
699
+ return text # No matching brace found, return original
700
+
701
+ return text[json_start:json_end]
702
+
670
703
  try:
671
- data = json.loads(response_text.strip())
704
+ # First try parsing as-is
705
+ try:
706
+ data = json.loads(response_text.strip())
707
+ except json.JSONDecodeError:
708
+ # Try extracting JSON from response
709
+ extracted_json = extract_json_from_response(response_text)
710
+ if extracted_json != response_text.strip():
711
+ self.logger.debug(f"Extracted JSON from response: {extracted_json}")
712
+ data = json.loads(extracted_json)
672
713
 
673
714
  # Handle both single-stage and two-stage responses
674
715
  if "file_updates" in data and "overview_update" in data:
@@ -700,8 +741,10 @@ Return ONLY a JSON object:
700
741
  return data
701
742
 
702
743
  except json.JSONDecodeError as e:
744
+ self.logger.error(f"Raw response content: {repr(response_text)}")
703
745
  raise GitHookError(f"Invalid JSON response from API: {e}")
704
746
  except ValueError as e:
747
+ self.logger.error(f"Raw response content: {repr(response_text)}")
705
748
  raise GitHookError(f"Invalid response structure: {e}")
706
749
 
707
750
  async def _apply_updates(self, project_info: Dict[str, Any], updates: Dict[str, Any]) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-code-indexer
3
- Version: 1.8.0
3
+ Version: 1.8.1
4
4
  Summary: MCP server that tracks file descriptions across codebases, enabling AI agents to efficiently navigate and understand code through searchable summaries and token-aware overviews.
5
5
  Author: MCP Code Indexer Contributors
6
6
  Maintainer: MCP Code Indexer Contributors