pindex 1.0.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/LICENSE +21 -0
- package/README.md +767 -0
- package/dist/cli/daemon.d.ts +13 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +70 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +212 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +44 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +301 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/project-detector.d.ts +44 -0
- package/dist/cli/project-detector.d.ts.map +1 -0
- package/dist/cli/project-detector.js +144 -0
- package/dist/cli/project-detector.js.map +1 -0
- package/dist/cli/setup.d.ts +9 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +110 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/db/database.d.ts +5 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/database.js +19 -0
- package/dist/db/database.js.map +1 -0
- package/dist/db/migrations.d.ts +6 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +32 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/queries.d.ts +132 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +222 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.d.ts +5 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +179 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/gui/index.d.ts +3 -0
- package/dist/gui/index.d.ts.map +1 -0
- package/dist/gui/index.js +56 -0
- package/dist/gui/index.js.map +1 -0
- package/dist/gui/server.d.ts +31 -0
- package/dist/gui/server.d.ts.map +1 -0
- package/dist/gui/server.js +729 -0
- package/dist/gui/server.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/index.d.ts +38 -0
- package/dist/indexer/index.d.ts.map +1 -0
- package/dist/indexer/index.js +283 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/parser.d.ts +20 -0
- package/dist/indexer/parser.d.ts.map +1 -0
- package/dist/indexer/parser.js +431 -0
- package/dist/indexer/parser.js.map +1 -0
- package/dist/indexer/summarizer.d.ts +15 -0
- package/dist/indexer/summarizer.d.ts.map +1 -0
- package/dist/indexer/summarizer.js +24 -0
- package/dist/indexer/summarizer.js.map +1 -0
- package/dist/indexer/watcher.d.ts +25 -0
- package/dist/indexer/watcher.d.ts.map +1 -0
- package/dist/indexer/watcher.js +54 -0
- package/dist/indexer/watcher.js.map +1 -0
- package/dist/monitoring/estimator.d.ts +20 -0
- package/dist/monitoring/estimator.d.ts.map +1 -0
- package/dist/monitoring/estimator.js +94 -0
- package/dist/monitoring/estimator.js.map +1 -0
- package/dist/monitoring/server.d.ts +20 -0
- package/dist/monitoring/server.d.ts.map +1 -0
- package/dist/monitoring/server.js +86 -0
- package/dist/monitoring/server.js.map +1 -0
- package/dist/monitoring/token-logger.d.ts +26 -0
- package/dist/monitoring/token-logger.d.ts.map +1 -0
- package/dist/monitoring/token-logger.js +47 -0
- package/dist/monitoring/token-logger.js.map +1 -0
- package/dist/server.d.ts +18 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +310 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/find_usages.d.ts +4 -0
- package/dist/tools/find_usages.d.ts.map +1 -0
- package/dist/tools/find_usages.js +13 -0
- package/dist/tools/find_usages.js.map +1 -0
- package/dist/tools/get_context.d.ts +6 -0
- package/dist/tools/get_context.d.ts.map +1 -0
- package/dist/tools/get_context.js +36 -0
- package/dist/tools/get_context.js.map +1 -0
- package/dist/tools/get_dependencies.d.ts +4 -0
- package/dist/tools/get_dependencies.d.ts.map +1 -0
- package/dist/tools/get_dependencies.js +16 -0
- package/dist/tools/get_dependencies.js.map +1 -0
- package/dist/tools/get_doc_chunk.d.ts +4 -0
- package/dist/tools/get_doc_chunk.d.ts.map +1 -0
- package/dist/tools/get_doc_chunk.js +32 -0
- package/dist/tools/get_doc_chunk.js.map +1 -0
- package/dist/tools/get_file_summary.d.ts +4 -0
- package/dist/tools/get_file_summary.d.ts.map +1 -0
- package/dist/tools/get_file_summary.js +23 -0
- package/dist/tools/get_file_summary.js.map +1 -0
- package/dist/tools/get_project_overview.d.ts +5 -0
- package/dist/tools/get_project_overview.d.ts.map +1 -0
- package/dist/tools/get_project_overview.js +60 -0
- package/dist/tools/get_project_overview.js.map +1 -0
- package/dist/tools/get_symbol.d.ts +4 -0
- package/dist/tools/get_symbol.d.ts.map +1 -0
- package/dist/tools/get_symbol.js +21 -0
- package/dist/tools/get_symbol.js.map +1 -0
- package/dist/tools/get_token_stats.d.ts +4 -0
- package/dist/tools/get_token_stats.d.ts.map +1 -0
- package/dist/tools/get_token_stats.js +6 -0
- package/dist/tools/get_token_stats.js.map +1 -0
- package/dist/tools/reindex.d.ts +5 -0
- package/dist/tools/reindex.d.ts.map +1 -0
- package/dist/tools/reindex.js +21 -0
- package/dist/tools/reindex.js.map +1 -0
- package/dist/tools/save_context.d.ts +4 -0
- package/dist/tools/save_context.d.ts.map +1 -0
- package/dist/tools/save_context.js +17 -0
- package/dist/tools/save_context.js.map +1 -0
- package/dist/tools/search_docs.d.ts +4 -0
- package/dist/tools/search_docs.d.ts.map +1 -0
- package/dist/tools/search_docs.js +42 -0
- package/dist/tools/search_docs.js.map +1 -0
- package/dist/tools/search_symbols.d.ts +5 -0
- package/dist/tools/search_symbols.d.ts.map +1 -0
- package/dist/tools/search_symbols.js +36 -0
- package/dist/tools/search_symbols.js.map +1 -0
- package/dist/tools/start_comparison.d.ts +4 -0
- package/dist/tools/start_comparison.d.ts.map +1 -0
- package/dist/tools/start_comparison.js +15 -0
- package/dist/tools/start_comparison.js.map +1 -0
- package/dist/types.d.ts +318 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
// CJS require wrapper — needed because tree-sitter ships as CommonJS but this
|
|
4
|
+
// package uses ESM ("type": "module"). createRequire gives us a proper require
|
|
5
|
+
// that also works with vi.mock() in Vitest (same module cache is used).
|
|
6
|
+
const _require = createRequire(import.meta.url);
|
|
7
|
+
// ─── Language Detection ───────────────────────────────────────────────────────
|
|
8
|
+
const EXTENSION_MAP = {
|
|
9
|
+
ts: 'typescript',
|
|
10
|
+
tsx: 'tsx',
|
|
11
|
+
js: 'javascript',
|
|
12
|
+
mjs: 'javascript',
|
|
13
|
+
cjs: 'javascript',
|
|
14
|
+
jsx: 'jsx',
|
|
15
|
+
py: 'python',
|
|
16
|
+
go: 'go',
|
|
17
|
+
rs: 'rust',
|
|
18
|
+
java: 'java',
|
|
19
|
+
kt: 'kotlin',
|
|
20
|
+
kts: 'kotlin',
|
|
21
|
+
vue: 'vue',
|
|
22
|
+
svelte: 'svelte',
|
|
23
|
+
php: 'php',
|
|
24
|
+
rb: 'ruby',
|
|
25
|
+
cs: 'csharp',
|
|
26
|
+
md: 'markdown',
|
|
27
|
+
markdown: 'markdown',
|
|
28
|
+
yaml: 'yaml',
|
|
29
|
+
yml: 'yaml',
|
|
30
|
+
txt: 'text',
|
|
31
|
+
};
|
|
32
|
+
/** Returns true for file types that should be indexed as text documents (not code). */
|
|
33
|
+
export function isDocumentLanguage(language) {
|
|
34
|
+
return language === 'markdown' || language === 'yaml' || language === 'text';
|
|
35
|
+
}
|
|
36
|
+
export function detectLanguage(filePath) {
|
|
37
|
+
const ext = filePath.split('.').pop()?.toLowerCase() ?? '';
|
|
38
|
+
return EXTENSION_MAP[ext] ?? 'unknown';
|
|
39
|
+
}
|
|
40
|
+
// ─── Token Estimation ─────────────────────────────────────────────────────────
|
|
41
|
+
/** Estimates token count using the ~4 chars/token heuristic. */
|
|
42
|
+
export function estimateTokens(content) {
|
|
43
|
+
if (!content)
|
|
44
|
+
return 0;
|
|
45
|
+
return Math.ceil(content.length / 4);
|
|
46
|
+
}
|
|
47
|
+
// ─── Signature Building ───────────────────────────────────────────────────────
|
|
48
|
+
/** Builds a concise one-line signature for a declaration node. */
|
|
49
|
+
export function buildSignature(node, kind) {
|
|
50
|
+
const namePart = node.childForFieldName('name');
|
|
51
|
+
const name = namePart?.text ?? '';
|
|
52
|
+
switch (kind) {
|
|
53
|
+
case 'function':
|
|
54
|
+
case 'method': {
|
|
55
|
+
const params = node.childForFieldName('parameters');
|
|
56
|
+
const returnType = node.childForFieldName('return_type');
|
|
57
|
+
const paramText = params?.text ?? '()';
|
|
58
|
+
const retText = returnType?.text ?? '';
|
|
59
|
+
return `${name}${paramText}${retText}`.replace(/\s+/g, ' ').trim();
|
|
60
|
+
}
|
|
61
|
+
case 'class': {
|
|
62
|
+
const heritage = node.childForFieldName('class_heritage');
|
|
63
|
+
return heritage ? `class ${name} ${heritage.text}` : `class ${name}`;
|
|
64
|
+
}
|
|
65
|
+
case 'interface': {
|
|
66
|
+
const heritage = node.childForFieldName('extends_clause');
|
|
67
|
+
return heritage ? `interface ${name} ${heritage.text}` : `interface ${name}`;
|
|
68
|
+
}
|
|
69
|
+
case 'type': {
|
|
70
|
+
const value = node.childForFieldName('value');
|
|
71
|
+
const valueText = value?.text ?? '...';
|
|
72
|
+
const truncated = valueText.length > 50 ? valueText.substring(0, 47) + '...' : valueText;
|
|
73
|
+
return `type ${name} = ${truncated}`;
|
|
74
|
+
}
|
|
75
|
+
case 'enum': {
|
|
76
|
+
return `enum ${name}`;
|
|
77
|
+
}
|
|
78
|
+
default:
|
|
79
|
+
return name || node.text.split('\n')[0].trim().substring(0, 60);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// ─── Symbol Extraction ────────────────────────────────────────────────────────
|
|
83
|
+
const DECLARATION_TYPES = [
|
|
84
|
+
{ nodeType: 'function_declaration', kind: 'function' },
|
|
85
|
+
{ nodeType: 'class_declaration', kind: 'class' },
|
|
86
|
+
{ nodeType: 'interface_declaration', kind: 'interface' },
|
|
87
|
+
{ nodeType: 'type_alias_declaration', kind: 'type' },
|
|
88
|
+
{ nodeType: 'enum_declaration', kind: 'enum' },
|
|
89
|
+
];
|
|
90
|
+
function extractFromDeclarationNode(node, kind, isExported) {
|
|
91
|
+
const nameNode = node.childForFieldName('name');
|
|
92
|
+
if (!nameNode)
|
|
93
|
+
return null;
|
|
94
|
+
return {
|
|
95
|
+
name: nameNode.text,
|
|
96
|
+
kind,
|
|
97
|
+
signature: buildSignature(node, kind),
|
|
98
|
+
startLine: node.startPosition.row + 1, // convert 0-indexed to 1-indexed
|
|
99
|
+
endLine: node.endPosition.row + 1,
|
|
100
|
+
isExported,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function extractMethodsFromClass(classNode) {
|
|
104
|
+
const methods = [];
|
|
105
|
+
const methodNodes = classNode.descendantsOfType('method_definition');
|
|
106
|
+
for (const methodNode of methodNodes) {
|
|
107
|
+
const nameNode = methodNode.childForFieldName('name');
|
|
108
|
+
if (!nameNode)
|
|
109
|
+
continue;
|
|
110
|
+
const methodName = nameNode.text;
|
|
111
|
+
if (methodName === 'constructor')
|
|
112
|
+
continue;
|
|
113
|
+
methods.push({
|
|
114
|
+
name: methodName,
|
|
115
|
+
kind: 'method',
|
|
116
|
+
signature: buildSignature(methodNode, 'method'),
|
|
117
|
+
startLine: methodNode.startPosition.row + 1,
|
|
118
|
+
endLine: methodNode.endPosition.row + 1,
|
|
119
|
+
isExported: false,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return methods;
|
|
123
|
+
}
|
|
124
|
+
function extractFromExportStatement(node) {
|
|
125
|
+
const declaration = node.childForFieldName('declaration');
|
|
126
|
+
if (!declaration)
|
|
127
|
+
return [];
|
|
128
|
+
const symbols = [];
|
|
129
|
+
for (const { nodeType, kind } of DECLARATION_TYPES) {
|
|
130
|
+
if (declaration.type === nodeType) {
|
|
131
|
+
const sym = extractFromDeclarationNode(declaration, kind, true);
|
|
132
|
+
if (sym) {
|
|
133
|
+
symbols.push(sym);
|
|
134
|
+
if (kind === 'class') {
|
|
135
|
+
symbols.push(...extractMethodsFromClass(declaration));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return symbols;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// export const x = ...
|
|
142
|
+
if (declaration.type === 'lexical_declaration' ||
|
|
143
|
+
declaration.type === 'variable_declaration') {
|
|
144
|
+
const declarators = declaration.descendantsOfType('variable_declarator');
|
|
145
|
+
for (const decl of declarators) {
|
|
146
|
+
const nameNode = decl.childForFieldName('name');
|
|
147
|
+
if (!nameNode)
|
|
148
|
+
continue;
|
|
149
|
+
symbols.push({
|
|
150
|
+
name: nameNode.text,
|
|
151
|
+
kind: 'const',
|
|
152
|
+
signature: nameNode.text,
|
|
153
|
+
startLine: declaration.startPosition.row + 1,
|
|
154
|
+
endLine: declaration.endPosition.row + 1,
|
|
155
|
+
isExported: true,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return symbols;
|
|
160
|
+
}
|
|
161
|
+
/** Extracts all symbols from a parsed AST root node. */
|
|
162
|
+
export function extractSymbols(rootNode, _content) {
|
|
163
|
+
const symbols = [];
|
|
164
|
+
for (const child of rootNode.namedChildren) {
|
|
165
|
+
// Handle export statements
|
|
166
|
+
if (child.type === 'export_statement') {
|
|
167
|
+
symbols.push(...extractFromExportStatement(child));
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
// Handle direct declarations
|
|
171
|
+
for (const { nodeType, kind } of DECLARATION_TYPES) {
|
|
172
|
+
if (child.type === nodeType) {
|
|
173
|
+
const sym = extractFromDeclarationNode(child, kind, false);
|
|
174
|
+
if (sym) {
|
|
175
|
+
symbols.push(sym);
|
|
176
|
+
if (kind === 'class') {
|
|
177
|
+
symbols.push(...extractMethodsFromClass(child));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return symbols;
|
|
185
|
+
}
|
|
186
|
+
// ─── Import Extraction ────────────────────────────────────────────────────────
|
|
187
|
+
/** Extracts all import statements from a parsed AST root node. */
|
|
188
|
+
export function extractImports(rootNode) {
|
|
189
|
+
const imports = [];
|
|
190
|
+
const importNodes = rootNode.descendantsOfType('import_statement');
|
|
191
|
+
for (const importNode of importNodes) {
|
|
192
|
+
const sourceNode = importNode.childForFieldName('source');
|
|
193
|
+
if (!sourceNode)
|
|
194
|
+
continue;
|
|
195
|
+
// Strip quotes from the source string
|
|
196
|
+
const source = sourceNode.text.replace(/^['"`]|['"`]$/g, '');
|
|
197
|
+
// Extract named imports
|
|
198
|
+
const specifiers = importNode.descendantsOfType('import_specifier');
|
|
199
|
+
const symbols = specifiers.map((spec) => {
|
|
200
|
+
const nameNode = spec.childForFieldName('name');
|
|
201
|
+
return nameNode?.text ?? spec.text;
|
|
202
|
+
}).filter(Boolean);
|
|
203
|
+
imports.push({ source, symbols });
|
|
204
|
+
}
|
|
205
|
+
return imports;
|
|
206
|
+
}
|
|
207
|
+
// ─── Regex-based Symbol Extraction ───────────────────────────────────────────
|
|
208
|
+
// Used for languages without a tree-sitter grammar. Each extractor returns
|
|
209
|
+
// symbols and imports parsed from the raw source text via regular expressions.
|
|
210
|
+
function regexSymbols(content, patterns) {
|
|
211
|
+
const symbols = [];
|
|
212
|
+
const lines = content.split('\n');
|
|
213
|
+
for (const { re, kind } of patterns) {
|
|
214
|
+
let m;
|
|
215
|
+
re.lastIndex = 0;
|
|
216
|
+
while ((m = re.exec(content)) !== null) {
|
|
217
|
+
const name = m[1] ?? m[2];
|
|
218
|
+
if (!name)
|
|
219
|
+
continue;
|
|
220
|
+
const lineNum = content.slice(0, m.index).split('\n').length;
|
|
221
|
+
const rawLine = lines[lineNum - 1] ?? '';
|
|
222
|
+
const sig = rawLine.trim().replace(/\s+/g, ' ').substring(0, 80);
|
|
223
|
+
symbols.push({ name, kind, signature: sig, startLine: lineNum, endLine: lineNum, isExported: true });
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return symbols;
|
|
227
|
+
}
|
|
228
|
+
function parseJava(content) {
|
|
229
|
+
const symbols = regexSymbols(content, [
|
|
230
|
+
{ re: /^[ \t]*(?:(?:public|protected|private|static|abstract|final|sealed|non-sealed)\s+)*(?:class|interface|enum|record|@interface)\s+(\w+)/gm, kind: 'class' },
|
|
231
|
+
{ re: /^[ \t]+(?:(?:public|protected|private|static|abstract|final|synchronized|default|native)\s+)*(?:<[^>]+>\s+)?(?:void|boolean|int|long|double|float|String|[\w][\w.<>, \[\]]*?)\s+(\w+)\s*\(/gm, kind: 'method' },
|
|
232
|
+
]);
|
|
233
|
+
const imports = [];
|
|
234
|
+
const importRe = /^import\s+(?:static\s+)?([^;]+);/gm;
|
|
235
|
+
let m;
|
|
236
|
+
while ((m = importRe.exec(content)) !== null) {
|
|
237
|
+
const parts = m[1].trim().split('.');
|
|
238
|
+
const sym = parts.pop() ?? '';
|
|
239
|
+
imports.push({ source: parts.join('.'), symbols: sym === '*' ? [] : [sym] });
|
|
240
|
+
}
|
|
241
|
+
return { symbols, imports };
|
|
242
|
+
}
|
|
243
|
+
function parseKotlin(content) {
|
|
244
|
+
const symbols = regexSymbols(content, [
|
|
245
|
+
{ re: /^[ \t]*(?:(?:public|private|protected|internal|abstract|open|sealed|data|inner|inline|value|annotation|enum)\s+)*(?:class|interface|object)\s+(\w+)/gm, kind: 'class' },
|
|
246
|
+
{ re: /^[ \t]*(?:(?:public|private|protected|internal|override|abstract|open|suspend|inline|operator|infix|tailrec|external)\s+)*fun\s+(?:<[^>]+>\s+)?(\w+)\s*[(<]/gm, kind: 'function' },
|
|
247
|
+
]);
|
|
248
|
+
const imports = [];
|
|
249
|
+
const importRe = /^import\s+([\w.]+)(?:\s+as\s+\w+)?/gm;
|
|
250
|
+
let m;
|
|
251
|
+
while ((m = importRe.exec(content)) !== null) {
|
|
252
|
+
const parts = m[1].split('.');
|
|
253
|
+
const sym = parts.pop() ?? '';
|
|
254
|
+
imports.push({ source: parts.join('.'), symbols: sym === '*' ? [] : [sym] });
|
|
255
|
+
}
|
|
256
|
+
return { symbols, imports };
|
|
257
|
+
}
|
|
258
|
+
function parsePython(content) {
|
|
259
|
+
const symbols = regexSymbols(content, [
|
|
260
|
+
{ re: /^class\s+(\w+)/gm, kind: 'class' },
|
|
261
|
+
{ re: /^(?:async\s+)?def\s+(\w+)/gm, kind: 'function' },
|
|
262
|
+
]);
|
|
263
|
+
const imports = [];
|
|
264
|
+
const fromRe = /^from\s+(\S+)\s+import\s+(.+)/gm;
|
|
265
|
+
const plainRe = /^import\s+(\S+)/gm;
|
|
266
|
+
let m;
|
|
267
|
+
while ((m = fromRe.exec(content)) !== null) {
|
|
268
|
+
const syms = m[2].split(',').map((s) => s.trim().split(/\s+as\s+/)[0].trim()).filter(Boolean);
|
|
269
|
+
imports.push({ source: m[1], symbols: syms });
|
|
270
|
+
}
|
|
271
|
+
while ((m = plainRe.exec(content)) !== null) {
|
|
272
|
+
imports.push({ source: m[1], symbols: [] });
|
|
273
|
+
}
|
|
274
|
+
return { symbols, imports };
|
|
275
|
+
}
|
|
276
|
+
function parsePhp(content) {
|
|
277
|
+
const symbols = regexSymbols(content, [
|
|
278
|
+
{ re: /^(?:(?:abstract|final|readonly)\s+)*(?:class|interface|trait|enum)\s+(\w+)/gm, kind: 'class' },
|
|
279
|
+
{ re: /^[ \t]*(?:(?:public|protected|private|static|abstract|final)\s+)*function\s+(\w+)\s*\(/gm, kind: 'function' },
|
|
280
|
+
]);
|
|
281
|
+
const imports = [];
|
|
282
|
+
const useRe = /^use\s+([^;]+);/gm;
|
|
283
|
+
let m;
|
|
284
|
+
while ((m = useRe.exec(content)) !== null) {
|
|
285
|
+
const parts = m[1].trim().split('\\');
|
|
286
|
+
const sym = parts.pop() ?? '';
|
|
287
|
+
imports.push({ source: parts.join('\\'), symbols: [sym] });
|
|
288
|
+
}
|
|
289
|
+
return { symbols, imports };
|
|
290
|
+
}
|
|
291
|
+
/** Extracts the script block content from a Vue or Svelte SFC. */
|
|
292
|
+
function extractSfcScript(content) {
|
|
293
|
+
const m = /<script(?:\s[^>]*)?>([^]*?)<\/script>/i.exec(content);
|
|
294
|
+
return m?.[1] ?? '';
|
|
295
|
+
}
|
|
296
|
+
// ─── Main Parse Function ──────────────────────────────────────────────────────
|
|
297
|
+
/** Parses a source file using tree-sitter and extracts symbols + imports.
|
|
298
|
+
* Falls back gracefully if tree-sitter fails. */
|
|
299
|
+
export function parseFile(filePath, content) {
|
|
300
|
+
const language = detectLanguage(filePath);
|
|
301
|
+
const rawTokenEstimate = estimateTokens(content);
|
|
302
|
+
try {
|
|
303
|
+
// _require is a createRequire-based CJS loader (see top of file).
|
|
304
|
+
// Using _require keeps vi.mock('tree-sitter') working in Vitest because
|
|
305
|
+
// both createRequire and vi.mock share the same Node module cache.
|
|
306
|
+
const Parser = _require('tree-sitter');
|
|
307
|
+
const parser = new Parser();
|
|
308
|
+
// Route non-TS languages to regex-based parsers (no tree-sitter needed)
|
|
309
|
+
if (language === 'java') {
|
|
310
|
+
const { symbols, imports } = parseJava(content);
|
|
311
|
+
return { language, symbols, imports, rawTokenEstimate };
|
|
312
|
+
}
|
|
313
|
+
if (language === 'kotlin') {
|
|
314
|
+
const { symbols, imports } = parseKotlin(content);
|
|
315
|
+
return { language, symbols, imports, rawTokenEstimate };
|
|
316
|
+
}
|
|
317
|
+
if (language === 'python') {
|
|
318
|
+
const { symbols, imports } = parsePython(content);
|
|
319
|
+
return { language, symbols, imports, rawTokenEstimate };
|
|
320
|
+
}
|
|
321
|
+
if (language === 'php') {
|
|
322
|
+
const { symbols, imports } = parsePhp(content);
|
|
323
|
+
return { language, symbols, imports, rawTokenEstimate };
|
|
324
|
+
}
|
|
325
|
+
if (language === 'vue' || language === 'svelte') {
|
|
326
|
+
// Parse the <script> block as TypeScript via tree-sitter
|
|
327
|
+
const scriptContent = extractSfcScript(content);
|
|
328
|
+
if (!scriptContent.trim())
|
|
329
|
+
return { language, symbols: [], imports: [], rawTokenEstimate };
|
|
330
|
+
const Parser = _require('tree-sitter');
|
|
331
|
+
const parser = new Parser();
|
|
332
|
+
const tsLangs = _require('tree-sitter-typescript');
|
|
333
|
+
parser.setLanguage(tsLangs.typescript);
|
|
334
|
+
const tree = parser.parse(scriptContent);
|
|
335
|
+
const symbols = extractSymbols(tree.rootNode, scriptContent);
|
|
336
|
+
const imports = extractImports(tree.rootNode);
|
|
337
|
+
return { language, symbols, imports, rawTokenEstimate };
|
|
338
|
+
}
|
|
339
|
+
let lang;
|
|
340
|
+
if (language === 'typescript' || language === 'tsx') {
|
|
341
|
+
const tsLangs = _require('tree-sitter-typescript');
|
|
342
|
+
lang = language === 'tsx' ? tsLangs.tsx : tsLangs.typescript;
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
return { language, symbols: [], imports: [], rawTokenEstimate };
|
|
346
|
+
}
|
|
347
|
+
parser.setLanguage(lang);
|
|
348
|
+
const tree = parser.parse(content);
|
|
349
|
+
const symbols = extractSymbols(tree.rootNode, content);
|
|
350
|
+
const imports = extractImports(tree.rootNode);
|
|
351
|
+
return { language, symbols, imports, rawTokenEstimate };
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
// tree-sitter not available or failed – return metadata only
|
|
355
|
+
return { language, symbols: [], imports: [], rawTokenEstimate };
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
// ─── Document Parsing ─────────────────────────────────────────────────────────
|
|
359
|
+
const CHUNK_SIZE = 50; // lines per chunk for non-markdown files
|
|
360
|
+
/** Splits markdown content into chunks at heading boundaries. */
|
|
361
|
+
function splitMarkdownByHeadings(lines) {
|
|
362
|
+
const chunks = [];
|
|
363
|
+
let chunkIndex = 0;
|
|
364
|
+
let chunkStart = 0;
|
|
365
|
+
let currentHeading = null;
|
|
366
|
+
let chunkLines = [];
|
|
367
|
+
function flush(endLine) {
|
|
368
|
+
if (chunkLines.length === 0)
|
|
369
|
+
return;
|
|
370
|
+
chunks.push({
|
|
371
|
+
chunkIndex: chunkIndex++,
|
|
372
|
+
heading: currentHeading,
|
|
373
|
+
startLine: chunkStart + 1, // 1-indexed
|
|
374
|
+
endLine: endLine,
|
|
375
|
+
content: chunkLines.join('\n'),
|
|
376
|
+
});
|
|
377
|
+
chunkLines = [];
|
|
378
|
+
}
|
|
379
|
+
for (let i = 0; i < lines.length; i++) {
|
|
380
|
+
const line = lines[i];
|
|
381
|
+
const headingMatch = /^#{1,3}\s+(.+)$/.exec(line);
|
|
382
|
+
if (headingMatch) {
|
|
383
|
+
if (i > chunkStart) {
|
|
384
|
+
flush(i); // end previous chunk before heading
|
|
385
|
+
chunkStart = i;
|
|
386
|
+
}
|
|
387
|
+
currentHeading = headingMatch[1].trim(); // always capture heading, even at line 0
|
|
388
|
+
}
|
|
389
|
+
chunkLines.push(line);
|
|
390
|
+
}
|
|
391
|
+
flush(lines.length);
|
|
392
|
+
return chunks;
|
|
393
|
+
}
|
|
394
|
+
/** Splits any text into fixed-size line chunks. */
|
|
395
|
+
function splitByLines(lines, chunkSize) {
|
|
396
|
+
const chunks = [];
|
|
397
|
+
for (let i = 0; i < lines.length; i += chunkSize) {
|
|
398
|
+
const slice = lines.slice(i, i + chunkSize);
|
|
399
|
+
chunks.push({
|
|
400
|
+
chunkIndex: chunks.length,
|
|
401
|
+
heading: null,
|
|
402
|
+
startLine: i + 1, // 1-indexed
|
|
403
|
+
endLine: Math.min(i + chunkSize, lines.length),
|
|
404
|
+
content: slice.join('\n'),
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
return chunks;
|
|
408
|
+
}
|
|
409
|
+
/** Parses a document file into text chunks for indexing. */
|
|
410
|
+
export function parseDocument(filePath, content) {
|
|
411
|
+
const language = detectLanguage(filePath);
|
|
412
|
+
const rawTokenEstimate = estimateTokens(content);
|
|
413
|
+
const lines = content.split('\n');
|
|
414
|
+
let chunks;
|
|
415
|
+
if (language === 'markdown') {
|
|
416
|
+
chunks = splitMarkdownByHeadings(lines);
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
chunks = splitByLines(lines, CHUNK_SIZE);
|
|
420
|
+
}
|
|
421
|
+
// Filter empty chunks
|
|
422
|
+
chunks = chunks.filter((c) => c.content.trim().length > 0);
|
|
423
|
+
// Re-number after filtering
|
|
424
|
+
chunks.forEach((c, i) => { c.chunkIndex = i; });
|
|
425
|
+
return { language, chunks, rawTokenEstimate };
|
|
426
|
+
}
|
|
427
|
+
/** Computes an MD5 hash of the file content for change detection. */
|
|
428
|
+
export function hashContent(content) {
|
|
429
|
+
return createHash('md5').update(content).digest('hex');
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/indexer/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Summarizer – optional LLM-based file/symbol summaries.
|
|
2
|
+
* Currently a stub. When GENERATE_SUMMARIES=true and an API key is available,
|
|
3
|
+
* this module would call an LLM to generate 1-2 sentence summaries. */
|
|
4
|
+
export interface SummarizerOptions {
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare class Summarizer {
|
|
8
|
+
private readonly enabled;
|
|
9
|
+
constructor(options?: SummarizerOptions);
|
|
10
|
+
/** Generates a summary for a symbol. Returns null if disabled. */
|
|
11
|
+
summarizeSymbol(_signature: string, _codeSnippet: string): Promise<string | null>;
|
|
12
|
+
/** Generates a summary for a file. Returns null if disabled. */
|
|
13
|
+
summarizeFile(_filePath: string, _content: string): Promise<string | null>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=summarizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizer.d.ts","sourceRoot":"","sources":["../../src/indexer/summarizer.ts"],"names":[],"mappings":"AAAA;;wEAEwE;AAExE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,OAAO,GAAE,iBAAsC;IAI3D,kEAAkE;IAC5D,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAMvF,gEAAgE;IAC1D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAKjF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Summarizer – optional LLM-based file/symbol summaries.
|
|
2
|
+
* Currently a stub. When GENERATE_SUMMARIES=true and an API key is available,
|
|
3
|
+
* this module would call an LLM to generate 1-2 sentence summaries. */
|
|
4
|
+
export class Summarizer {
|
|
5
|
+
enabled;
|
|
6
|
+
constructor(options = { enabled: false }) {
|
|
7
|
+
this.enabled = options.enabled;
|
|
8
|
+
}
|
|
9
|
+
/** Generates a summary for a symbol. Returns null if disabled. */
|
|
10
|
+
async summarizeSymbol(_signature, _codeSnippet) {
|
|
11
|
+
if (!this.enabled)
|
|
12
|
+
return null;
|
|
13
|
+
// TODO: Implement LLM-based summary generation
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
/** Generates a summary for a file. Returns null if disabled. */
|
|
17
|
+
async summarizeFile(_filePath, _content) {
|
|
18
|
+
if (!this.enabled)
|
|
19
|
+
return null;
|
|
20
|
+
// TODO: Implement LLM-based summary generation
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=summarizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizer.js","sourceRoot":"","sources":["../../src/indexer/summarizer.ts"],"names":[],"mappings":"AAAA;;wEAEwE;AAMxE,MAAM,OAAO,UAAU;IACJ,OAAO,CAAU;IAElC,YAAY,UAA6B,EAAE,OAAO,EAAE,KAAK,EAAE;QACzD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,YAAoB;QAC5D,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC/B,+CAA+C;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,QAAgB;QACrD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC/B,+CAA+C;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import type Database from 'better-sqlite3';
|
|
3
|
+
import type { Indexer } from './index.js';
|
|
4
|
+
export interface WatcherOptions {
|
|
5
|
+
db: Database.Database;
|
|
6
|
+
indexer: Indexer;
|
|
7
|
+
projectRoot: string;
|
|
8
|
+
}
|
|
9
|
+
export interface FileChangeEvent {
|
|
10
|
+
type: 'add' | 'change' | 'unlink';
|
|
11
|
+
path: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class FileWatcher extends EventEmitter {
|
|
14
|
+
private readonly options;
|
|
15
|
+
private readonly indexer;
|
|
16
|
+
private watcher;
|
|
17
|
+
private started;
|
|
18
|
+
constructor(options: WatcherOptions);
|
|
19
|
+
/** Starts watching the project directory for file changes. */
|
|
20
|
+
start(): Promise<void>;
|
|
21
|
+
/** Stops the file watcher. */
|
|
22
|
+
stop(): Promise<void>;
|
|
23
|
+
private handleChange;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/indexer/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,WAAY,SAAQ,YAAY;IAK/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAS;gBAEK,OAAO,EAAE,cAAc;IAKpD,8DAA8D;IACxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B,8BAA8B;IACxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAQb,YAAY;CAe3B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
export class FileWatcher extends EventEmitter {
|
|
3
|
+
options;
|
|
4
|
+
indexer;
|
|
5
|
+
watcher = null;
|
|
6
|
+
started = false;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
super();
|
|
9
|
+
this.options = options;
|
|
10
|
+
this.indexer = options.indexer;
|
|
11
|
+
}
|
|
12
|
+
/** Starts watching the project directory for file changes. */
|
|
13
|
+
async start() {
|
|
14
|
+
if (this.started)
|
|
15
|
+
return;
|
|
16
|
+
this.started = true;
|
|
17
|
+
// Dynamic import allows mocking chokidar in tests
|
|
18
|
+
const { default: chokidar } = await import('chokidar');
|
|
19
|
+
this.watcher = chokidar.watch(['**/*.ts', '**/*.tsx', '**/*.js'], {
|
|
20
|
+
cwd: this.options.projectRoot,
|
|
21
|
+
ignored: ['**/node_modules/**', '**/.git/**', '**/dist/**'],
|
|
22
|
+
persistent: true,
|
|
23
|
+
ignoreInitial: true,
|
|
24
|
+
});
|
|
25
|
+
this.watcher
|
|
26
|
+
.on('add', (path) => this.handleChange('add', path))
|
|
27
|
+
.on('change', (path) => this.handleChange('change', path))
|
|
28
|
+
.on('unlink', (path) => this.handleChange('unlink', path));
|
|
29
|
+
}
|
|
30
|
+
/** Stops the file watcher. */
|
|
31
|
+
async stop() {
|
|
32
|
+
if (this.watcher) {
|
|
33
|
+
await this.watcher.close();
|
|
34
|
+
this.watcher = null;
|
|
35
|
+
this.started = false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async handleChange(type, path) {
|
|
39
|
+
const event = { type, path };
|
|
40
|
+
this.emit('change', event);
|
|
41
|
+
if (type === 'add' || type === 'change') {
|
|
42
|
+
try {
|
|
43
|
+
await this.indexer.indexFile(path, true);
|
|
44
|
+
this.emit('indexed', path);
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
this.emit('error', err);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Note: 'unlink' events could trigger file removal from the index
|
|
51
|
+
// (future enhancement – for now we leave stale entries)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/indexer/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAe3C,MAAM,OAAO,WAAY,SAAQ,YAAY;IAKd;IAJZ,OAAO,CAAU;IAC1B,OAAO,GAAY,IAAI,CAAC;IACxB,OAAO,GAAG,KAAK,CAAC;IAExB,YAA6B,OAAuB;QAClD,KAAK,EAAE,CAAC;QADmB,YAAO,GAAP,OAAO,CAAgB;QAElD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,kDAAkD;QAClD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAEvD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE;YAChE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YAC7B,OAAO,EAAE,CAAC,oBAAoB,EAAE,YAAY,EAAE,YAAY,CAAC;YAC3D,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEF,IAAI,CAAC,OAA6C;aAChD,EAAE,CAAC,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aAC3D,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;aACjE,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,8BAA8B;IAC9B,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAO,IAAI,CAAC,OAAsC,CAAC,KAAK,EAAE,CAAC;YAC3D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,IAAiC,EAAE,IAAY;QACxE,MAAM,KAAK,GAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE3B,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,kEAAkE;QAClE,wDAAwD;IAC1D,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
/** Estimates token count for a raw string using ~4 chars/token heuristic. */
|
|
3
|
+
export declare function estimateFileTokens(content: string): number;
|
|
4
|
+
export interface ToolCallContext {
|
|
5
|
+
tool: string;
|
|
6
|
+
/** Query string (for search_symbols) */
|
|
7
|
+
query?: string;
|
|
8
|
+
/** Symbol name (for get_symbol) */
|
|
9
|
+
name?: string;
|
|
10
|
+
/** Target file path (for get_symbol, get_context, get_dependencies) */
|
|
11
|
+
targetFile?: string;
|
|
12
|
+
/** Actual tokens used (fallback multiplier) */
|
|
13
|
+
tokensUsed?: number;
|
|
14
|
+
}
|
|
15
|
+
/** Estimates how many tokens the same request would have used WITHOUT the index.
|
|
16
|
+
*
|
|
17
|
+
* This is a heuristic – not an exact measurement. The intent is to give a
|
|
18
|
+
* conservative lower bound for the "without index" scenario. */
|
|
19
|
+
export declare function estimateWithoutIndex(db: Database.Database, ctx: ToolCallContext): number;
|
|
20
|
+
//# sourceMappingURL=estimator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimator.d.ts","sourceRoot":"","sources":["../../src/monitoring/estimator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG1D;AAID,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;iEAGiE;AACjE,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,GAAG,EAAE,eAAe,GACnB,MAAM,CAqFR"}
|