mcp-code-indexer 3.0.0__py3-none-any.whl → 3.0.3__py3-none-any.whl

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.
@@ -110,7 +110,10 @@ class DatabaseManager:
110
110
  # Database initialization now uses the modern retry executor directly
111
111
 
112
112
  # Apply migrations in order
113
- migrations_dir = Path(__file__).parent.parent.parent.parent / "migrations"
113
+ # Migrations are now bundled with the package
114
+ migrations_dir = Path(__file__).parent.parent / "migrations"
115
+ if not migrations_dir.exists():
116
+ raise RuntimeError(f"Could not find migrations directory at {migrations_dir}")
114
117
  migration_files = sorted(migrations_dir.glob("*.sql"))
115
118
 
116
119
  async with aiosqlite.connect(self.db_path) as db:
@@ -120,16 +123,48 @@ class DatabaseManager:
120
123
  # Configure WAL mode and optimizations for concurrent access
121
124
  await self._configure_database_optimizations(db, include_wal_mode=self.enable_wal_mode)
122
125
 
123
- # Apply each migration
126
+ # Create migrations tracking table
127
+ await db.execute('''
128
+ CREATE TABLE IF NOT EXISTS migrations (
129
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
130
+ filename TEXT UNIQUE NOT NULL,
131
+ applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
132
+ )
133
+ ''')
134
+ await db.commit()
135
+
136
+ # Get list of already applied migrations
137
+ cursor = await db.execute('SELECT filename FROM migrations')
138
+ applied_migrations = {row[0] for row in await cursor.fetchall()}
139
+
140
+ # Apply each migration that hasn't been applied yet
124
141
  for migration_file in migration_files:
125
- logger.info(f"Applying migration: {migration_file.name}")
126
- with open(migration_file, 'r') as f:
127
- migration_sql = f.read()
142
+ migration_name = migration_file.name
143
+ if migration_name in applied_migrations:
144
+ logger.info(f"Skipping already applied migration: {migration_name}")
145
+ continue
146
+
147
+ logger.info(f"Applying migration: {migration_name}")
148
+ try:
149
+ migration_sql = migration_file.read_text(encoding='utf-8')
150
+ except AttributeError:
151
+ # Fallback for regular file objects
152
+ with open(migration_file, 'r', encoding='utf-8') as f:
153
+ migration_sql = f.read()
128
154
 
129
- await db.executescript(migration_sql)
130
- await db.commit()
155
+ try:
156
+ await db.executescript(migration_sql)
157
+
158
+ # Record that migration was applied
159
+ await db.execute('INSERT INTO migrations (filename) VALUES (?)', (migration_name,))
160
+ await db.commit()
161
+ logger.info(f"Successfully applied migration: {migration_name}")
162
+ except Exception as e:
163
+ logger.error(f"Failed to apply migration {migration_name}: {e}")
164
+ await db.rollback()
165
+ raise
131
166
 
132
- logger.info(f"Database initialized at {self.db_path} with {len(migration_files)} migrations")
167
+ logger.info(f"Database initialized at {self.db_path} with {len(migration_files)} total migrations")
133
168
 
134
169
  async def _configure_database_optimizations(self, db: aiosqlite.Connection, include_wal_mode: bool = True) -> None:
135
170
  """
@@ -254,6 +254,7 @@ class StructuredFormatter(logging.Formatter):
254
254
  def format(self, record: logging.LogRecord) -> str:
255
255
  """Format log record as structured JSON."""
256
256
  import json
257
+ from . import __version__
257
258
 
258
259
  log_data = {
259
260
  "timestamp": datetime.utcnow().isoformat(),
@@ -262,7 +263,8 @@ class StructuredFormatter(logging.Formatter):
262
263
  "message": record.getMessage(),
263
264
  "module": record.module,
264
265
  "function": record.funcName,
265
- "line": record.lineno
266
+ "line": record.lineno,
267
+ "version": __version__
266
268
  }
267
269
 
268
270
  # Add structured data if present
@@ -0,0 +1,100 @@
1
+ -- Initial database schema for MCP Code Indexer
2
+ -- Creates tables for projects, file descriptions, and search functionality
3
+
4
+ -- Enable WAL mode for better concurrency
5
+ PRAGMA journal_mode=WAL;
6
+
7
+ -- Enable foreign key support
8
+ PRAGMA foreign_keys=ON;
9
+
10
+ -- Projects table: stores project metadata and identification
11
+ CREATE TABLE IF NOT EXISTS projects (
12
+ id TEXT PRIMARY KEY,
13
+ name TEXT NOT NULL,
14
+ remote_origin TEXT,
15
+ upstream_origin TEXT,
16
+ aliases TEXT DEFAULT '[]', -- JSON array of aliases
17
+ created DATETIME DEFAULT CURRENT_TIMESTAMP,
18
+ last_accessed DATETIME DEFAULT CURRENT_TIMESTAMP
19
+ );
20
+
21
+ -- Index for project lookups by various identifiers
22
+ CREATE INDEX IF NOT EXISTS idx_projects_remote_origin ON projects(remote_origin);
23
+ CREATE INDEX IF NOT EXISTS idx_projects_upstream_origin ON projects(upstream_origin);
24
+ CREATE INDEX IF NOT EXISTS idx_projects_name ON projects(name);
25
+
26
+ -- File descriptions table: stores file content descriptions
27
+ CREATE TABLE IF NOT EXISTS file_descriptions (
28
+ project_id TEXT NOT NULL,
29
+ branch TEXT NOT NULL,
30
+ file_path TEXT NOT NULL,
31
+ description TEXT NOT NULL,
32
+ file_hash TEXT,
33
+ last_modified DATETIME DEFAULT CURRENT_TIMESTAMP,
34
+ version INTEGER DEFAULT 1,
35
+ source_project_id TEXT,
36
+ PRIMARY KEY (project_id, branch, file_path),
37
+ FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
38
+ FOREIGN KEY (source_project_id) REFERENCES projects(id) ON DELETE SET NULL
39
+ );
40
+
41
+ -- Indexes for file description queries
42
+ CREATE INDEX IF NOT EXISTS idx_file_descriptions_project_branch ON file_descriptions(project_id, branch);
43
+ CREATE INDEX IF NOT EXISTS idx_file_descriptions_file_hash ON file_descriptions(file_hash);
44
+ CREATE INDEX IF NOT EXISTS idx_file_descriptions_last_modified ON file_descriptions(last_modified);
45
+
46
+ -- Full-text search table for file descriptions
47
+ CREATE VIRTUAL TABLE IF NOT EXISTS file_descriptions_fts USING fts5(
48
+ project_id,
49
+ branch,
50
+ file_path,
51
+ description,
52
+ content='file_descriptions',
53
+ content_rowid='rowid'
54
+ );
55
+
56
+ -- Triggers to keep FTS table in sync with file_descriptions
57
+ CREATE TRIGGER IF NOT EXISTS file_descriptions_ai AFTER INSERT ON file_descriptions BEGIN
58
+ INSERT INTO file_descriptions_fts(rowid, project_id, branch, file_path, description)
59
+ VALUES (new.rowid, new.project_id, new.branch, new.file_path, new.description);
60
+ END;
61
+
62
+ CREATE TRIGGER IF NOT EXISTS file_descriptions_ad AFTER DELETE ON file_descriptions BEGIN
63
+ INSERT INTO file_descriptions_fts(file_descriptions_fts, rowid, project_id, branch, file_path, description)
64
+ VALUES ('delete', old.rowid, old.project_id, old.branch, old.file_path, old.description);
65
+ END;
66
+
67
+ CREATE TRIGGER IF NOT EXISTS file_descriptions_au AFTER UPDATE ON file_descriptions BEGIN
68
+ INSERT INTO file_descriptions_fts(file_descriptions_fts, rowid, project_id, branch, file_path, description)
69
+ VALUES ('delete', old.rowid, old.project_id, old.branch, old.file_path, old.description);
70
+ INSERT INTO file_descriptions_fts(rowid, project_id, branch, file_path, description)
71
+ VALUES (new.rowid, new.project_id, new.branch, new.file_path, new.description);
72
+ END;
73
+
74
+ -- Merge conflicts table: temporary storage for merge conflicts
75
+ CREATE TABLE IF NOT EXISTS merge_conflicts (
76
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
77
+ project_id TEXT NOT NULL,
78
+ file_path TEXT NOT NULL,
79
+ source_branch TEXT NOT NULL,
80
+ target_branch TEXT NOT NULL,
81
+ source_description TEXT NOT NULL,
82
+ target_description TEXT NOT NULL,
83
+ resolution TEXT,
84
+ created DATETIME DEFAULT CURRENT_TIMESTAMP,
85
+ FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
86
+ );
87
+
88
+ -- Index for merge conflict lookups
89
+ CREATE INDEX IF NOT EXISTS idx_merge_conflicts_project ON merge_conflicts(project_id, source_branch, target_branch);
90
+
91
+ -- Token cache table: cache token counts for performance
92
+ CREATE TABLE IF NOT EXISTS token_cache (
93
+ cache_key TEXT PRIMARY KEY,
94
+ token_count INTEGER NOT NULL,
95
+ created DATETIME DEFAULT CURRENT_TIMESTAMP,
96
+ expires DATETIME
97
+ );
98
+
99
+ -- Index for token cache cleanup
100
+ CREATE INDEX IF NOT EXISTS idx_token_cache_expires ON token_cache(expires);
@@ -0,0 +1,61 @@
1
+ -- Performance optimization migration for MCP Code Indexer
2
+ -- Adds additional indexes and optimizations for common query patterns
3
+
4
+ -- Additional composite indexes for performance optimization
5
+ CREATE INDEX IF NOT EXISTS idx_file_descriptions_project_branch_path ON file_descriptions(project_id, branch, file_path);
6
+ CREATE INDEX IF NOT EXISTS idx_file_descriptions_project_modified ON file_descriptions(project_id, last_modified DESC);
7
+ CREATE INDEX IF NOT EXISTS idx_file_descriptions_source_project ON file_descriptions(source_project_id) WHERE source_project_id IS NOT NULL;
8
+
9
+ -- Index for merge conflicts by project and branches
10
+ CREATE INDEX IF NOT EXISTS idx_merge_conflicts_project_branches ON merge_conflicts(project_id, source_branch, target_branch, created DESC);
11
+
12
+ -- Index for token cache expiration cleanup
13
+ CREATE INDEX IF NOT EXISTS idx_token_cache_created ON token_cache(created DESC);
14
+
15
+ -- Optimize FTS5 for prefix searches and ranking
16
+ DROP TRIGGER IF EXISTS file_descriptions_ai;
17
+ DROP TRIGGER IF EXISTS file_descriptions_ad;
18
+ DROP TRIGGER IF EXISTS file_descriptions_au;
19
+ DROP TABLE IF EXISTS file_descriptions_fts;
20
+
21
+ -- Recreate FTS table with better configuration
22
+ CREATE VIRTUAL TABLE file_descriptions_fts USING fts5(
23
+ project_id UNINDEXED,
24
+ branch UNINDEXED,
25
+ file_path,
26
+ description,
27
+ content='file_descriptions',
28
+ content_rowid='rowid',
29
+ prefix='2 3 4' -- Enable prefix searching for 2-4 character prefixes
30
+ );
31
+
32
+ -- Recreate triggers for FTS sync
33
+ CREATE TRIGGER file_descriptions_ai AFTER INSERT ON file_descriptions BEGIN
34
+ INSERT INTO file_descriptions_fts(rowid, project_id, branch, file_path, description)
35
+ VALUES (new.rowid, new.project_id, new.branch, new.file_path, new.description);
36
+ END;
37
+
38
+ CREATE TRIGGER file_descriptions_ad AFTER DELETE ON file_descriptions BEGIN
39
+ INSERT INTO file_descriptions_fts(file_descriptions_fts, rowid, project_id, branch, file_path, description)
40
+ VALUES ('delete', old.rowid, old.project_id, old.branch, old.file_path, old.description);
41
+ END;
42
+
43
+ CREATE TRIGGER file_descriptions_au AFTER UPDATE ON file_descriptions BEGIN
44
+ INSERT INTO file_descriptions_fts(file_descriptions_fts, rowid, project_id, branch, file_path, description)
45
+ VALUES ('delete', old.rowid, old.project_id, old.branch, old.file_path, old.description);
46
+ INSERT INTO file_descriptions_fts(rowid, project_id, branch, file_path, description)
47
+ VALUES (new.rowid, new.project_id, new.branch, new.file_path, new.description);
48
+ END;
49
+
50
+ -- Rebuild FTS index if there's existing data
51
+ INSERT INTO file_descriptions_fts(file_descriptions_fts) VALUES('rebuild');
52
+
53
+ -- Set SQLite optimizations
54
+ PRAGMA optimize;
55
+ PRAGMA auto_vacuum = INCREMENTAL;
56
+ PRAGMA temp_store = MEMORY;
57
+ PRAGMA mmap_size = 268435456; -- 256MB memory mapping
58
+ PRAGMA cache_size = -64000; -- 64MB cache
59
+
60
+ -- Update statistics for query planner
61
+ ANALYZE;
@@ -0,0 +1,20 @@
1
+ -- Migration 003: Add project_overviews table for condensed codebase overviews
2
+ -- This table stores comprehensive narrative overviews of entire codebases
3
+ -- as an alternative to file-by-file descriptions
4
+
5
+ CREATE TABLE IF NOT EXISTS project_overviews (
6
+ project_id TEXT NOT NULL,
7
+ branch TEXT NOT NULL,
8
+ overview TEXT NOT NULL,
9
+ last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
10
+ total_files INTEGER NOT NULL DEFAULT 0,
11
+ total_tokens INTEGER NOT NULL DEFAULT 0,
12
+ PRIMARY KEY (project_id, branch),
13
+ FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
14
+ ) WITHOUT ROWID;
15
+
16
+ -- Index for temporal queries and overview management
17
+ CREATE INDEX IF NOT EXISTS idx_project_overviews_last_modified ON project_overviews(last_modified);
18
+
19
+ -- Index for project-based queries
20
+ CREATE INDEX IF NOT EXISTS idx_project_overviews_project_id ON project_overviews(project_id);
@@ -0,0 +1,184 @@
1
+ -- Migration 004: Remove branch dependency from database schema
2
+ -- This migration consolidates multi-branch data and simplifies the schema
3
+ -- by removing branch columns from file_descriptions and project_overviews tables
4
+
5
+ -- Ensure WAL mode is enabled for safe migrations
6
+ PRAGMA journal_mode=WAL;
7
+
8
+ -- Temporarily disable foreign key constraints for migration
9
+ PRAGMA foreign_keys=OFF;
10
+
11
+ -- Start transaction for atomic migration
12
+ BEGIN TRANSACTION;
13
+
14
+ -- Create new file_descriptions table without branch dependency
15
+ CREATE TABLE file_descriptions_new (
16
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
17
+ project_id TEXT NOT NULL,
18
+ file_path TEXT NOT NULL,
19
+ description TEXT NOT NULL,
20
+ file_hash TEXT,
21
+ last_modified DATETIME DEFAULT CURRENT_TIMESTAMP,
22
+ version INTEGER DEFAULT 1,
23
+ source_project_id TEXT,
24
+ to_be_cleaned INTEGER DEFAULT NULL, -- UNIX timestamp for cleanup, NULL = active
25
+ UNIQUE(project_id, file_path),
26
+ FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
27
+ FOREIGN KEY (source_project_id) REFERENCES projects(id) ON DELETE SET NULL
28
+ );
29
+
30
+ -- Create indexes for the new table
31
+ CREATE INDEX idx_file_descriptions_new_project_id ON file_descriptions_new(project_id);
32
+ CREATE INDEX idx_file_descriptions_new_file_hash ON file_descriptions_new(file_hash);
33
+ CREATE INDEX idx_file_descriptions_new_last_modified ON file_descriptions_new(last_modified);
34
+ CREATE INDEX idx_file_descriptions_new_to_be_cleaned ON file_descriptions_new(to_be_cleaned);
35
+
36
+ -- Clean up orphaned data before consolidation
37
+ -- Remove file_descriptions that reference non-existent projects
38
+ DELETE FROM file_descriptions
39
+ WHERE project_id NOT IN (SELECT id FROM projects);
40
+
41
+ -- Remove file_descriptions with invalid source_project_id
42
+ UPDATE file_descriptions
43
+ SET source_project_id = NULL
44
+ WHERE source_project_id IS NOT NULL
45
+ AND source_project_id NOT IN (SELECT id FROM projects);
46
+
47
+ -- Consolidate data from old table - keep most recent description per file
48
+ -- This handles multi-branch scenarios by selecting the newest data
49
+ INSERT INTO file_descriptions_new (
50
+ project_id, file_path, description, file_hash, last_modified, version, source_project_id
51
+ )
52
+ SELECT
53
+ project_id,
54
+ file_path,
55
+ description,
56
+ file_hash,
57
+ last_modified,
58
+ version,
59
+ source_project_id
60
+ FROM (
61
+ SELECT
62
+ project_id,
63
+ file_path,
64
+ description,
65
+ file_hash,
66
+ last_modified,
67
+ version,
68
+ source_project_id,
69
+ ROW_NUMBER() OVER (
70
+ PARTITION BY project_id, file_path
71
+ ORDER BY last_modified DESC
72
+ ) as rn
73
+ FROM file_descriptions
74
+ ) ranked_descriptions
75
+ WHERE rn = 1;
76
+
77
+ -- Create new project_overviews table without branch dependency
78
+ CREATE TABLE project_overviews_new (
79
+ project_id TEXT PRIMARY KEY,
80
+ overview TEXT NOT NULL,
81
+ last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
82
+ total_files INTEGER NOT NULL DEFAULT 0,
83
+ total_tokens INTEGER NOT NULL DEFAULT 0,
84
+ FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
85
+ );
86
+
87
+ -- Create indexes for the new table
88
+ CREATE INDEX idx_project_overviews_new_last_modified ON project_overviews_new(last_modified);
89
+
90
+ -- Clean up orphaned project overviews
91
+ DELETE FROM project_overviews
92
+ WHERE project_id NOT IN (SELECT id FROM projects);
93
+
94
+ -- Consolidate project overviews - keep the one with most tokens (most comprehensive)
95
+ INSERT INTO project_overviews_new (
96
+ project_id, overview, last_modified, total_files, total_tokens
97
+ )
98
+ SELECT
99
+ project_id,
100
+ overview,
101
+ last_modified,
102
+ total_files,
103
+ total_tokens
104
+ FROM (
105
+ SELECT
106
+ project_id,
107
+ overview,
108
+ last_modified,
109
+ total_files,
110
+ total_tokens,
111
+ ROW_NUMBER() OVER (
112
+ PARTITION BY project_id
113
+ ORDER BY total_tokens DESC, last_modified DESC
114
+ ) as rn
115
+ FROM project_overviews
116
+ ) ranked_overviews
117
+ WHERE rn = 1;
118
+
119
+ -- Drop FTS5 triggers for old table
120
+ DROP TRIGGER IF EXISTS file_descriptions_ai;
121
+ DROP TRIGGER IF EXISTS file_descriptions_ad;
122
+ DROP TRIGGER IF EXISTS file_descriptions_au;
123
+
124
+ -- Drop FTS5 virtual table
125
+ DROP TABLE IF EXISTS file_descriptions_fts;
126
+
127
+ -- Drop old tables
128
+ DROP TABLE file_descriptions;
129
+ DROP TABLE project_overviews;
130
+
131
+ -- Rename new tables to original names
132
+ ALTER TABLE file_descriptions_new RENAME TO file_descriptions;
133
+ ALTER TABLE project_overviews_new RENAME TO project_overviews;
134
+
135
+ -- Create new FTS5 virtual table without branch column
136
+ CREATE VIRTUAL TABLE file_descriptions_fts USING fts5(
137
+ project_id,
138
+ file_path,
139
+ description,
140
+ content='file_descriptions',
141
+ content_rowid='id'
142
+ );
143
+
144
+ -- Populate FTS5 table with existing data (only active records)
145
+ INSERT INTO file_descriptions_fts(rowid, project_id, file_path, description)
146
+ SELECT id, project_id, file_path, description
147
+ FROM file_descriptions
148
+ WHERE to_be_cleaned IS NULL;
149
+
150
+ -- Create new FTS5 triggers for the updated schema
151
+ CREATE TRIGGER file_descriptions_ai AFTER INSERT ON file_descriptions BEGIN
152
+ -- Only index active records (not marked for cleanup)
153
+ INSERT INTO file_descriptions_fts(rowid, project_id, file_path, description)
154
+ SELECT new.id, new.project_id, new.file_path, new.description
155
+ WHERE new.to_be_cleaned IS NULL;
156
+ END;
157
+
158
+ CREATE TRIGGER file_descriptions_ad AFTER DELETE ON file_descriptions BEGIN
159
+ INSERT INTO file_descriptions_fts(file_descriptions_fts, rowid, project_id, file_path, description)
160
+ VALUES ('delete', old.id, old.project_id, old.file_path, old.description);
161
+ END;
162
+
163
+ CREATE TRIGGER file_descriptions_au AFTER UPDATE ON file_descriptions BEGIN
164
+ -- Remove old record from FTS
165
+ INSERT INTO file_descriptions_fts(file_descriptions_fts, rowid, project_id, file_path, description)
166
+ VALUES ('delete', old.id, old.project_id, old.file_path, old.description);
167
+
168
+ -- Add new record only if it's active (not marked for cleanup)
169
+ INSERT INTO file_descriptions_fts(rowid, project_id, file_path, description)
170
+ SELECT new.id, new.project_id, new.file_path, new.description
171
+ WHERE new.to_be_cleaned IS NULL;
172
+ END;
173
+
174
+ -- Update merge_conflicts table to remove branch references (optional cleanup)
175
+ -- This table structure can remain as-is since it's used for temporary conflict resolution
176
+ -- but we'll remove unused indexes that reference branches
177
+ DROP INDEX IF EXISTS idx_merge_conflicts_project;
178
+ CREATE INDEX idx_merge_conflicts_project ON merge_conflicts(project_id, created);
179
+
180
+ -- Re-enable foreign key constraints
181
+ PRAGMA foreign_keys=ON;
182
+
183
+ -- Commit the migration
184
+ COMMIT;
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-code-indexer
3
- Version: 3.0.0
3
+ Version: 3.0.3
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
@@ -59,8 +59,8 @@ Dynamic: requires-python
59
59
 
60
60
  # MCP Code Indexer 🚀
61
61
 
62
- [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?19)](https://badge.fury.io/py/mcp-code-indexer)
63
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?19)](https://pypi.org/project/mcp-code-indexer/)
62
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?21)](https://badge.fury.io/py/mcp-code-indexer)
63
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?21)](https://pypi.org/project/mcp-code-indexer/)
64
64
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
65
65
 
66
66
  A production-ready **Model Context Protocol (MCP) server** that revolutionizes how AI agents navigate and understand codebases. Built for high-concurrency environments with advanced database resilience, the server provides instant access to intelligent descriptions, semantic search, and context-aware recommendations while maintaining 800+ writes/sec throughput.
@@ -4,7 +4,7 @@ mcp_code_indexer/ask_handler.py,sha256=rFljJtqP_YL3E9H2Hgk04yURzHw_sqm6muB5RTlP_
4
4
  mcp_code_indexer/claude_api_handler.py,sha256=4lgp-KsDMOmjrln3QhdJuM5pHvaB3kUwHOUk9l5adi4,13628
5
5
  mcp_code_indexer/cleanup_manager.py,sha256=1x2de8Mr9dL92q4ubEebsWSF_2n8Yxk549ZohYHNIkU,9358
6
6
  mcp_code_indexer/deepask_handler.py,sha256=iAFA1pKfAnurHBprIyP1TaecPzZ5YhBs-oR8Eccxoe4,18323
7
- mcp_code_indexer/error_handler.py,sha256=cNSUFFrGBMLDv4qa78c7495L1wSl_dXCRbzCJOidx-Q,11590
7
+ mcp_code_indexer/error_handler.py,sha256=x6dHezVeKcD2ealNLBndt-3SiPiMfh9VOUNoqQSk3rI,11660
8
8
  mcp_code_indexer/file_scanner.py,sha256=ctXeZMROgDThEtjzsANTK9TbK-fhTScMBd4iyuleBT4,11734
9
9
  mcp_code_indexer/git_hook_handler.py,sha256=OMPfQlykqR2_cE5IxGqbAI92afLOOJxsvXbAQIZrdLU,36579
10
10
  mcp_code_indexer/logging_config.py,sha256=tf_U-Zz_axDXRV9s7TfHEeUrBjT1QBWkzPuiyZMffBU,10252
@@ -15,19 +15,23 @@ mcp_code_indexer/token_counter.py,sha256=WrifOkbF99nWWHlRlhCHAB2KN7qr83GOHl7apE-
15
15
  mcp_code_indexer/data/stop_words_english.txt,sha256=7Zdd9ameVgA6tN_zuXROvHXD4hkWeELVywPhb7FJEkw,6343
16
16
  mcp_code_indexer/database/__init__.py,sha256=aPq_aaRp0aSwOBIq9GkuMNjmLxA411zg2vhdrAuHm-w,38
17
17
  mcp_code_indexer/database/connection_health.py,sha256=s2r9L_KipH5NlemAUDnhBQO90Dn4b_0Ht9UDs7F6QPk,24432
18
- mcp_code_indexer/database/database.py,sha256=RAlQ9sgE_aMnj6Nu_bRIgghYXq5yejaA7hnXTww_BFU,50962
18
+ mcp_code_indexer/database/database.py,sha256=4y2JqK0opz4MZk1R_zMBi5B-hRyXd_jt4cksWIiU34A,52724
19
19
  mcp_code_indexer/database/exceptions.py,sha256=AgpRA9Z5R-GoWYdQSPeSdYvAXDopFCQkLGN3jD7Ha4E,10215
20
20
  mcp_code_indexer/database/models.py,sha256=FbNtP9Z0bDCoe8JjsYT1HWp0uYsxgZFHR0Blt3d8TBY,7054
21
21
  mcp_code_indexer/database/retry_executor.py,sha256=QUayjkCk8OsckVMYiJ_HBQ9NTUss-H8GQeUIUbbw4_U,13419
22
22
  mcp_code_indexer/middleware/__init__.py,sha256=p-mP0pMsfiU2yajCPvokCUxUEkh_lu4XJP1LyyMW2ug,220
23
23
  mcp_code_indexer/middleware/error_middleware.py,sha256=5agJTAkkPogfPGnja1V9JtG9RG-BiOALIJYctK3byJQ,11730
24
+ mcp_code_indexer/migrations/001_initial.sql,sha256=hIXkCP4LA_4A9HJ1CHU0a1DD-a6EN6u-uJPMqW0c2Yo,4120
25
+ mcp_code_indexer/migrations/002_performance_indexes.sql,sha256=FlKbmcJyKAHTKmjxmpk8ABe6eMcQahz8RciRYcREY_E,2846
26
+ mcp_code_indexer/migrations/003_project_overviews.sql,sha256=pPzn7UmJ_Bda9mJ1nYTN1GeuYwdQHC7Fva6PvWaucUw,891
27
+ mcp_code_indexer/migrations/004_remove_branch_dependency.sql,sha256=whZvj2qfba1-Xq7Vg4IfpCpIrRKN21AdtG0gZbFSRi4,6466
24
28
  mcp_code_indexer/server/__init__.py,sha256=16xMcuriUOBlawRqWNBk6niwrvtv_JD5xvI36X1Vsmk,41
25
29
  mcp_code_indexer/server/mcp_server.py,sha256=EQnwRbjF17AdPvO_HPb6d7cmpxUN51qbyMuhQXrtetU,63168
26
30
  mcp_code_indexer/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
27
31
  mcp_code_indexer/tools/__init__.py,sha256=m01mxML2UdD7y5rih_XNhNSCMzQTz7WQ_T1TeOcYlnE,49
28
- mcp_code_indexer-3.0.0.dist-info/licenses/LICENSE,sha256=JN9dyPPgYwH9C-UjYM7FLNZjQ6BF7kAzpF3_4PwY4rY,1086
29
- mcp_code_indexer-3.0.0.dist-info/METADATA,sha256=yRCsAbs-iHhIOFjihh6PZcgB7yDzihTqxkU3nsdaBZM,20165
30
- mcp_code_indexer-3.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
31
- mcp_code_indexer-3.0.0.dist-info/entry_points.txt,sha256=8HqWOw1Is7jOP1bvIgaSwouvT9z_Boe-9hd4NzyJOhY,68
32
- mcp_code_indexer-3.0.0.dist-info/top_level.txt,sha256=yKYCM-gMGt-cnupGfAhnZaoEsROLB6DQ1KFUuyKx4rw,17
33
- mcp_code_indexer-3.0.0.dist-info/RECORD,,
32
+ mcp_code_indexer-3.0.3.dist-info/licenses/LICENSE,sha256=JN9dyPPgYwH9C-UjYM7FLNZjQ6BF7kAzpF3_4PwY4rY,1086
33
+ mcp_code_indexer-3.0.3.dist-info/METADATA,sha256=KhSmG_81Lli-5xIPfTy1uOCGYl6Ec1vqGrpaq0IE9ls,20165
34
+ mcp_code_indexer-3.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
35
+ mcp_code_indexer-3.0.3.dist-info/entry_points.txt,sha256=8HqWOw1Is7jOP1bvIgaSwouvT9z_Boe-9hd4NzyJOhY,68
36
+ mcp_code_indexer-3.0.3.dist-info/top_level.txt,sha256=yKYCM-gMGt-cnupGfAhnZaoEsROLB6DQ1KFUuyKx4rw,17
37
+ mcp_code_indexer-3.0.3.dist-info/RECORD,,