@simpletoolsindiaorg/engi-mcp 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/CHANGELOG.md +34 -0
- package/LICENSE +21 -0
- package/README.md +592 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +6 -0
- package/dist/bin.js.map +1 -0
- package/dist/capabilities/analysis/analysis.d.ts +223 -0
- package/dist/capabilities/analysis/analysis.d.ts.map +1 -0
- package/dist/capabilities/analysis/analysis.js +202 -0
- package/dist/capabilities/analysis/analysis.js.map +1 -0
- package/dist/capabilities/analysis/index.d.ts +2 -0
- package/dist/capabilities/analysis/index.d.ts.map +1 -0
- package/dist/capabilities/analysis/index.js +19 -0
- package/dist/capabilities/analysis/index.js.map +1 -0
- package/dist/capabilities/documentation/documentation.d.ts +107 -0
- package/dist/capabilities/documentation/documentation.d.ts.map +1 -0
- package/dist/capabilities/documentation/documentation.js +112 -0
- package/dist/capabilities/documentation/documentation.js.map +1 -0
- package/dist/capabilities/documentation/index.d.ts +2 -0
- package/dist/capabilities/documentation/index.d.ts.map +1 -0
- package/dist/capabilities/documentation/index.js +19 -0
- package/dist/capabilities/documentation/index.js.map +1 -0
- package/dist/capabilities/execution/execution.d.ts +96 -0
- package/dist/capabilities/execution/execution.d.ts.map +1 -0
- package/dist/capabilities/execution/execution.js +175 -0
- package/dist/capabilities/execution/execution.js.map +1 -0
- package/dist/capabilities/execution/index.d.ts +2 -0
- package/dist/capabilities/execution/index.d.ts.map +1 -0
- package/dist/capabilities/execution/index.js +19 -0
- package/dist/capabilities/execution/index.js.map +1 -0
- package/dist/capabilities/memory/index.d.ts +2 -0
- package/dist/capabilities/memory/index.d.ts.map +1 -0
- package/dist/capabilities/memory/index.js +19 -0
- package/dist/capabilities/memory/index.js.map +1 -0
- package/dist/capabilities/memory/memory.d.ts +227 -0
- package/dist/capabilities/memory/memory.d.ts.map +1 -0
- package/dist/capabilities/memory/memory.js +106 -0
- package/dist/capabilities/memory/memory.js.map +1 -0
- package/dist/capabilities/planning/index.d.ts +2 -0
- package/dist/capabilities/planning/index.d.ts.map +1 -0
- package/dist/capabilities/planning/index.js +19 -0
- package/dist/capabilities/planning/index.js.map +1 -0
- package/dist/capabilities/planning/planning.d.ts +131 -0
- package/dist/capabilities/planning/planning.d.ts.map +1 -0
- package/dist/capabilities/planning/planning.js +179 -0
- package/dist/capabilities/planning/planning.js.map +1 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +19 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/indexer/index.d.ts +2 -0
- package/dist/core/indexer/index.d.ts.map +1 -0
- package/dist/core/indexer/index.js +9 -0
- package/dist/core/indexer/index.js.map +1 -0
- package/dist/core/indexer/indexer.d.ts +35 -0
- package/dist/core/indexer/indexer.d.ts.map +1 -0
- package/dist/core/indexer/indexer.js +377 -0
- package/dist/core/indexer/indexer.js.map +1 -0
- package/dist/core/retrieval/index.d.ts +2 -0
- package/dist/core/retrieval/index.d.ts.map +1 -0
- package/dist/core/retrieval/index.js +8 -0
- package/dist/core/retrieval/index.js.map +1 -0
- package/dist/core/retrieval/retriever.d.ts +28 -0
- package/dist/core/retrieval/retriever.d.ts.map +1 -0
- package/dist/core/retrieval/retriever.js +258 -0
- package/dist/core/retrieval/retriever.js.map +1 -0
- package/dist/core/summarizer/index.d.ts +2 -0
- package/dist/core/summarizer/index.d.ts.map +1 -0
- package/dist/core/summarizer/index.js +8 -0
- package/dist/core/summarizer/index.js.map +1 -0
- package/dist/core/summarizer/summarizer.d.ts +33 -0
- package/dist/core/summarizer/summarizer.d.ts.map +1 -0
- package/dist/core/summarizer/summarizer.js +341 -0
- package/dist/core/summarizer/summarizer.js.map +1 -0
- package/dist/core/types.d.ts +224 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +4 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +127 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/index.d.ts +2 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +9 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memory.d.ts +59 -0
- package/dist/memory/memory.d.ts.map +1 -0
- package/dist/memory/memory.js +212 -0
- package/dist/memory/memory.js.map +1 -0
- package/dist/resources/index.d.ts +3 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +16 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/resources.d.ts +86 -0
- package/dist/resources/resources.d.ts.map +1 -0
- package/dist/resources/resources.js +285 -0
- package/dist/resources/resources.js.map +1 -0
- package/dist/utils/formatter.d.ts +26 -0
- package/dist/utils/formatter.d.ts.map +1 -0
- package/dist/utils/formatter.js +56 -0
- package/dist/utils/formatter.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +17 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +21 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +44 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/token-counter.d.ts +24 -0
- package/dist/utils/token-counter.d.ts.map +1 -0
- package/dist/utils/token-counter.js +49 -0
- package/dist/utils/token-counter.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RESOURCE_LIST = exports.RESOURCE_URIS = void 0;
|
|
4
|
+
exports.buildArchitectureMap = buildArchitectureMap;
|
|
5
|
+
exports.buildModuleIndex = buildModuleIndex;
|
|
6
|
+
exports.buildSymbolIndex = buildSymbolIndex;
|
|
7
|
+
exports.buildTestMap = buildTestMap;
|
|
8
|
+
exports.buildDocMap = buildDocMap;
|
|
9
|
+
exports.buildPatterns = buildPatterns;
|
|
10
|
+
exports.buildGlossary = buildGlossary;
|
|
11
|
+
exports.readResource = readResource;
|
|
12
|
+
const indexer_js_1 = require("../core/indexer/indexer.js");
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Resource URI constants
|
|
15
|
+
// ============================================================================
|
|
16
|
+
exports.RESOURCE_URIS = {
|
|
17
|
+
ARCHITECTURE_MAP: 'repo://architecture-map',
|
|
18
|
+
MODULE_INDEX: 'repo://module-index',
|
|
19
|
+
SYMBOL_INDEX: 'repo://symbol-index',
|
|
20
|
+
TEST_MAP: 'repo://test-map',
|
|
21
|
+
DOC_MAP: 'repo://doc-map',
|
|
22
|
+
PATTERNS: 'repo://patterns',
|
|
23
|
+
GLOSSARY: 'repo://glossary'
|
|
24
|
+
};
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Resource metadata list (for ListResources)
|
|
27
|
+
// ============================================================================
|
|
28
|
+
exports.RESOURCE_LIST = [
|
|
29
|
+
{
|
|
30
|
+
uri: exports.RESOURCE_URIS.ARCHITECTURE_MAP,
|
|
31
|
+
name: 'Architecture Map',
|
|
32
|
+
description: 'Compact high-level module structure and dependency graph of the repository',
|
|
33
|
+
mimeType: 'application/json'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
uri: exports.RESOURCE_URIS.MODULE_INDEX,
|
|
37
|
+
name: 'Module Index',
|
|
38
|
+
description: 'Index of all top-level modules with file counts, types, and export summaries',
|
|
39
|
+
mimeType: 'application/json'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
uri: exports.RESOURCE_URIS.SYMBOL_INDEX,
|
|
43
|
+
name: 'Symbol Index',
|
|
44
|
+
description: 'Compact index of exported functions, classes, interfaces, and types',
|
|
45
|
+
mimeType: 'application/json'
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
uri: exports.RESOURCE_URIS.TEST_MAP,
|
|
49
|
+
name: 'Test Map',
|
|
50
|
+
description: 'Map of test files with their types and target source files',
|
|
51
|
+
mimeType: 'application/json'
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
uri: exports.RESOURCE_URIS.DOC_MAP,
|
|
55
|
+
name: 'Documentation Map',
|
|
56
|
+
description: 'Map of documentation files with section summaries',
|
|
57
|
+
mimeType: 'application/json'
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
uri: exports.RESOURCE_URIS.PATTERNS,
|
|
61
|
+
name: 'Code Patterns',
|
|
62
|
+
description: 'Common patterns detected in the repository (singletons, factories, handlers, etc.)',
|
|
63
|
+
mimeType: 'application/json'
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
uri: exports.RESOURCE_URIS.GLOSSARY,
|
|
67
|
+
name: 'Project Glossary',
|
|
68
|
+
description: 'Key terms, symbol names, file names, and module names in this repository',
|
|
69
|
+
mimeType: 'application/json'
|
|
70
|
+
}
|
|
71
|
+
];
|
|
72
|
+
// ============================================================================
|
|
73
|
+
// Resource Builders
|
|
74
|
+
// ============================================================================
|
|
75
|
+
function requireIndex() {
|
|
76
|
+
return (0, indexer_js_1.getIndexer)().getIndex();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* repo://architecture-map
|
|
80
|
+
* High-level module structure: dependencies between top-level modules
|
|
81
|
+
*/
|
|
82
|
+
function buildArchitectureMap() {
|
|
83
|
+
const index = requireIndex();
|
|
84
|
+
if (!index)
|
|
85
|
+
return { error: 'No repository indexed. Use repo_scope_find with repoPath first.' };
|
|
86
|
+
// Group files by top-level module
|
|
87
|
+
const modules = {};
|
|
88
|
+
for (const [filePath, file] of index.files) {
|
|
89
|
+
const module = filePath.split('/')[0] ?? 'root';
|
|
90
|
+
if (!modules[module]) {
|
|
91
|
+
modules[module] = { files: 0, sourceFiles: 0, testFiles: 0, exports: [], imports: [] };
|
|
92
|
+
}
|
|
93
|
+
modules[module].files++;
|
|
94
|
+
if (file.type === 'source')
|
|
95
|
+
modules[module].sourceFiles++;
|
|
96
|
+
if (file.type === 'test')
|
|
97
|
+
modules[module].testFiles++;
|
|
98
|
+
modules[module].exports.push(...file.exports.slice(0, 5));
|
|
99
|
+
modules[module].imports.push(...file.imports.map(i => i.split('/')[0] ?? i).filter(i => !i.startsWith('.')));
|
|
100
|
+
}
|
|
101
|
+
// Deduplicate
|
|
102
|
+
for (const mod of Object.values(modules)) {
|
|
103
|
+
mod.exports = [...new Set(mod.exports)].slice(0, 10);
|
|
104
|
+
mod.imports = [...new Set(mod.imports)].slice(0, 10);
|
|
105
|
+
}
|
|
106
|
+
// Build inter-module dependency edges
|
|
107
|
+
const edges = [];
|
|
108
|
+
for (const edge of index.imports) {
|
|
109
|
+
const fromModule = edge.from.split('/')[0] ?? 'root';
|
|
110
|
+
const toModule = edge.to.split('/')[0] ?? 'root';
|
|
111
|
+
if (fromModule !== toModule && !edges.some(e => e.from === fromModule && e.to === toModule)) {
|
|
112
|
+
edges.push({ from: fromModule, to: toModule });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
rootPath: index.rootPath,
|
|
117
|
+
lastIndexed: new Date(index.lastIndexed).toISOString(),
|
|
118
|
+
totalFiles: index.files.size,
|
|
119
|
+
modules,
|
|
120
|
+
dependencyEdges: edges
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* repo://module-index
|
|
125
|
+
* Flat index of modules with file/symbol counts
|
|
126
|
+
*/
|
|
127
|
+
function buildModuleIndex() {
|
|
128
|
+
const index = requireIndex();
|
|
129
|
+
if (!index)
|
|
130
|
+
return { error: 'No repository indexed.' };
|
|
131
|
+
const modules = {};
|
|
132
|
+
for (const [filePath, file] of index.files) {
|
|
133
|
+
const parts = filePath.split('/');
|
|
134
|
+
const module = parts.length > 1 ? parts[0] : 'root';
|
|
135
|
+
if (!modules[module]) {
|
|
136
|
+
modules[module] = { path: module, fileCount: 0, sourceFileCount: 0, topExports: [], language: file.language };
|
|
137
|
+
}
|
|
138
|
+
modules[module].fileCount++;
|
|
139
|
+
if (file.type === 'source') {
|
|
140
|
+
modules[module].sourceFileCount++;
|
|
141
|
+
modules[module].topExports.push(...file.exports.slice(0, 3));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
for (const mod of Object.values(modules)) {
|
|
145
|
+
mod.topExports = [...new Set(mod.topExports)].slice(0, 10);
|
|
146
|
+
}
|
|
147
|
+
return { modules };
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* repo://symbol-index
|
|
151
|
+
* Compact index of all exported symbols
|
|
152
|
+
*/
|
|
153
|
+
function buildSymbolIndex() {
|
|
154
|
+
const index = requireIndex();
|
|
155
|
+
if (!index)
|
|
156
|
+
return { error: 'No repository indexed.' };
|
|
157
|
+
const exported = [];
|
|
158
|
+
for (const [, symbols] of index.symbols) {
|
|
159
|
+
for (const sym of symbols) {
|
|
160
|
+
if (sym.exported) {
|
|
161
|
+
exported.push({ name: sym.name, type: sym.type, file: sym.file, line: sym.line });
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
totalSymbols: exported.length,
|
|
167
|
+
symbols: exported.slice(0, 200) // cap at 200 for compactness
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* repo://test-map
|
|
172
|
+
* Map of test files and their targets
|
|
173
|
+
*/
|
|
174
|
+
function buildTestMap() {
|
|
175
|
+
const index = requireIndex();
|
|
176
|
+
if (!index)
|
|
177
|
+
return { error: 'No repository indexed.' };
|
|
178
|
+
return {
|
|
179
|
+
totalTests: index.tests.length,
|
|
180
|
+
tests: index.tests.map(t => ({
|
|
181
|
+
path: t.path,
|
|
182
|
+
type: t.type,
|
|
183
|
+
targetFile: t.targetFile ?? null
|
|
184
|
+
}))
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* repo://doc-map
|
|
189
|
+
* Map of documentation files
|
|
190
|
+
*/
|
|
191
|
+
function buildDocMap() {
|
|
192
|
+
const index = requireIndex();
|
|
193
|
+
if (!index)
|
|
194
|
+
return { error: 'No repository indexed.' };
|
|
195
|
+
return {
|
|
196
|
+
totalDocs: index.docs.length,
|
|
197
|
+
docs: index.docs.map(d => ({
|
|
198
|
+
path: d.path,
|
|
199
|
+
type: d.type,
|
|
200
|
+
sections: d.sections.slice(0, 5)
|
|
201
|
+
}))
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* repo://patterns
|
|
206
|
+
* Detect common code patterns in the repo
|
|
207
|
+
*/
|
|
208
|
+
function buildPatterns() {
|
|
209
|
+
const index = requireIndex();
|
|
210
|
+
if (!index)
|
|
211
|
+
return { error: 'No repository indexed.' };
|
|
212
|
+
const singletons = [];
|
|
213
|
+
const factories = [];
|
|
214
|
+
const handlers = [];
|
|
215
|
+
const schemas = [];
|
|
216
|
+
for (const [filePath, symbols] of index.symbols) {
|
|
217
|
+
for (const sym of symbols) {
|
|
218
|
+
const nameLower = sym.name.toLowerCase();
|
|
219
|
+
if (nameLower.startsWith('get') && sym.type === 'function') {
|
|
220
|
+
singletons.push(`${sym.name} (${filePath})`);
|
|
221
|
+
}
|
|
222
|
+
if (nameLower.includes('factory') || nameLower.includes('create')) {
|
|
223
|
+
factories.push(`${sym.name} (${filePath})`);
|
|
224
|
+
}
|
|
225
|
+
if (nameLower.includes('handler') || nameLower.includes('middleware')) {
|
|
226
|
+
handlers.push(`${sym.name} (${filePath})`);
|
|
227
|
+
}
|
|
228
|
+
if (nameLower.includes('schema') || nameLower.includes('validator')) {
|
|
229
|
+
schemas.push(`${sym.name} (${filePath})`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
singletonGetters: singletons.slice(0, 20),
|
|
235
|
+
factories: factories.slice(0, 20),
|
|
236
|
+
handlers: handlers.slice(0, 20),
|
|
237
|
+
schemas: schemas.slice(0, 20)
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* repo://glossary
|
|
242
|
+
* Key names (symbols, files, modules) for quick reference
|
|
243
|
+
*/
|
|
244
|
+
function buildGlossary() {
|
|
245
|
+
const index = requireIndex();
|
|
246
|
+
if (!index)
|
|
247
|
+
return { error: 'No repository indexed.' };
|
|
248
|
+
const modules = new Set();
|
|
249
|
+
const fileNames = new Set();
|
|
250
|
+
const exportedSymbols = new Set();
|
|
251
|
+
for (const [filePath, file] of index.files) {
|
|
252
|
+
const mod = filePath.split('/')[0];
|
|
253
|
+
if (mod)
|
|
254
|
+
modules.add(mod);
|
|
255
|
+
fileNames.add(file.name);
|
|
256
|
+
file.exports.forEach(e => exportedSymbols.add(e));
|
|
257
|
+
}
|
|
258
|
+
return {
|
|
259
|
+
modules: [...modules].sort(),
|
|
260
|
+
fileNames: [...fileNames].sort().slice(0, 100),
|
|
261
|
+
exportedSymbols: [...exportedSymbols].sort().slice(0, 200)
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
// ============================================================================
|
|
265
|
+
// Resource Router
|
|
266
|
+
// ============================================================================
|
|
267
|
+
function readResource(uri) {
|
|
268
|
+
const builders = {
|
|
269
|
+
[exports.RESOURCE_URIS.ARCHITECTURE_MAP]: buildArchitectureMap,
|
|
270
|
+
[exports.RESOURCE_URIS.MODULE_INDEX]: buildModuleIndex,
|
|
271
|
+
[exports.RESOURCE_URIS.SYMBOL_INDEX]: buildSymbolIndex,
|
|
272
|
+
[exports.RESOURCE_URIS.TEST_MAP]: buildTestMap,
|
|
273
|
+
[exports.RESOURCE_URIS.DOC_MAP]: buildDocMap,
|
|
274
|
+
[exports.RESOURCE_URIS.PATTERNS]: buildPatterns,
|
|
275
|
+
[exports.RESOURCE_URIS.GLOSSARY]: buildGlossary
|
|
276
|
+
};
|
|
277
|
+
const builder = builders[uri];
|
|
278
|
+
if (!builder)
|
|
279
|
+
return null;
|
|
280
|
+
return {
|
|
281
|
+
content: JSON.stringify(builder(), null, 2),
|
|
282
|
+
mimeType: 'application/json'
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/resources/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Verbosity } from '../core/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Filter object fields based on verbosity level.
|
|
4
|
+
* minimal: only include key fields
|
|
5
|
+
* standard: include most fields
|
|
6
|
+
* detailed: include everything
|
|
7
|
+
*/
|
|
8
|
+
export declare function filterByVerbosity<T extends object>(obj: T, verbosity: Verbosity, minimalFields: (keyof T)[], standardFields: (keyof T)[]): Partial<T>;
|
|
9
|
+
/**
|
|
10
|
+
* Format a list of items, truncating if too many for the verbosity level
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatList(items: string[], verbosity: Verbosity, label?: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Format a compact summary string from key-value pairs
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatCompact(pairs: Record<string, string | number | boolean | undefined>): string;
|
|
17
|
+
/**
|
|
18
|
+
* Wrap a tool result with verbosity metadata for downstream use
|
|
19
|
+
*/
|
|
20
|
+
export interface VerboseResult<T> {
|
|
21
|
+
data: T;
|
|
22
|
+
verbosity: Verbosity;
|
|
23
|
+
tokenEstimate?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function wrapResult<T>(data: T, verbosity: Verbosity): VerboseResult<T>;
|
|
26
|
+
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAChD,GAAG,EAAE,CAAC,EACN,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAC1B,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAC1B,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,SAAS,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,MAAM,CAKlG;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAE7E"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filterByVerbosity = filterByVerbosity;
|
|
4
|
+
exports.formatList = formatList;
|
|
5
|
+
exports.formatCompact = formatCompact;
|
|
6
|
+
exports.wrapResult = wrapResult;
|
|
7
|
+
/**
|
|
8
|
+
* Filter object fields based on verbosity level.
|
|
9
|
+
* minimal: only include key fields
|
|
10
|
+
* standard: include most fields
|
|
11
|
+
* detailed: include everything
|
|
12
|
+
*/
|
|
13
|
+
function filterByVerbosity(obj, verbosity, minimalFields, standardFields) {
|
|
14
|
+
if (verbosity === 'detailed') {
|
|
15
|
+
return obj;
|
|
16
|
+
}
|
|
17
|
+
const fields = verbosity === 'minimal' ? minimalFields : standardFields;
|
|
18
|
+
const result = {};
|
|
19
|
+
for (const field of fields) {
|
|
20
|
+
if (field in obj) {
|
|
21
|
+
result[field] = obj[field];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Format a list of items, truncating if too many for the verbosity level
|
|
28
|
+
*/
|
|
29
|
+
function formatList(items, verbosity, label) {
|
|
30
|
+
const limits = {
|
|
31
|
+
minimal: 3,
|
|
32
|
+
standard: 10,
|
|
33
|
+
detailed: items.length
|
|
34
|
+
};
|
|
35
|
+
const limit = limits[verbosity];
|
|
36
|
+
const shown = items.slice(0, limit);
|
|
37
|
+
const remaining = items.length - shown.length;
|
|
38
|
+
let result = shown.join(', ');
|
|
39
|
+
if (remaining > 0) {
|
|
40
|
+
result += ` (+${remaining} more)`;
|
|
41
|
+
}
|
|
42
|
+
return label ? `${label}: ${result}` : result;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Format a compact summary string from key-value pairs
|
|
46
|
+
*/
|
|
47
|
+
function formatCompact(pairs) {
|
|
48
|
+
return Object.entries(pairs)
|
|
49
|
+
.filter(([, v]) => v !== undefined && v !== null && v !== '')
|
|
50
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
51
|
+
.join(' | ');
|
|
52
|
+
}
|
|
53
|
+
function wrapResult(data, verbosity) {
|
|
54
|
+
return { data, verbosity };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":";;AASA,8CAkBC;AAKD,gCAmBC;AAKD,sCAKC;AAWD,gCAEC;AAvED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC/B,GAAM,EACN,SAAoB,EACpB,aAA0B,EAC1B,cAA2B;IAE3B,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC;IACxE,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CACxB,KAAe,EACf,SAAoB,EACpB,KAAc;IAEd,MAAM,MAAM,GAA8B;QACxC,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,KAAK,CAAC,MAAM;KACvB,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE9C,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,MAAM,SAAS,QAAQ,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,KAA4D;IACxF,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;SAC5D,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B,IAAI,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAWD,SAAgB,UAAU,CAAI,IAAO,EAAE,SAAoB;IACzD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { logger } from './logger.js';
|
|
2
|
+
export type { LogLevel, LogEntry } from './logger.js';
|
|
3
|
+
export { estimateTokens, estimateObjectTokens, truncateToTokenBudget, checkTokenBudget } from './token-counter.js';
|
|
4
|
+
export type { TokenBudgetSummary } from './token-counter.js';
|
|
5
|
+
export { filterByVerbosity, formatList, formatCompact, wrapResult } from './formatter.js';
|
|
6
|
+
export type { VerboseResult } from './formatter.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,UAAU,EACX,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapResult = exports.formatCompact = exports.formatList = exports.filterByVerbosity = exports.checkTokenBudget = exports.truncateToTokenBudget = exports.estimateObjectTokens = exports.estimateTokens = exports.logger = void 0;
|
|
4
|
+
// Utils module exports
|
|
5
|
+
var logger_js_1 = require("./logger.js");
|
|
6
|
+
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_js_1.logger; } });
|
|
7
|
+
var token_counter_js_1 = require("./token-counter.js");
|
|
8
|
+
Object.defineProperty(exports, "estimateTokens", { enumerable: true, get: function () { return token_counter_js_1.estimateTokens; } });
|
|
9
|
+
Object.defineProperty(exports, "estimateObjectTokens", { enumerable: true, get: function () { return token_counter_js_1.estimateObjectTokens; } });
|
|
10
|
+
Object.defineProperty(exports, "truncateToTokenBudget", { enumerable: true, get: function () { return token_counter_js_1.truncateToTokenBudget; } });
|
|
11
|
+
Object.defineProperty(exports, "checkTokenBudget", { enumerable: true, get: function () { return token_counter_js_1.checkTokenBudget; } });
|
|
12
|
+
var formatter_js_1 = require("./formatter.js");
|
|
13
|
+
Object.defineProperty(exports, "filterByVerbosity", { enumerable: true, get: function () { return formatter_js_1.filterByVerbosity; } });
|
|
14
|
+
Object.defineProperty(exports, "formatList", { enumerable: true, get: function () { return formatter_js_1.formatList; } });
|
|
15
|
+
Object.defineProperty(exports, "formatCompact", { enumerable: true, get: function () { return formatter_js_1.formatCompact; } });
|
|
16
|
+
Object.defineProperty(exports, "wrapResult", { enumerable: true, get: function () { return formatter_js_1.wrapResult; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,uBAAuB;AACvB,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAGf,uDAK4B;AAJ1B,kHAAA,cAAc,OAAA;AACd,wHAAA,oBAAoB,OAAA;AACpB,yHAAA,qBAAqB,OAAA;AACrB,oHAAA,gBAAgB,OAAA;AAIlB,+CAKwB;AAJtB,iHAAA,iBAAiB,OAAA;AACjB,0GAAA,UAAU,OAAA;AACV,6GAAA,aAAa,OAAA;AACb,0GAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
2
|
+
export interface LogEntry {
|
|
3
|
+
level: LogLevel;
|
|
4
|
+
message: string;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
args?: unknown[];
|
|
7
|
+
}
|
|
8
|
+
declare class Logger {
|
|
9
|
+
private level;
|
|
10
|
+
constructor(level?: LogLevel);
|
|
11
|
+
private shouldLog;
|
|
12
|
+
private format;
|
|
13
|
+
debug(message: string, ...args: unknown[]): void;
|
|
14
|
+
info(message: string, ...args: unknown[]): void;
|
|
15
|
+
warn(message: string, ...args: unknown[]): void;
|
|
16
|
+
error(message: string, ...args: unknown[]): void;
|
|
17
|
+
setLevel(level: LogLevel): void;
|
|
18
|
+
}
|
|
19
|
+
export declare const logger: Logger;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,cAAM,MAAM;IACV,OAAO,CAAC,KAAK,CAAW;gBAEZ,KAAK,GAAE,QAAiB;IAIpC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,MAAM;IAMd,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAMhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAMhD,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;CAGhC;AAGD,eAAO,MAAM,MAAM,QAElB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logger = void 0;
|
|
4
|
+
class Logger {
|
|
5
|
+
level;
|
|
6
|
+
constructor(level = 'info') {
|
|
7
|
+
this.level = level;
|
|
8
|
+
}
|
|
9
|
+
shouldLog(level) {
|
|
10
|
+
const levels = ['debug', 'info', 'warn', 'error'];
|
|
11
|
+
return levels.indexOf(level) >= levels.indexOf(this.level);
|
|
12
|
+
}
|
|
13
|
+
format(level, message, args) {
|
|
14
|
+
const timestamp = new Date().toISOString();
|
|
15
|
+
const argsStr = args.length > 0 ? ' ' + args.map(a => typeof a === 'object' ? JSON.stringify(a) : String(a)).join(' ') : '';
|
|
16
|
+
return `[${timestamp}] [${level.toUpperCase()}] ${message}${argsStr}`;
|
|
17
|
+
}
|
|
18
|
+
debug(message, ...args) {
|
|
19
|
+
if (this.shouldLog('debug')) {
|
|
20
|
+
process.stderr.write(this.format('debug', message, args) + '\n');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
info(message, ...args) {
|
|
24
|
+
if (this.shouldLog('info')) {
|
|
25
|
+
process.stderr.write(this.format('info', message, args) + '\n');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
warn(message, ...args) {
|
|
29
|
+
if (this.shouldLog('warn')) {
|
|
30
|
+
process.stderr.write(this.format('warn', message, args) + '\n');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
error(message, ...args) {
|
|
34
|
+
if (this.shouldLog('error')) {
|
|
35
|
+
process.stderr.write(this.format('error', message, args) + '\n');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
setLevel(level) {
|
|
39
|
+
this.level = level;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Singleton logger
|
|
43
|
+
exports.logger = new Logger(process.env.LOG_LEVEL ?? 'info');
|
|
44
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;AAUA,MAAM,MAAM;IACF,KAAK,CAAW;IAExB,YAAY,QAAkB,MAAM;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,MAAM,MAAM,GAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAEO,MAAM,CAAC,KAAe,EAAE,OAAe,EAAE,IAAe;QAC9D,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5H,OAAO,IAAI,SAAS,MAAM,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,GAAG,OAAO,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,mBAAmB;AACN,QAAA,MAAM,GAAG,IAAI,MAAM,CAC7B,OAAO,CAAC,GAAG,CAAC,SAAkC,IAAI,MAAM,CAC1D,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rough token estimation: ~4 chars per token for English text
|
|
3
|
+
* This is a fast approximation — good enough for budgeting purposes.
|
|
4
|
+
*/
|
|
5
|
+
export declare function estimateTokens(text: string): number;
|
|
6
|
+
/**
|
|
7
|
+
* Estimate tokens for a JSON-serializable object
|
|
8
|
+
*/
|
|
9
|
+
export declare function estimateObjectTokens(obj: unknown): number;
|
|
10
|
+
/**
|
|
11
|
+
* Truncate text to fit within a token budget
|
|
12
|
+
*/
|
|
13
|
+
export declare function truncateToTokenBudget(text: string, maxTokens: number): string;
|
|
14
|
+
/**
|
|
15
|
+
* Token budget summary for a response object
|
|
16
|
+
*/
|
|
17
|
+
export interface TokenBudgetSummary {
|
|
18
|
+
estimated: number;
|
|
19
|
+
withinBudget: boolean;
|
|
20
|
+
budget: number;
|
|
21
|
+
efficiency: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function checkTokenBudget(obj: unknown, budget?: number): TokenBudgetSummary;
|
|
24
|
+
//# sourceMappingURL=token-counter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-counter.d.ts","sourceRoot":"","sources":["../../src/utils/token-counter.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASnD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAO7E;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAa,GAAG,kBAAkB,CAQxF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Token counter utility - estimates token usage to help minimize context usage
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.estimateTokens = estimateTokens;
|
|
5
|
+
exports.estimateObjectTokens = estimateObjectTokens;
|
|
6
|
+
exports.truncateToTokenBudget = truncateToTokenBudget;
|
|
7
|
+
exports.checkTokenBudget = checkTokenBudget;
|
|
8
|
+
/**
|
|
9
|
+
* Rough token estimation: ~4 chars per token for English text
|
|
10
|
+
* This is a fast approximation — good enough for budgeting purposes.
|
|
11
|
+
*/
|
|
12
|
+
function estimateTokens(text) {
|
|
13
|
+
if (!text)
|
|
14
|
+
return 0;
|
|
15
|
+
// Words count more accurately: avg 1.3 tokens per word
|
|
16
|
+
const words = text.trim().split(/\s+/).filter(w => w.length > 0);
|
|
17
|
+
const chars = text.length;
|
|
18
|
+
// Use the average of char-based and word-based estimates
|
|
19
|
+
const charEstimate = Math.ceil(chars / 4);
|
|
20
|
+
const wordEstimate = Math.ceil(words.length * 1.3);
|
|
21
|
+
return Math.ceil((charEstimate + wordEstimate) / 2);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Estimate tokens for a JSON-serializable object
|
|
25
|
+
*/
|
|
26
|
+
function estimateObjectTokens(obj) {
|
|
27
|
+
return estimateTokens(JSON.stringify(obj));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Truncate text to fit within a token budget
|
|
31
|
+
*/
|
|
32
|
+
function truncateToTokenBudget(text, maxTokens) {
|
|
33
|
+
const current = estimateTokens(text);
|
|
34
|
+
if (current <= maxTokens)
|
|
35
|
+
return text;
|
|
36
|
+
// Estimate how many chars we can keep
|
|
37
|
+
const charBudget = Math.floor(maxTokens * 4);
|
|
38
|
+
return text.slice(0, charBudget) + '... [truncated]';
|
|
39
|
+
}
|
|
40
|
+
function checkTokenBudget(obj, budget = 2000) {
|
|
41
|
+
const estimated = estimateObjectTokens(obj);
|
|
42
|
+
return {
|
|
43
|
+
estimated,
|
|
44
|
+
withinBudget: estimated <= budget,
|
|
45
|
+
budget,
|
|
46
|
+
efficiency: Math.min(budget / Math.max(estimated, 1), 1)
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=token-counter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../../src/utils/token-counter.ts"],"names":[],"mappings":";AAAA,+EAA+E;;AAM/E,wCASC;AAKD,oDAEC;AAKD,sDAOC;AAYD,4CAQC;AApDD;;;GAGG;AACH,SAAgB,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,uDAAuD;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1B,yDAAyD;IACzD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,GAAY;IAC/C,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,IAAY,EAAE,SAAiB;IACnE,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,OAAO,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAEtC,sCAAsC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,iBAAiB,CAAC;AACvD,CAAC;AAYD,SAAgB,gBAAgB,CAAC,GAAY,EAAE,SAAiB,IAAI;IAClE,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO;QACL,SAAS;QACT,YAAY,EAAE,SAAS,IAAI,MAAM;QACjC,MAAM;QACN,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KACzD,CAAC;AACJ,CAAC"}
|