claude-ex 1.0.6 → 1.1.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.
- package/dist/claude/claudemd.js +36 -0
- package/dist/claude/claudemd.js.map +1 -1
- package/dist/claude/installer.d.ts +3 -1
- package/dist/claude/installer.js +65 -10
- package/dist/claude/installer.js.map +1 -1
- package/dist/claude/mcp.js +96 -0
- package/dist/claude/mcp.js.map +1 -1
- package/dist/db/schema.d.ts +6 -3
- package/dist/db/schema.js +57 -12
- package/dist/db/schema.js.map +1 -1
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/indexer/collector.js +1 -1
- package/dist/indexer/collector.js.map +1 -1
- package/dist/indexer/index.d.ts +1 -0
- package/dist/indexer/index.js +88 -7
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/parser.d.ts +12 -0
- package/dist/indexer/parser.js +127 -5
- package/dist/indexer/parser.js.map +1 -1
- package/dist/query/engine.d.ts +54 -0
- package/dist/query/engine.js +172 -1
- package/dist/query/engine.js.map +1 -1
- package/dist/utils.d.ts +3 -1
- package/dist/utils.js +16 -2
- package/dist/utils.js.map +1 -1
- package/dist/watcher/daemon.js +5 -4
- package/dist/watcher/daemon.js.map +1 -1
- package/package.json +1 -1
package/dist/claude/claudemd.js
CHANGED
|
@@ -80,6 +80,42 @@ function generateClaudeMd(rootDir, db) {
|
|
|
80
80
|
}
|
|
81
81
|
lines.push('');
|
|
82
82
|
}
|
|
83
|
+
// File map — "where everything lives"
|
|
84
|
+
const fileMap = (0, engine_1.getFileMapCompact)(db);
|
|
85
|
+
if (fileMap) {
|
|
86
|
+
lines.push('## File Map (file → key exports)');
|
|
87
|
+
lines.push('');
|
|
88
|
+
lines.push(fileMap);
|
|
89
|
+
lines.push('');
|
|
90
|
+
}
|
|
91
|
+
lines.push('## Codex MCP Tools — USE THESE');
|
|
92
|
+
lines.push('');
|
|
93
|
+
lines.push('This project has a live code index via MCP. **Always prefer these over grep/ripgrep for structural queries.** They are faster, rank-aware, and understand code relationships.');
|
|
94
|
+
lines.push('');
|
|
95
|
+
lines.push('| Tool | Use for |');
|
|
96
|
+
lines.push('|------|---------|');
|
|
97
|
+
lines.push('| `search_code` | Finding symbols by name or description (PageRank-weighted) |');
|
|
98
|
+
lines.push('| `find_files` | Finding files by name/path pattern (glob-style, e.g. `**/*.test.ts`) |');
|
|
99
|
+
lines.push('| `get_file_map` | Complete project map — every file and its exports (the "memory") |');
|
|
100
|
+
lines.push('| `get_symbol` | Full context for a symbol before modifying it |');
|
|
101
|
+
lines.push('| `get_callers` | Who calls a function — use before renaming/removing |');
|
|
102
|
+
lines.push('| `get_dependents` | What files break if a file changes |');
|
|
103
|
+
lines.push('| `get_dependencies` | What a symbol imports/uses |');
|
|
104
|
+
lines.push('| `get_file_symbols` | All symbols in a file (not just exports) |');
|
|
105
|
+
lines.push('| `find_by_kind` | Find all classes, interfaces, enums, etc. |');
|
|
106
|
+
lines.push('| `get_type_hierarchy` | Who extends/implements a class or interface |');
|
|
107
|
+
lines.push('| `find_dead_exports` | Exported symbols nothing imports (dead code) |');
|
|
108
|
+
lines.push('| `get_pkg_usages` | What files import from a given npm/pip package |');
|
|
109
|
+
lines.push('| `get_architecture` | Project overview, top symbols, module map |');
|
|
110
|
+
lines.push('| `reindex_file` | Re-index a file after major changes |');
|
|
111
|
+
lines.push('');
|
|
112
|
+
lines.push('**Workflow tips:**');
|
|
113
|
+
lines.push('- Before editing a function: `get_symbol` + `get_callers` to understand impact');
|
|
114
|
+
lines.push('- Before refactoring a file: `get_dependents` to know what breaks');
|
|
115
|
+
lines.push('- To find code: `search_code` first (structural), fall back to grep only for literal strings/regex');
|
|
116
|
+
lines.push('- To find files: `find_files` with glob patterns (faster than shell find/ls)');
|
|
117
|
+
lines.push('- After large changes: `reindex_file` to keep the index fresh');
|
|
118
|
+
lines.push('');
|
|
83
119
|
lines.push('*Auto-generated by claude-ex. Run `claude-ex generate-docs` to regenerate.*');
|
|
84
120
|
lines.push(MARKER_END);
|
|
85
121
|
return lines.join('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudemd.js","sourceRoot":"","sources":["../../src/claude/claudemd.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,
|
|
1
|
+
{"version":3,"file":"claudemd.js","sourceRoot":"","sources":["../../src/claude/claudemd.ts"],"names":[],"mappings":"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"}
|
package/dist/claude/installer.js
CHANGED
|
@@ -43,8 +43,10 @@ description: >
|
|
|
43
43
|
architecture, tracing dependencies, impact analysis, finding callers,
|
|
44
44
|
understanding what a file/function does in context. Triggers: "what calls",
|
|
45
45
|
"who uses", "what depends on", "where is", "how does X work", "what breaks if",
|
|
46
|
-
"find", "search codebase", "show me",
|
|
46
|
+
"find", "search codebase", "show me", "all classes", "all interfaces",
|
|
47
|
+
"dead code", "what imports lodash", "type hierarchy", refactoring, architecture.
|
|
47
48
|
PREFER these MCP tools over grep/ripgrep for structural queries.
|
|
49
|
+
Also use find_files for finding files by name pattern instead of shell find/ls.
|
|
48
50
|
---
|
|
49
51
|
|
|
50
52
|
# claude-ex — Codebase Intelligence (MCP)
|
|
@@ -60,10 +62,19 @@ Use these tools via the MCP connection. They answer in <5ms.
|
|
|
60
62
|
Find symbols by name, description, or content. Results ranked by structural
|
|
61
63
|
importance (PageRank). Use for any "find X" or "where is X" question.
|
|
62
64
|
|
|
65
|
+
### find_files
|
|
66
|
+
Find files by path pattern using glob syntax (e.g. "**/*.test.ts",
|
|
67
|
+
"src/components/*", "*.json"). Much faster than shell find or ls commands.
|
|
68
|
+
|
|
63
69
|
### get_symbol
|
|
64
70
|
Full context for a single symbol: its code, what it depends on, what depends
|
|
65
71
|
on it, what else is in the same file. Use before modifying any symbol.
|
|
66
72
|
|
|
73
|
+
### get_file_map
|
|
74
|
+
Get a complete map of every file and its exports. Use when you need to
|
|
75
|
+
understand the full project layout, or to find where something is defined
|
|
76
|
+
without searching. This is the project's "memory".
|
|
77
|
+
|
|
67
78
|
### get_callers
|
|
68
79
|
Who calls this function/method. Use before renaming, changing signatures,
|
|
69
80
|
or removing a function.
|
|
@@ -80,24 +91,68 @@ modifying it.
|
|
|
80
91
|
Project overview: top symbols, module map, language breakdown.
|
|
81
92
|
Use when you need to understand the overall structure.
|
|
82
93
|
|
|
94
|
+
### get_file_symbols
|
|
95
|
+
All symbols (functions, classes, variables, etc.) in a specific file.
|
|
96
|
+
Shows every definition with kind, line range, signature, and parameters.
|
|
97
|
+
|
|
98
|
+
### find_by_kind
|
|
99
|
+
Find all symbols of a specific kind (class, function, interface, type,
|
|
100
|
+
enum, method, variable). Results ranked by structural importance.
|
|
101
|
+
|
|
102
|
+
### get_type_hierarchy
|
|
103
|
+
Who extends or implements a class/interface. Use before changing a base
|
|
104
|
+
class or interface to find all affected subclasses and implementors.
|
|
105
|
+
|
|
106
|
+
### find_dead_exports
|
|
107
|
+
Exported symbols that nothing imports or references. Useful for dead
|
|
108
|
+
code detection and cleanup.
|
|
109
|
+
|
|
110
|
+
### get_pkg_usages
|
|
111
|
+
Find all files that import from a given npm/pip/cargo package. Use
|
|
112
|
+
before swapping a library to find every usage point.
|
|
113
|
+
|
|
114
|
+
### reindex_file
|
|
115
|
+
Re-index a single file immediately after making major changes.
|
|
116
|
+
|
|
83
117
|
## When to prefer MCP tools over grep
|
|
84
118
|
- "What calls processPayment?" → get_callers (not grep — grep misses indirect references)
|
|
85
119
|
- "What breaks if I change auth.ts?" → get_dependents (not grep — grep can't trace transitive deps)
|
|
86
120
|
- "Find the main payment handling code" → search_code (PageRank-weighted, finds the important one)
|
|
87
121
|
- "Show me the PaymentService" → get_symbol (includes dependencies + dependents, not just code)
|
|
122
|
+
- "Find all test files" → find_files with "**/*.test.*" (faster than shell find)
|
|
123
|
+
- "List all JSON configs" → find_files with "*.json"
|
|
124
|
+
- "Where does X happen?" → get_file_map to see the whole project layout at a glance
|
|
125
|
+
- "I need to understand this project" → get_file_map + get_architecture
|
|
126
|
+
- "What's in auth.ts?" → get_file_symbols (every definition with signatures)
|
|
127
|
+
- "Show all interfaces" → find_by_kind with "interface"
|
|
128
|
+
- "What extends BaseService?" → get_type_hierarchy
|
|
129
|
+
- "Any dead exports?" → find_dead_exports
|
|
130
|
+
- "What uses lodash?" → get_pkg_usages with "lodash"
|
|
88
131
|
|
|
89
132
|
## When to use grep instead
|
|
90
133
|
- Simple string search: "find all TODOs" → grep
|
|
91
134
|
- Regex patterns: "find all console.log" → grep
|
|
92
|
-
- File listing: "show all test files" → find
|
|
93
135
|
`;
|
|
94
|
-
function install(rootDir) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
136
|
+
function install(rootDir, options) {
|
|
137
|
+
const work = options?.work ?? false;
|
|
138
|
+
if (work) {
|
|
139
|
+
// Work mode: data goes in .local/.codex/, config stays at root but is gitignored
|
|
140
|
+
const codexDir = path.join(rootDir, '.local', '.codex');
|
|
141
|
+
if (!fs.existsSync(codexDir)) {
|
|
142
|
+
fs.mkdirSync(codexDir, { recursive: true });
|
|
143
|
+
}
|
|
144
|
+
addToGitignore(rootDir, '.local/');
|
|
145
|
+
addToGitignore(rootDir, '.claude/');
|
|
146
|
+
addToGitignore(rootDir, '.mcp.json');
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// Normal mode: .codex/ at root
|
|
150
|
+
const codexDir = path.join(rootDir, '.codex');
|
|
151
|
+
if (!fs.existsSync(codexDir)) {
|
|
152
|
+
fs.mkdirSync(codexDir, { recursive: true });
|
|
153
|
+
}
|
|
154
|
+
addToGitignore(rootDir, '.codex/');
|
|
99
155
|
}
|
|
100
|
-
addToGitignore(rootDir, '.codex/');
|
|
101
156
|
// 2. Create/merge .mcp.json
|
|
102
157
|
installMcpConfig(rootDir);
|
|
103
158
|
// 3. Create/merge .claude/settings.json
|
|
@@ -177,11 +232,11 @@ function installHooks(rootDir) {
|
|
|
177
232
|
}],
|
|
178
233
|
});
|
|
179
234
|
}
|
|
180
|
-
// PreToolUse (Write, Edit, MultiEdit)
|
|
235
|
+
// PreToolUse (Write, Edit, MultiEdit, Read)
|
|
181
236
|
if (!config.hooks.PreToolUse)
|
|
182
237
|
config.hooks.PreToolUse = [];
|
|
183
238
|
if (!hasClaudeEx(config.hooks.PreToolUse)) {
|
|
184
|
-
for (const tool of ['Write', 'Edit', 'MultiEdit']) {
|
|
239
|
+
for (const tool of ['Write', 'Edit', 'MultiEdit', 'Read']) {
|
|
185
240
|
config.hooks.PreToolUse.push({
|
|
186
241
|
matcher: tool,
|
|
187
242
|
hooks: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/claude/installer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/claude/installer.ts"],"names":[],"mappings":"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"}
|
package/dist/claude/mcp.js
CHANGED
|
@@ -103,6 +103,81 @@ async function runMcpServer() {
|
|
|
103
103
|
},
|
|
104
104
|
},
|
|
105
105
|
},
|
|
106
|
+
{
|
|
107
|
+
name: 'get_file_map',
|
|
108
|
+
description: 'Get a map of every file in the project with its exported symbols. Use to understand where things live without searching. Returns file paths with their key exports.',
|
|
109
|
+
inputSchema: {
|
|
110
|
+
type: 'object',
|
|
111
|
+
properties: {},
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'find_files',
|
|
116
|
+
description: 'Find files by path pattern using glob syntax (e.g. "**/*.test.ts", "src/components/*", "*.json"). Faster than shell find/ls commands. Searches indexed files only.',
|
|
117
|
+
inputSchema: {
|
|
118
|
+
type: 'object',
|
|
119
|
+
properties: {
|
|
120
|
+
pattern: { type: 'string', description: 'Glob pattern to match file paths (e.g. "**/*.ts", "src/**/*.test.*", "*.json")' },
|
|
121
|
+
limit: { type: 'number', description: 'Max results (default 50)' },
|
|
122
|
+
},
|
|
123
|
+
required: ['pattern'],
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'get_file_symbols',
|
|
128
|
+
description: 'Get all symbols (functions, classes, variables, etc.) in a specific file. Shows every definition with its kind, line range, signature, and parameters.',
|
|
129
|
+
inputSchema: {
|
|
130
|
+
type: 'object',
|
|
131
|
+
properties: {
|
|
132
|
+
file: { type: 'string', description: 'File path relative to project root' },
|
|
133
|
+
},
|
|
134
|
+
required: ['file'],
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: 'find_by_kind',
|
|
139
|
+
description: 'Find all symbols of a specific kind (class, function, interface, type, enum, method, variable). Ranked by structural importance.',
|
|
140
|
+
inputSchema: {
|
|
141
|
+
type: 'object',
|
|
142
|
+
properties: {
|
|
143
|
+
kind: { type: 'string', description: 'Symbol kind: class, function, interface, type, enum, method, variable, reexport' },
|
|
144
|
+
limit: { type: 'number', description: 'Max results (default 50)' },
|
|
145
|
+
},
|
|
146
|
+
required: ['kind'],
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: 'get_type_hierarchy',
|
|
151
|
+
description: 'Find all classes that extend or implement a given class/interface. Use before changing a base class or interface to find all affected subclasses/implementors.',
|
|
152
|
+
inputSchema: {
|
|
153
|
+
type: 'object',
|
|
154
|
+
properties: {
|
|
155
|
+
name: { type: 'string', description: 'Class or interface name to find subclasses/implementors of' },
|
|
156
|
+
},
|
|
157
|
+
required: ['name'],
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: 'find_dead_exports',
|
|
162
|
+
description: 'Find exported symbols that nothing imports or references. Useful for dead code detection and cleanup.',
|
|
163
|
+
inputSchema: {
|
|
164
|
+
type: 'object',
|
|
165
|
+
properties: {
|
|
166
|
+
limit: { type: 'number', description: 'Max results (default 50)' },
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'get_pkg_usages',
|
|
172
|
+
description: 'Find all files that import from a given npm/pip/cargo package. Use before swapping a library to find every usage point. Example: "react", "lodash", "express".',
|
|
173
|
+
inputSchema: {
|
|
174
|
+
type: 'object',
|
|
175
|
+
properties: {
|
|
176
|
+
package: { type: 'string', description: 'Package name (e.g., "react", "lodash", "express")' },
|
|
177
|
+
},
|
|
178
|
+
required: ['package'],
|
|
179
|
+
},
|
|
180
|
+
},
|
|
106
181
|
{
|
|
107
182
|
name: 'reindex_file',
|
|
108
183
|
description: 'Re-index a single file immediately.',
|
|
@@ -148,6 +223,27 @@ async function runMcpServer() {
|
|
|
148
223
|
modules: (0, engine_1.getModules)(db),
|
|
149
224
|
};
|
|
150
225
|
break;
|
|
226
|
+
case 'get_file_map':
|
|
227
|
+
result = (0, engine_1.getFileMap)(db);
|
|
228
|
+
break;
|
|
229
|
+
case 'find_files':
|
|
230
|
+
result = (0, engine_1.findFiles)(db, args.pattern, args.limit);
|
|
231
|
+
break;
|
|
232
|
+
case 'get_file_symbols':
|
|
233
|
+
result = (0, engine_1.getFileSymbols)(db, args.file);
|
|
234
|
+
break;
|
|
235
|
+
case 'find_by_kind':
|
|
236
|
+
result = (0, engine_1.findByKind)(db, args.kind, args.limit);
|
|
237
|
+
break;
|
|
238
|
+
case 'get_type_hierarchy':
|
|
239
|
+
result = (0, engine_1.getTypeHierarchy)(db, args.name);
|
|
240
|
+
break;
|
|
241
|
+
case 'find_dead_exports':
|
|
242
|
+
result = (0, engine_1.findDeadExports)(db, args?.limit);
|
|
243
|
+
break;
|
|
244
|
+
case 'get_pkg_usages':
|
|
245
|
+
result = (0, engine_1.getPkgUsages)(db, args.package);
|
|
246
|
+
break;
|
|
151
247
|
case 'reindex_file': {
|
|
152
248
|
const fileStart = performance.now();
|
|
153
249
|
(0, indexer_1.reindexFile)(rootDir, args.file, db);
|
package/dist/claude/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/claude/mcp.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/claude/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/db/schema.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import Database from 'better-sqlite3';
|
|
2
|
-
export declare function openDatabase(projectRoot: string): Database.Database;
|
|
2
|
+
export declare function openDatabase(projectRoot: string, work?: boolean): Database.Database;
|
|
3
3
|
export interface FileRecord {
|
|
4
4
|
id: number;
|
|
5
5
|
changed: boolean;
|
|
6
6
|
}
|
|
7
|
-
export declare function getOrCreateFile(db: Database.Database, filePath: string, hash: string, language: string | null, lineCount: number): FileRecord;
|
|
7
|
+
export declare function getOrCreateFile(db: Database.Database, filePath: string, hash: string, language: string | null, lineCount: number, lastModified?: number): FileRecord;
|
|
8
8
|
export declare function clearFileData(db: Database.Database, fileId: number): void;
|
|
9
9
|
export interface SymbolData {
|
|
10
10
|
name: string;
|
|
@@ -17,9 +17,12 @@ export interface SymbolData {
|
|
|
17
17
|
content?: string;
|
|
18
18
|
contentHash?: string;
|
|
19
19
|
exported?: boolean;
|
|
20
|
+
parameters?: string;
|
|
20
21
|
}
|
|
21
22
|
export declare function insertSymbol(db: Database.Database, fileId: number, sym: SymbolData): number;
|
|
22
|
-
export declare function insertEdge(db: Database.Database, fromId: number, toId: number, kind: string): void;
|
|
23
|
+
export declare function insertEdge(db: Database.Database, fromId: number, toId: number, kind: string, line?: number): void;
|
|
24
|
+
export declare function insertPkgDep(db: Database.Database, fileId: number, packageName: string, importedNames: string): void;
|
|
25
|
+
export declare function insertTypeRelation(db: Database.Database, childId: number, parentName: string, kind: string): void;
|
|
23
26
|
export declare function insertFileDep(db: Database.Database, fromFile: number, toFile: number, kind: string, importName: string): void;
|
|
24
27
|
export declare function removeStaleFiles(db: Database.Database, validPaths: Set<string>): number;
|
|
25
28
|
export declare function removeFile(db: Database.Database, filePath: string): void;
|
package/dist/db/schema.js
CHANGED
|
@@ -41,6 +41,8 @@ exports.getOrCreateFile = getOrCreateFile;
|
|
|
41
41
|
exports.clearFileData = clearFileData;
|
|
42
42
|
exports.insertSymbol = insertSymbol;
|
|
43
43
|
exports.insertEdge = insertEdge;
|
|
44
|
+
exports.insertPkgDep = insertPkgDep;
|
|
45
|
+
exports.insertTypeRelation = insertTypeRelation;
|
|
44
46
|
exports.insertFileDep = insertFileDep;
|
|
45
47
|
exports.removeStaleFiles = removeStaleFiles;
|
|
46
48
|
exports.removeFile = removeFile;
|
|
@@ -77,6 +79,7 @@ CREATE TABLE IF NOT EXISTS edges (
|
|
|
77
79
|
from_id INTEGER REFERENCES symbols(id) ON DELETE CASCADE,
|
|
78
80
|
to_id INTEGER REFERENCES symbols(id) ON DELETE CASCADE,
|
|
79
81
|
kind TEXT NOT NULL,
|
|
82
|
+
line INTEGER,
|
|
80
83
|
PRIMARY KEY (from_id, to_id, kind)
|
|
81
84
|
);
|
|
82
85
|
|
|
@@ -88,6 +91,20 @@ CREATE TABLE IF NOT EXISTS file_deps (
|
|
|
88
91
|
PRIMARY KEY (from_file, to_file, kind, import_name)
|
|
89
92
|
);
|
|
90
93
|
|
|
94
|
+
CREATE TABLE IF NOT EXISTS pkg_deps (
|
|
95
|
+
file_id INTEGER REFERENCES files(id) ON DELETE CASCADE,
|
|
96
|
+
package TEXT NOT NULL,
|
|
97
|
+
imported_names TEXT,
|
|
98
|
+
PRIMARY KEY (file_id, package)
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
CREATE TABLE IF NOT EXISTS type_relations (
|
|
102
|
+
child_id INTEGER REFERENCES symbols(id) ON DELETE CASCADE,
|
|
103
|
+
parent_name TEXT NOT NULL,
|
|
104
|
+
kind TEXT NOT NULL,
|
|
105
|
+
PRIMARY KEY (child_id, parent_name, kind)
|
|
106
|
+
);
|
|
107
|
+
|
|
91
108
|
CREATE TABLE IF NOT EXISTS rankings (
|
|
92
109
|
symbol_id INTEGER PRIMARY KEY REFERENCES symbols(id) ON DELETE CASCADE,
|
|
93
110
|
pagerank REAL DEFAULT 0,
|
|
@@ -125,11 +142,16 @@ CREATE INDEX IF NOT EXISTS idx_symbols_file ON symbols(file_id);
|
|
|
125
142
|
CREATE INDEX IF NOT EXISTS idx_symbols_name ON symbols(name);
|
|
126
143
|
CREATE INDEX IF NOT EXISTS idx_symbols_kind ON symbols(kind);
|
|
127
144
|
CREATE INDEX IF NOT EXISTS idx_symbols_qualified ON symbols(qualified_name);
|
|
145
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_exported ON symbols(exported, file_id);
|
|
128
146
|
CREATE INDEX IF NOT EXISTS idx_edges_to ON edges(to_id, kind);
|
|
129
147
|
CREATE INDEX IF NOT EXISTS idx_edges_from ON edges(from_id, kind);
|
|
130
148
|
CREATE INDEX IF NOT EXISTS idx_files_hash ON files(content_hash);
|
|
131
149
|
CREATE INDEX IF NOT EXISTS idx_file_deps_to ON file_deps(to_file);
|
|
132
150
|
CREATE INDEX IF NOT EXISTS idx_file_deps_from ON file_deps(from_file);
|
|
151
|
+
CREATE INDEX IF NOT EXISTS idx_pkg_deps_package ON pkg_deps(package);
|
|
152
|
+
CREATE INDEX IF NOT EXISTS idx_pkg_deps_file ON pkg_deps(file_id);
|
|
153
|
+
CREATE INDEX IF NOT EXISTS idx_type_relations_parent ON type_relations(parent_name);
|
|
154
|
+
CREATE INDEX IF NOT EXISTS idx_type_relations_child ON type_relations(child_id);
|
|
133
155
|
`;
|
|
134
156
|
const PRAGMAS = [
|
|
135
157
|
'PRAGMA journal_mode = WAL',
|
|
@@ -139,8 +161,8 @@ const PRAGMAS = [
|
|
|
139
161
|
'PRAGMA temp_store = MEMORY',
|
|
140
162
|
'PRAGMA mmap_size = 268435456',
|
|
141
163
|
];
|
|
142
|
-
function openDatabase(projectRoot) {
|
|
143
|
-
const codexDir = (0, utils_1.ensureCodexDir)(projectRoot);
|
|
164
|
+
function openDatabase(projectRoot, work) {
|
|
165
|
+
const codexDir = work !== undefined ? (0, utils_1.ensureCodexDir)(projectRoot, work) : (0, utils_1.ensureCodexDir)(projectRoot);
|
|
144
166
|
const dbPath = path.join(codexDir, 'index.db');
|
|
145
167
|
const db = new better_sqlite3_1.default(dbPath);
|
|
146
168
|
for (const pragma of PRAGMAS) {
|
|
@@ -150,8 +172,23 @@ function openDatabase(projectRoot) {
|
|
|
150
172
|
db.exec(FTS_SQL);
|
|
151
173
|
db.exec(TRIGGERS_SQL);
|
|
152
174
|
db.exec(INDEXES_SQL);
|
|
175
|
+
// Migrations for existing databases
|
|
176
|
+
migrateSchema(db);
|
|
153
177
|
return db;
|
|
154
178
|
}
|
|
179
|
+
function migrateSchema(db) {
|
|
180
|
+
// Add columns that may not exist in older databases
|
|
181
|
+
const migrations = [
|
|
182
|
+
'ALTER TABLE symbols ADD COLUMN parameters TEXT',
|
|
183
|
+
'ALTER TABLE edges ADD COLUMN line INTEGER',
|
|
184
|
+
];
|
|
185
|
+
for (const sql of migrations) {
|
|
186
|
+
try {
|
|
187
|
+
db.exec(sql);
|
|
188
|
+
}
|
|
189
|
+
catch { /* column already exists */ }
|
|
190
|
+
}
|
|
191
|
+
}
|
|
155
192
|
const getFileStmt = new WeakMap();
|
|
156
193
|
const insertFileStmt = new WeakMap();
|
|
157
194
|
const updateFileStmt = new WeakMap();
|
|
@@ -163,35 +200,43 @@ function getOrPrepare(map, db, sql) {
|
|
|
163
200
|
}
|
|
164
201
|
return stmt;
|
|
165
202
|
}
|
|
166
|
-
function getOrCreateFile(db, filePath, hash, language, lineCount) {
|
|
203
|
+
function getOrCreateFile(db, filePath, hash, language, lineCount, lastModified) {
|
|
167
204
|
const get = getOrPrepare(getFileStmt, db, 'SELECT id, content_hash FROM files WHERE path = ?');
|
|
168
205
|
const existing = get.get(filePath);
|
|
169
206
|
if (existing) {
|
|
170
207
|
if (existing.content_hash === hash) {
|
|
171
208
|
return { id: existing.id, changed: false };
|
|
172
209
|
}
|
|
173
|
-
const update = getOrPrepare(updateFileStmt, db, 'UPDATE files SET content_hash = ?, language = ?, line_count = ?, last_indexed = ? WHERE id = ?');
|
|
174
|
-
update.run(hash, language, lineCount, Date.now(), existing.id);
|
|
210
|
+
const update = getOrPrepare(updateFileStmt, db, 'UPDATE files SET content_hash = ?, language = ?, line_count = ?, last_modified = ?, last_indexed = ? WHERE id = ?');
|
|
211
|
+
update.run(hash, language, lineCount, lastModified || Date.now(), Date.now(), existing.id);
|
|
175
212
|
return { id: existing.id, changed: true };
|
|
176
213
|
}
|
|
177
|
-
const insert = getOrPrepare(insertFileStmt, db, 'INSERT INTO files (path, content_hash, language, line_count, last_indexed) VALUES (?, ?, ?, ?, ?)');
|
|
178
|
-
const result = insert.run(filePath, hash, language, lineCount, Date.now());
|
|
214
|
+
const insert = getOrPrepare(insertFileStmt, db, 'INSERT INTO files (path, content_hash, language, line_count, last_modified, last_indexed) VALUES (?, ?, ?, ?, ?, ?)');
|
|
215
|
+
const result = insert.run(filePath, hash, language, lineCount, lastModified || Date.now(), Date.now());
|
|
179
216
|
return { id: Number(result.lastInsertRowid), changed: true };
|
|
180
217
|
}
|
|
181
218
|
function clearFileData(db, fileId) {
|
|
182
219
|
db.prepare('DELETE FROM rankings WHERE symbol_id IN (SELECT id FROM symbols WHERE file_id = ?)').run(fileId);
|
|
220
|
+
db.prepare('DELETE FROM type_relations WHERE child_id IN (SELECT id FROM symbols WHERE file_id = ?)').run(fileId);
|
|
183
221
|
db.prepare('DELETE FROM edges WHERE from_id IN (SELECT id FROM symbols WHERE file_id = ?) OR to_id IN (SELECT id FROM symbols WHERE file_id = ?)').run(fileId, fileId);
|
|
184
222
|
db.prepare('DELETE FROM symbols WHERE file_id = ?').run(fileId);
|
|
185
223
|
db.prepare('DELETE FROM file_deps WHERE from_file = ?').run(fileId);
|
|
224
|
+
db.prepare('DELETE FROM pkg_deps WHERE file_id = ?').run(fileId);
|
|
186
225
|
}
|
|
187
226
|
function insertSymbol(db, fileId, sym) {
|
|
188
|
-
const stmt = db.prepare(`INSERT INTO symbols (name, qualified_name, kind, file_id, line_start, line_end, signature, docstring, content, content_hash, exported)
|
|
189
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
190
|
-
const result = stmt.run(sym.name, sym.qualifiedName || null, sym.kind, fileId, sym.lineStart, sym.lineEnd, sym.signature || null, sym.docstring || null, sym.content || null, sym.contentHash || null, sym.exported ? 1 : 0);
|
|
227
|
+
const stmt = db.prepare(`INSERT INTO symbols (name, qualified_name, kind, file_id, line_start, line_end, signature, docstring, content, content_hash, exported, parameters)
|
|
228
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
229
|
+
const result = stmt.run(sym.name, sym.qualifiedName || null, sym.kind, fileId, sym.lineStart, sym.lineEnd, sym.signature || null, sym.docstring || null, sym.content || null, sym.contentHash || null, sym.exported ? 1 : 0, sym.parameters || null);
|
|
191
230
|
return Number(result.lastInsertRowid);
|
|
192
231
|
}
|
|
193
|
-
function insertEdge(db, fromId, toId, kind) {
|
|
194
|
-
db.prepare('INSERT OR IGNORE INTO edges (from_id, to_id, kind) VALUES (?, ?, ?)').run(fromId, toId, kind);
|
|
232
|
+
function insertEdge(db, fromId, toId, kind, line) {
|
|
233
|
+
db.prepare('INSERT OR IGNORE INTO edges (from_id, to_id, kind, line) VALUES (?, ?, ?, ?)').run(fromId, toId, kind, line || null);
|
|
234
|
+
}
|
|
235
|
+
function insertPkgDep(db, fileId, packageName, importedNames) {
|
|
236
|
+
db.prepare('INSERT OR IGNORE INTO pkg_deps (file_id, package, imported_names) VALUES (?, ?, ?)').run(fileId, packageName, importedNames);
|
|
237
|
+
}
|
|
238
|
+
function insertTypeRelation(db, childId, parentName, kind) {
|
|
239
|
+
db.prepare('INSERT OR IGNORE INTO type_relations (child_id, parent_name, kind) VALUES (?, ?, ?)').run(childId, parentName, kind);
|
|
195
240
|
}
|
|
196
241
|
function insertFileDep(db, fromFile, toFile, kind, importName) {
|
|
197
242
|
db.prepare('INSERT OR IGNORE INTO file_deps (from_file, to_file, kind, import_name) VALUES (?, ?, ?, ?)').run(fromFile, toFile, kind, importName);
|
package/dist/db/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -70,21 +70,31 @@ program
|
|
|
70
70
|
.command('init')
|
|
71
71
|
.argument('[path]', 'Project directory')
|
|
72
72
|
.option('-v, --verbose', 'Verbose output')
|
|
73
|
+
.option('-w, --work', 'Work mode: store data in .local/ and gitignore all config (nothing committed)')
|
|
73
74
|
.description('Index project + install Claude Code config + generate docs')
|
|
74
75
|
.action((pathArg, opts) => {
|
|
75
76
|
const rootDir = resolveRoot(pathArg);
|
|
76
77
|
const dirname = path.basename(rootDir);
|
|
77
|
-
|
|
78
|
-
|
|
78
|
+
const work = !!opts.work;
|
|
79
|
+
console.log(`Indexing ${dirname}...${work ? ' (work mode — .local/)' : ''}`);
|
|
80
|
+
const stats = (0, indexer_1.indexProject)(rootDir, { verbose: opts.verbose, work });
|
|
79
81
|
console.log(`Indexed ${stats.indexedFiles} files (${stats.skippedFiles} unchanged) in ${(0, utils_1.formatMs)(stats.timeMs)}`);
|
|
80
82
|
console.log(` ${stats.symbols} symbols, ${stats.edges} edges`);
|
|
81
83
|
console.log('Installing Claude Code config...');
|
|
82
|
-
(0, installer_1.install)(rootDir);
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
(0, installer_1.install)(rootDir, { work });
|
|
85
|
+
if (!work) {
|
|
86
|
+
console.log('Generating CLAUDE.md...');
|
|
87
|
+
(0, claudemd_1.writeClaudeMd)(rootDir);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.log('Skipping CLAUDE.md (work mode — use codex MCP tools instead)');
|
|
91
|
+
}
|
|
85
92
|
console.log('');
|
|
86
93
|
console.log('Setup complete! MCP server will start automatically when you open Claude Code.');
|
|
87
94
|
console.log('Hooks installed: SessionStart, PreToolUse (Write/Edit), PostToolUse (Write/Edit)');
|
|
95
|
+
if (work) {
|
|
96
|
+
console.log('Work mode: .local/, .claude/, .mcp.json are gitignored — nothing committed.');
|
|
97
|
+
}
|
|
88
98
|
});
|
|
89
99
|
// --- reindex ---
|
|
90
100
|
program
|
|
@@ -268,6 +278,7 @@ program
|
|
|
268
278
|
const fs = require('fs');
|
|
269
279
|
const toRemove = [
|
|
270
280
|
path.join(rootDir, '.codex'),
|
|
281
|
+
path.join(rootDir, '.local', '.codex'),
|
|
271
282
|
path.join(rootDir, '.claude', 'skills', 'codex'),
|
|
272
283
|
];
|
|
273
284
|
for (const p of toRemove) {
|