toonify-mcp 0.3.1 → 0.4.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/README.md +30 -0
- package/dist/optimizer/caching/cache-types.d.ts +34 -0
- package/dist/optimizer/caching/cache-types.d.ts.map +1 -1
- package/dist/optimizer/caching/index.d.ts +2 -0
- package/dist/optimizer/caching/index.d.ts.map +1 -1
- package/dist/optimizer/caching/index.js +2 -0
- package/dist/optimizer/caching/index.js.map +1 -1
- package/dist/optimizer/caching/lru-cache.d.ts +70 -0
- package/dist/optimizer/caching/lru-cache.d.ts.map +1 -0
- package/dist/optimizer/caching/lru-cache.js +230 -0
- package/dist/optimizer/caching/lru-cache.js.map +1 -0
- package/dist/optimizer/caching/persistent-cache.d.ts +82 -0
- package/dist/optimizer/caching/persistent-cache.d.ts.map +1 -0
- package/dist/optimizer/caching/persistent-cache.js +237 -0
- package/dist/optimizer/caching/persistent-cache.js.map +1 -0
- package/dist/optimizer/token-optimizer.d.ts +31 -1
- package/dist/optimizer/token-optimizer.d.ts.map +1 -1
- package/dist/optimizer/token-optimizer.js +100 -5
- package/dist/optimizer/token-optimizer.js.map +1 -1
- package/dist/optimizer/types.d.ts +3 -2
- package/dist/optimizer/types.d.ts.map +1 -1
- package/dist/server/mcp-server.d.ts +8 -0
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +112 -40
- package/dist/server/mcp-server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent Cache: Disk-based cache storage
|
|
3
|
+
* Features:
|
|
4
|
+
* - Save/load cache entries to/from disk
|
|
5
|
+
* - Atomic writes to prevent corruption
|
|
6
|
+
* - Auto-create cache directory
|
|
7
|
+
* - Operation serialization to prevent race conditions
|
|
8
|
+
* - Batched writes to reduce disk I/O
|
|
9
|
+
*/
|
|
10
|
+
import fs from 'fs';
|
|
11
|
+
import path from 'path';
|
|
12
|
+
import os from 'os';
|
|
13
|
+
export class PersistentCache {
|
|
14
|
+
filePath;
|
|
15
|
+
writeQueue = [];
|
|
16
|
+
isProcessing = false;
|
|
17
|
+
pendingWrites = new Map();
|
|
18
|
+
batchTimer = null;
|
|
19
|
+
BATCH_DELAY_MS = 100; // Debounce writes by 100ms
|
|
20
|
+
constructor(filePath) {
|
|
21
|
+
// Expand ~ to home directory
|
|
22
|
+
this.filePath = filePath.startsWith('~')
|
|
23
|
+
? path.join(os.homedir(), filePath.slice(1))
|
|
24
|
+
: filePath;
|
|
25
|
+
// Ensure directory exists
|
|
26
|
+
this.ensureDirectory();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Ensure cache directory exists
|
|
30
|
+
*/
|
|
31
|
+
ensureDirectory() {
|
|
32
|
+
const dir = path.dirname(this.filePath);
|
|
33
|
+
if (!fs.existsSync(dir)) {
|
|
34
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Load all cache entries from disk
|
|
39
|
+
*/
|
|
40
|
+
loadAll() {
|
|
41
|
+
try {
|
|
42
|
+
if (!fs.existsSync(this.filePath)) {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const content = fs.readFileSync(this.filePath, 'utf-8');
|
|
46
|
+
const data = JSON.parse(content);
|
|
47
|
+
if (!Array.isArray(data)) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
return data;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error('[PersistentCache] Failed to load cache:', error);
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Save all cache entries to disk synchronously (atomic write)
|
|
59
|
+
* Internal use only
|
|
60
|
+
*/
|
|
61
|
+
saveAllSync(entries) {
|
|
62
|
+
try {
|
|
63
|
+
const tempPath = `${this.filePath}.tmp`;
|
|
64
|
+
const content = JSON.stringify(entries, null, 2);
|
|
65
|
+
// Write to temp file first
|
|
66
|
+
fs.writeFileSync(tempPath, content, 'utf-8');
|
|
67
|
+
// Atomic rename
|
|
68
|
+
fs.renameSync(tempPath, this.filePath);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error('[PersistentCache] Failed to save cache:', error);
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Save all cache entries to disk (queued)
|
|
77
|
+
*/
|
|
78
|
+
async saveAll(entries) {
|
|
79
|
+
return this.queueWrite({ type: 'saveAll', entries });
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Flush all pending writes immediately
|
|
83
|
+
* Call this before process exit to ensure all writes are persisted
|
|
84
|
+
*/
|
|
85
|
+
async flush() {
|
|
86
|
+
// Cancel batch timer and flush immediately
|
|
87
|
+
if (this.batchTimer) {
|
|
88
|
+
clearTimeout(this.batchTimer);
|
|
89
|
+
this.batchTimer = null;
|
|
90
|
+
}
|
|
91
|
+
this.flushPendingWrites();
|
|
92
|
+
// Wait for queue to empty
|
|
93
|
+
while (this.writeQueue.length > 0 || this.isProcessing) {
|
|
94
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Queue a write operation
|
|
99
|
+
*/
|
|
100
|
+
queueWrite(operation) {
|
|
101
|
+
return new Promise((resolve, reject) => {
|
|
102
|
+
this.writeQueue.push({ ...operation, resolve, reject });
|
|
103
|
+
this.processQueue();
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Process the write queue serially
|
|
108
|
+
*/
|
|
109
|
+
async processQueue() {
|
|
110
|
+
if (this.isProcessing || this.writeQueue.length === 0) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
this.isProcessing = true;
|
|
114
|
+
while (this.writeQueue.length > 0) {
|
|
115
|
+
const operation = this.writeQueue.shift();
|
|
116
|
+
try {
|
|
117
|
+
await this.executeOperation(operation);
|
|
118
|
+
operation.resolve();
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
operation.reject(error);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
this.isProcessing = false;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Execute a single write operation
|
|
128
|
+
*/
|
|
129
|
+
async executeOperation(operation) {
|
|
130
|
+
switch (operation.type) {
|
|
131
|
+
case 'save':
|
|
132
|
+
if (operation.key && operation.entry) {
|
|
133
|
+
this.pendingWrites.set(operation.key, operation.entry);
|
|
134
|
+
this.scheduleBatchWrite();
|
|
135
|
+
}
|
|
136
|
+
break;
|
|
137
|
+
case 'delete':
|
|
138
|
+
if (operation.key) {
|
|
139
|
+
this.pendingWrites.delete(operation.key);
|
|
140
|
+
const entries = this.loadAll();
|
|
141
|
+
const filtered = entries.filter(e => e.key !== operation.key);
|
|
142
|
+
if (filtered.length !== entries.length) {
|
|
143
|
+
this.saveAllSync(filtered);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
break;
|
|
147
|
+
case 'clear':
|
|
148
|
+
this.pendingWrites.clear();
|
|
149
|
+
if (this.batchTimer) {
|
|
150
|
+
clearTimeout(this.batchTimer);
|
|
151
|
+
this.batchTimer = null;
|
|
152
|
+
}
|
|
153
|
+
if (fs.existsSync(this.filePath)) {
|
|
154
|
+
fs.unlinkSync(this.filePath);
|
|
155
|
+
}
|
|
156
|
+
break;
|
|
157
|
+
case 'saveAll':
|
|
158
|
+
if (operation.entries) {
|
|
159
|
+
this.pendingWrites.clear();
|
|
160
|
+
if (this.batchTimer) {
|
|
161
|
+
clearTimeout(this.batchTimer);
|
|
162
|
+
this.batchTimer = null;
|
|
163
|
+
}
|
|
164
|
+
this.saveAllSync(operation.entries);
|
|
165
|
+
}
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Schedule a batched write operation
|
|
171
|
+
*/
|
|
172
|
+
scheduleBatchWrite() {
|
|
173
|
+
if (this.batchTimer) {
|
|
174
|
+
clearTimeout(this.batchTimer);
|
|
175
|
+
}
|
|
176
|
+
this.batchTimer = setTimeout(() => {
|
|
177
|
+
this.flushPendingWrites();
|
|
178
|
+
}, this.BATCH_DELAY_MS);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Flush all pending writes to disk
|
|
182
|
+
*/
|
|
183
|
+
flushPendingWrites() {
|
|
184
|
+
if (this.pendingWrites.size === 0) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const entries = this.loadAll();
|
|
188
|
+
const entryMap = new Map(entries.map(e => [e.key, e]));
|
|
189
|
+
// Merge pending writes
|
|
190
|
+
for (const [key, entry] of this.pendingWrites.entries()) {
|
|
191
|
+
entryMap.set(key, entry);
|
|
192
|
+
}
|
|
193
|
+
this.saveAllSync(Array.from(entryMap.values()));
|
|
194
|
+
this.pendingWrites.clear();
|
|
195
|
+
this.batchTimer = null;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Save a single entry (batched and queued)
|
|
199
|
+
*/
|
|
200
|
+
async save(key, entry) {
|
|
201
|
+
return this.queueWrite({ type: 'save', key, entry });
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Delete a single entry (queued)
|
|
205
|
+
*/
|
|
206
|
+
async delete(key) {
|
|
207
|
+
return this.queueWrite({ type: 'delete', key });
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Clear all cache entries (queued)
|
|
211
|
+
*/
|
|
212
|
+
async clear() {
|
|
213
|
+
return this.queueWrite({ type: 'clear' });
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get cache file size in bytes
|
|
217
|
+
*/
|
|
218
|
+
getFileSize() {
|
|
219
|
+
try {
|
|
220
|
+
if (fs.existsSync(this.filePath)) {
|
|
221
|
+
const stats = fs.statSync(this.filePath);
|
|
222
|
+
return stats.size;
|
|
223
|
+
}
|
|
224
|
+
return 0;
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
return 0;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Check if cache file exists
|
|
232
|
+
*/
|
|
233
|
+
exists() {
|
|
234
|
+
return fs.existsSync(this.filePath);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=persistent-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-cache.js","sourceRoot":"","sources":["../../../src/optimizer/caching/persistent-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
* TokenOptimizer: Core optimization logic using Toonify
|
|
3
3
|
*/
|
|
4
4
|
import type { OptimizationResult, ToolMetadata, OptimizationConfig } from './types.js';
|
|
5
|
-
import { CacheOptimizer } from './caching/index.js';
|
|
5
|
+
import { CacheOptimizer, LRUCache } from './caching/index.js';
|
|
6
6
|
export declare class TokenOptimizer {
|
|
7
7
|
private config;
|
|
8
8
|
private tokenEncoder;
|
|
9
9
|
private cacheOptimizer;
|
|
10
|
+
private resultCache;
|
|
10
11
|
constructor(config?: Partial<OptimizationConfig>);
|
|
11
12
|
/**
|
|
12
13
|
* Main optimization method
|
|
@@ -36,9 +37,38 @@ export declare class TokenOptimizer {
|
|
|
36
37
|
* Check if tool should be skipped
|
|
37
38
|
*/
|
|
38
39
|
private shouldSkipTool;
|
|
40
|
+
/**
|
|
41
|
+
* Generate cache key from content and metadata
|
|
42
|
+
* Includes toolName to prevent false cache hits across different tools
|
|
43
|
+
*/
|
|
44
|
+
private generateCacheKey;
|
|
45
|
+
/**
|
|
46
|
+
* Validate resultCache configuration
|
|
47
|
+
* Throws error if configuration is invalid
|
|
48
|
+
*/
|
|
49
|
+
private validateResultCacheConfig;
|
|
39
50
|
/**
|
|
40
51
|
* Get cache optimizer instance for external access
|
|
41
52
|
*/
|
|
42
53
|
getCacheOptimizer(): CacheOptimizer;
|
|
54
|
+
/**
|
|
55
|
+
* v0.4.0: Get LRU cache instance for external access
|
|
56
|
+
*/
|
|
57
|
+
getResultCache(): LRUCache<OptimizationResult>;
|
|
58
|
+
/**
|
|
59
|
+
* v0.4.0: Clear optimization result cache
|
|
60
|
+
*/
|
|
61
|
+
clearResultCache(): void;
|
|
62
|
+
/**
|
|
63
|
+
* v0.4.0: Clean up expired cache entries
|
|
64
|
+
*/
|
|
65
|
+
cleanupExpiredCache(): number;
|
|
66
|
+
/**
|
|
67
|
+
* v0.4.0: Get combined cache statistics
|
|
68
|
+
*/
|
|
69
|
+
getCacheStats(): {
|
|
70
|
+
resultCache: import("./types.js").LRUCacheStats;
|
|
71
|
+
promptCache: import("./types.js").CacheMetrics;
|
|
72
|
+
};
|
|
43
73
|
}
|
|
44
74
|
//# sourceMappingURL=token-optimizer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-optimizer.d.ts","sourceRoot":"","sources":["../../src/optimizer/token-optimizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EAEZ,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"token-optimizer.d.ts","sourceRoot":"","sources":["../../src/optimizer/token-optimizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EAEZ,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9D,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAA+B;gBAEtC,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAyCpD;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,kBAAkB,CAAC;IA2H9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAwCjC;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACH,cAAc,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAI9C;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,aAAa;;;;CAMd"}
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { encode as toonEncode } from '@toon-format/toon';
|
|
5
5
|
import yaml from 'yaml';
|
|
6
|
-
import { CacheOptimizer } from './caching/index.js';
|
|
6
|
+
import { CacheOptimizer, LRUCache } from './caching/index.js';
|
|
7
7
|
import { MultilingualTokenizer } from './multilingual/index.js';
|
|
8
8
|
export class TokenOptimizer {
|
|
9
9
|
config;
|
|
10
10
|
tokenEncoder;
|
|
11
11
|
cacheOptimizer;
|
|
12
|
+
resultCache;
|
|
12
13
|
constructor(config = {}) {
|
|
13
14
|
this.config = {
|
|
14
15
|
enabled: true,
|
|
@@ -27,25 +28,43 @@ export class TokenOptimizer {
|
|
|
27
28
|
enabled: true,
|
|
28
29
|
defaultLanguage: 'en'
|
|
29
30
|
},
|
|
31
|
+
resultCache: {
|
|
32
|
+
enabled: true,
|
|
33
|
+
maxSize: 500,
|
|
34
|
+
ttl: 3600000, // 1 hour
|
|
35
|
+
persistent: false,
|
|
36
|
+
persistPath: '~/.toonify-mcp/cache/optimization-cache.json'
|
|
37
|
+
},
|
|
30
38
|
...config
|
|
31
39
|
};
|
|
40
|
+
// Validate resultCache configuration
|
|
41
|
+
this.validateResultCacheConfig(this.config.resultCache);
|
|
32
42
|
// v0.3.0: Use multilingual tokenizer
|
|
33
43
|
this.tokenEncoder = new MultilingualTokenizer('gpt-4', true);
|
|
34
44
|
// Initialize cache optimizer
|
|
35
45
|
this.cacheOptimizer = new CacheOptimizer(this.config.caching);
|
|
46
|
+
// v0.4.0: Initialize LRU cache for optimization results
|
|
47
|
+
this.resultCache = new LRUCache(this.config.resultCache);
|
|
36
48
|
}
|
|
37
49
|
/**
|
|
38
50
|
* Main optimization method
|
|
39
51
|
*/
|
|
40
52
|
async optimize(content, metadata) {
|
|
41
53
|
const startTime = Date.now();
|
|
42
|
-
//
|
|
43
|
-
|
|
54
|
+
// v0.4.0: Check LRU cache first
|
|
55
|
+
// Include metadata in cache key to avoid false cache hits
|
|
56
|
+
const cacheKey = this.generateCacheKey(content, metadata);
|
|
57
|
+
const cachedResult = this.resultCache.get(cacheKey);
|
|
58
|
+
if (cachedResult) {
|
|
59
|
+
return cachedResult;
|
|
60
|
+
}
|
|
61
|
+
// Quick path: skip if disabled
|
|
62
|
+
if (!this.config.enabled) {
|
|
44
63
|
return {
|
|
45
64
|
optimized: false,
|
|
46
65
|
originalContent: content,
|
|
47
66
|
originalTokens: this.countTokens(content),
|
|
48
|
-
reason: '
|
|
67
|
+
reason: 'Optimizer disabled'
|
|
49
68
|
};
|
|
50
69
|
}
|
|
51
70
|
// Skip if tool matches skip patterns
|
|
@@ -101,7 +120,7 @@ export class TokenOptimizer {
|
|
|
101
120
|
// Assume 90% cache hit rate after first request
|
|
102
121
|
const cacheSavings = cachedContent.cacheBreakpoint ?
|
|
103
122
|
Math.floor(tokenSavings * 0.9) : 0;
|
|
104
|
-
|
|
123
|
+
const result = {
|
|
105
124
|
optimized: true,
|
|
106
125
|
originalContent: content,
|
|
107
126
|
optimizedContent: cachedContent.cacheBreakpoint ?
|
|
@@ -118,6 +137,9 @@ export class TokenOptimizer {
|
|
|
118
137
|
cachedContent,
|
|
119
138
|
cacheMetrics: this.cacheOptimizer.getMetrics()
|
|
120
139
|
};
|
|
140
|
+
// v0.4.0: Store result in LRU cache
|
|
141
|
+
this.resultCache.set(cacheKey, result);
|
|
142
|
+
return result;
|
|
121
143
|
}
|
|
122
144
|
catch (error) {
|
|
123
145
|
// Silent fallback on error
|
|
@@ -217,11 +239,84 @@ export class TokenOptimizer {
|
|
|
217
239
|
return regex.test(toolName);
|
|
218
240
|
}) ?? false;
|
|
219
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Generate cache key from content and metadata
|
|
244
|
+
* Includes toolName to prevent false cache hits across different tools
|
|
245
|
+
*/
|
|
246
|
+
generateCacheKey(content, metadata) {
|
|
247
|
+
const metadataKey = metadata?.toolName || 'unknown';
|
|
248
|
+
const combinedContent = `${metadataKey}:${content}`;
|
|
249
|
+
return LRUCache.generateKey(combinedContent);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Validate resultCache configuration
|
|
253
|
+
* Throws error if configuration is invalid
|
|
254
|
+
*/
|
|
255
|
+
validateResultCacheConfig(config) {
|
|
256
|
+
if (!config) {
|
|
257
|
+
throw new Error('resultCache configuration is required');
|
|
258
|
+
}
|
|
259
|
+
if (typeof config.enabled !== 'boolean') {
|
|
260
|
+
throw new Error('resultCache.enabled must be a boolean');
|
|
261
|
+
}
|
|
262
|
+
if (config.maxSize !== undefined) {
|
|
263
|
+
if (typeof config.maxSize !== 'number' || config.maxSize <= 0) {
|
|
264
|
+
throw new Error('resultCache.maxSize must be a positive number');
|
|
265
|
+
}
|
|
266
|
+
if (config.maxSize > 10000) {
|
|
267
|
+
console.warn('[TokenOptimizer] resultCache.maxSize > 10000 may cause high memory usage');
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
if (config.ttl !== undefined) {
|
|
271
|
+
if (typeof config.ttl !== 'number' || config.ttl <= 0) {
|
|
272
|
+
throw new Error('resultCache.ttl must be a positive number (milliseconds)');
|
|
273
|
+
}
|
|
274
|
+
if (config.ttl < 1000) {
|
|
275
|
+
console.warn('[TokenOptimizer] resultCache.ttl < 1s may cause excessive cache churn');
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (config.persistent !== undefined && typeof config.persistent !== 'boolean') {
|
|
279
|
+
throw new Error('resultCache.persistent must be a boolean');
|
|
280
|
+
}
|
|
281
|
+
if (config.persistent && !config.persistPath) {
|
|
282
|
+
throw new Error('resultCache.persistPath is required when persistent=true');
|
|
283
|
+
}
|
|
284
|
+
if (config.persistPath !== undefined && typeof config.persistPath !== 'string') {
|
|
285
|
+
throw new Error('resultCache.persistPath must be a string');
|
|
286
|
+
}
|
|
287
|
+
}
|
|
220
288
|
/**
|
|
221
289
|
* Get cache optimizer instance for external access
|
|
222
290
|
*/
|
|
223
291
|
getCacheOptimizer() {
|
|
224
292
|
return this.cacheOptimizer;
|
|
225
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* v0.4.0: Get LRU cache instance for external access
|
|
296
|
+
*/
|
|
297
|
+
getResultCache() {
|
|
298
|
+
return this.resultCache;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* v0.4.0: Clear optimization result cache
|
|
302
|
+
*/
|
|
303
|
+
clearResultCache() {
|
|
304
|
+
this.resultCache.clear();
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* v0.4.0: Clean up expired cache entries
|
|
308
|
+
*/
|
|
309
|
+
cleanupExpiredCache() {
|
|
310
|
+
return this.resultCache.cleanup();
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* v0.4.0: Get combined cache statistics
|
|
314
|
+
*/
|
|
315
|
+
getCacheStats() {
|
|
316
|
+
return {
|
|
317
|
+
resultCache: this.resultCache.getStats(),
|
|
318
|
+
promptCache: this.cacheOptimizer.getMetrics()
|
|
319
|
+
};
|
|
320
|
+
}
|
|
226
321
|
}
|
|
227
322
|
//# sourceMappingURL=token-optimizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-optimizer.js","sourceRoot":"","sources":["../../src/optimizer/token-optimizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,UAAU,EAAwB,MAAM,mBAAmB,CAAC;AAC/E,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"token-optimizer.js","sourceRoot":"","sources":["../../src/optimizer/token-optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type definitions for token optimization
|
|
3
3
|
*/
|
|
4
|
-
import type { CacheConfig, CachedContent, CacheMetrics } from './caching/cache-types.js';
|
|
4
|
+
import type { CacheConfig, CachedContent, CacheMetrics, LRUCacheConfig } from './caching/cache-types.js';
|
|
5
5
|
export interface OptimizationResult {
|
|
6
6
|
optimized: boolean;
|
|
7
7
|
originalContent: string;
|
|
@@ -40,6 +40,7 @@ export interface OptimizationConfig {
|
|
|
40
40
|
enabled: boolean;
|
|
41
41
|
defaultLanguage: string;
|
|
42
42
|
};
|
|
43
|
+
resultCache?: LRUCacheConfig;
|
|
43
44
|
}
|
|
44
45
|
export interface TokenStats {
|
|
45
46
|
totalRequests: number;
|
|
@@ -53,5 +54,5 @@ export interface TokenStats {
|
|
|
53
54
|
cacheHitRate?: number;
|
|
54
55
|
estimatedCacheSavings?: number;
|
|
55
56
|
}
|
|
56
|
-
export type { CacheConfig, CachedContent, CacheMetrics } from './caching/cache-types.js';
|
|
57
|
+
export type { CacheConfig, CachedContent, CacheMetrics, LRUCacheConfig, LRUCacheStats } from './caching/cache-types.js';
|
|
57
58
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/optimizer/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/optimizer/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEzG,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9B,IAAI,EAAE,GAAG,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,YAAY,CAAC,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IAEF,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wBAAwB,EAAE,MAAM,CAAC;IACjC,uBAAuB,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,EAAE,MAAM,CAAC;IAEjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAGD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -7,6 +7,14 @@ export declare class ToonifyMCPServer {
|
|
|
7
7
|
private metrics;
|
|
8
8
|
constructor();
|
|
9
9
|
private setupHandlers;
|
|
10
|
+
/**
|
|
11
|
+
* Format successful response in standardized format
|
|
12
|
+
*/
|
|
13
|
+
private formatSuccessResponse;
|
|
14
|
+
/**
|
|
15
|
+
* Format error response in standardized format
|
|
16
|
+
*/
|
|
17
|
+
private formatErrorResponse;
|
|
10
18
|
start(): Promise<void>;
|
|
11
19
|
}
|
|
12
20
|
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,OAAO,CAAmB;;IAqBlC,OAAO,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,OAAO,CAAmB;;IAqBlC,OAAO,CAAC,aAAa;IAuIrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsBrB,KAAK;CAMZ"}
|