trimprompt 1.0.31 → 1.0.32
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/api-proxy.js +1 -1
- package/cache-manager.js +1 -1
- package/cache.js +1 -1
- package/ccr.js +1 -1
- package/cli.js +1 -1
- package/dashboard.js +1 -1
- package/executor.js +1 -1
- package/file-watcher.js +1 -1
- package/filters/devops.js +1 -1
- package/filters/generic.js +1 -1
- package/filters/git.js +1 -1
- package/filters/go.js +1 -99
- package/filters/index.js +1 -185
- package/filters/js.js +1 -78
- package/filters/python.js +1 -130
- package/filters/rust.js +1 -115
- package/filters/shell.js +1 -395
- package/hooks/claude-hook.js +1 -79
- package/mcp.js +1 -132
- package/package.json +1 -1
- package/proxy-conv.js +1 -181
- package/proxy-daemon.js +1 -382
- package/proxy-resp.js +1 -1
- package/redactor.js +1 -1
- package/seed.js +1 -1
- package/shims.js +1 -1
- package/simulate.js +1 -1
- package/sync.js +1 -1
- package/tracker.js +1 -1
- package/traffic-interceptor.js +1 -1
package/mcp.js
CHANGED
|
@@ -1,132 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.runMcpProxy = runMcpProxy;
|
|
37
|
-
const child_process_1 = require("child_process");
|
|
38
|
-
const readline = __importStar(require("readline"));
|
|
39
|
-
const filters_1 = require("./filters");
|
|
40
|
-
const tracker_1 = require("./tracker");
|
|
41
|
-
const proxy_conv_1 = require("./proxy-conv");
|
|
42
|
-
const proxy_resp_1 = require("./proxy-resp");
|
|
43
|
-
function runMcpProxy(command, args) {
|
|
44
|
-
const child = (0, child_process_1.spawn)(command, args, {
|
|
45
|
-
stdio: ['pipe', 'pipe', 'inherit']
|
|
46
|
-
});
|
|
47
|
-
const config = tracker_1.tracker.getConfig();
|
|
48
|
-
const featuresEnabled = config.features_enabled || {};
|
|
49
|
-
const convEnabled = featuresEnabled.conv_compress !== false;
|
|
50
|
-
const respEnabled = featuresEnabled.resp_optimize !== false;
|
|
51
|
-
const stdinRl = readline.createInterface({ input: process.stdin, terminal: false });
|
|
52
|
-
stdinRl.on('line', (line) => {
|
|
53
|
-
try {
|
|
54
|
-
const msg = JSON.parse(line);
|
|
55
|
-
if (msg && msg.jsonrpc === '2.0' && msg.method && msg.params) {
|
|
56
|
-
const params = msg.params;
|
|
57
|
-
if (Array.isArray(params.messages) && params.messages.length > 0) {
|
|
58
|
-
if (convEnabled) {
|
|
59
|
-
const result = (0, proxy_conv_1.compressConversation)(params.messages);
|
|
60
|
-
if (result.trimmedCount > 0 || result.savedTokens > 0) {
|
|
61
|
-
params.messages = result.messages;
|
|
62
|
-
tracker_1.tracker.logExecution('proxy:conv-compress', `${result.trimmedCount + result.messages.length} messages`, `${result.messages.length} messages (${result.trimmedCount} trimmed, ~${result.savedTokens} tokens saved)`, 0, undefined, ['conv_compress']);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if (respEnabled) {
|
|
66
|
-
const opt = (0, proxy_resp_1.optimizeMaxTokens)(params.messages, params.max_tokens);
|
|
67
|
-
if (opt) {
|
|
68
|
-
const prevMax = params.max_tokens || 'default';
|
|
69
|
-
params.max_tokens = opt.max_tokens;
|
|
70
|
-
tracker_1.tracker.logExecution('proxy:resp-optimize', `max_tokens: ${prevMax}`, `max_tokens: ${opt.max_tokens} (${opt.complexity})`, 0, undefined, ['resp_optimize']);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
child.stdin.write(JSON.stringify(msg) + '\n');
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
child.stdin.write(line + '\n');
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
child.stdin.write(line + '\n');
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
stdinRl.on('close', () => { try {
|
|
85
|
-
child.stdin.end();
|
|
86
|
-
}
|
|
87
|
-
catch { } });
|
|
88
|
-
const rl = readline.createInterface({
|
|
89
|
-
input: child.stdout,
|
|
90
|
-
terminal: false
|
|
91
|
-
});
|
|
92
|
-
rl.on('line', (line) => {
|
|
93
|
-
try {
|
|
94
|
-
const msg = JSON.parse(line);
|
|
95
|
-
if (msg &&
|
|
96
|
-
msg.jsonrpc === '2.0' &&
|
|
97
|
-
msg.id !== undefined &&
|
|
98
|
-
msg.result &&
|
|
99
|
-
Array.isArray(msg.result.content)) {
|
|
100
|
-
let textCompacted = false;
|
|
101
|
-
for (const item of msg.result.content) {
|
|
102
|
-
if (item.type === 'text' && typeof item.text === 'string' && item.text.trim().length > 0) {
|
|
103
|
-
const rawText = item.text;
|
|
104
|
-
const compressedText = (0, filters_1.compressOutput)('mcp-tool-call', rawText, '', tracker_1.tracker.getConfig().redaction_enabled);
|
|
105
|
-
tracker_1.tracker.logExecution(`mcp tool (id: ${msg.id})`, rawText, compressedText, 0);
|
|
106
|
-
item.text = compressedText;
|
|
107
|
-
textCompacted = true;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (textCompacted) {
|
|
111
|
-
process.stdout.write(JSON.stringify(msg) + '\n');
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
process.stdout.write(line + '\n');
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
process.stdout.write(line + '\n');
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
catch {
|
|
122
|
-
process.stdout.write(line + '\n');
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
child.on('close', (code) => {
|
|
126
|
-
process.exit(code || 0);
|
|
127
|
-
});
|
|
128
|
-
child.on('error', (err) => {
|
|
129
|
-
console.error(`[TrimPrompt] MCP Server Spawn Error: ${err.message}`);
|
|
130
|
-
process.exit(1);
|
|
131
|
-
});
|
|
132
|
-
}
|
|
1
|
+
'use strict';const a0_0x448a81=a0_0x20bc;function a0_0x20bc(_0x5a936e,_0x1c32c9){const _0x3c1ab8=a0_0x3c1a();return a0_0x20bc=function(_0x20bce0,_0x2b88ff){_0x20bce0=_0x20bce0-0x152;let _0x1b0973=_0x3c1ab8[_0x20bce0];return _0x1b0973;},a0_0x20bc(_0x5a936e,_0x1c32c9);}(function(_0x1dd21c,_0x4d3ed0){const _0xde2b7d=a0_0x20bc,_0x53c6ee=_0x1dd21c();while(!![]){try{const _0x55e2f7=parseInt(_0xde2b7d(0x166))/0x1+parseInt(_0xde2b7d(0x194))/0x2*(-parseInt(_0xde2b7d(0x18f))/0x3)+parseInt(_0xde2b7d(0x16d))/0x4*(parseInt(_0xde2b7d(0x16a))/0x5)+-parseInt(_0xde2b7d(0x15d))/0x6+-parseInt(_0xde2b7d(0x175))/0x7*(-parseInt(_0xde2b7d(0x15e))/0x8)+-parseInt(_0xde2b7d(0x191))/0x9+-parseInt(_0xde2b7d(0x185))/0xa*(-parseInt(_0xde2b7d(0x179))/0xb);if(_0x55e2f7===_0x4d3ed0)break;else _0x53c6ee['push'](_0x53c6ee['shift']());}catch(_0x328a70){_0x53c6ee['push'](_0x53c6ee['shift']());}}}(a0_0x3c1a,0xb85bf));var __createBinding=this&&this[a0_0x448a81(0x17f)]||(Object[a0_0x448a81(0x176)]?function(_0x3bcf14,_0x14def1,_0x54f1d4,_0x156422){const _0x639656=a0_0x448a81;if(_0x156422===undefined)_0x156422=_0x54f1d4;var _0x3c8452=Object[_0x639656(0x157)](_0x14def1,_0x54f1d4);(!_0x3c8452||('get'in _0x3c8452?!_0x14def1['__esModule']:_0x3c8452[_0x639656(0x16f)]||_0x3c8452[_0x639656(0x187)]))&&(_0x3c8452={'enumerable':!![],'get':function(){return _0x14def1[_0x54f1d4];}}),Object[_0x639656(0x192)](_0x3bcf14,_0x156422,_0x3c8452);}:function(_0x289410,_0x4acbd2,_0x2e2f39,_0x1145ec){if(_0x1145ec===undefined)_0x1145ec=_0x2e2f39;_0x289410[_0x1145ec]=_0x4acbd2[_0x2e2f39];}),__setModuleDefault=this&&this[a0_0x448a81(0x178)]||(Object[a0_0x448a81(0x176)]?function(_0x1c0bfc,_0x3bd956){const _0x5aee7c=a0_0x448a81;Object[_0x5aee7c(0x192)](_0x1c0bfc,_0x5aee7c(0x18d),{'enumerable':!![],'value':_0x3bd956});}:function(_0x4d9341,_0x2baa40){_0x4d9341['default']=_0x2baa40;}),__importStar=this&&this[a0_0x448a81(0x15b)]||(function(){var _0x49352e=function(_0x54a834){return _0x49352e=Object['getOwnPropertyNames']||function(_0x9dcc10){const _0x3a3af2=a0_0x20bc;var _0x30dcf9=[];for(var _0xe17dac in _0x9dcc10)if(Object[_0x3a3af2(0x193)]['hasOwnProperty'][_0x3a3af2(0x16e)](_0x9dcc10,_0xe17dac))_0x30dcf9[_0x30dcf9[_0x3a3af2(0x186)]]=_0xe17dac;return _0x30dcf9;},_0x49352e(_0x54a834);};return function(_0x33a5ce){const _0x3ffb2f=a0_0x20bc;if(_0x33a5ce&&_0x33a5ce['__esModule'])return _0x33a5ce;var _0xa416aa={};if(_0x33a5ce!=null){for(var _0x565692=_0x49352e(_0x33a5ce),_0xd4123b=0x0;_0xd4123b<_0x565692[_0x3ffb2f(0x186)];_0xd4123b++)if(_0x565692[_0xd4123b]!==_0x3ffb2f(0x18d))__createBinding(_0xa416aa,_0x33a5ce,_0x565692[_0xd4123b]);}return __setModuleDefault(_0xa416aa,_0x33a5ce),_0xa416aa;};}());function a0_0x3c1a(){const _0x364e96=['\x20messages','./filters','string','__importStar','createInterface','1980210fOjYYT','6338536LlnOVT','spawn','\x20trimmed,\x20~','trimmedCount','type','stdin','optimizeMaxTokens','stringify','391792qHXIUj','exit','./proxy-conv','\x20tokens\x20saved)','5370oIneJz','compressOutput','messages','1728YvsPeK','call','writable','error','write','complexity','params','close','7StkAue','create','redaction_enabled','__setModuleDefault','11eloQwi','pipe','text','child_process','mcp-tool-call','mcp\x20tool\x20(id:\x20','__createBinding','max_tokens:\x20','tracker','method','end','resp_optimize','18246160KwZMZi','length','configurable','inherit','result','content','2.0','getConfig','default','jsonrpc','3437274UZSpuM','./proxy-resp','11175885DngYdI','defineProperty','prototype','2PcUlfW','line','message','trim','\x20messages\x20(','./tracker','proxy:conv-compress','proxy:resp-optimize','max_tokens','logExecution','parse','isArray','stdout','conv_compress','runMcpProxy','savedTokens','getOwnPropertyDescriptor'];a0_0x3c1a=function(){return _0x364e96;};return a0_0x3c1a();}Object[a0_0x448a81(0x192)](exports,'__esModule',{'value':!![]}),exports[a0_0x448a81(0x155)]=runMcpProxy;const child_process_1=require(a0_0x448a81(0x17c)),readline=__importStar(require('readline')),filters_1=require(a0_0x448a81(0x159)),tracker_1=require(a0_0x448a81(0x199)),proxy_conv_1=require(a0_0x448a81(0x168)),proxy_resp_1=require(a0_0x448a81(0x190));function runMcpProxy(_0x5d5186,_0xeb74a4){const _0x3c69c5=a0_0x448a81,_0x22b9c6=(0x0,child_process_1[_0x3c69c5(0x15f)])(_0x5d5186,_0xeb74a4,{'stdio':[_0x3c69c5(0x17a),_0x3c69c5(0x17a),_0x3c69c5(0x188)]}),_0x2d6fbe=tracker_1[_0x3c69c5(0x181)][_0x3c69c5(0x18c)](),_0x2251da=_0x2d6fbe['features_enabled']||{},_0xbee164=_0x2251da[_0x3c69c5(0x154)]!==![],_0x702be5=_0x2251da[_0x3c69c5(0x184)]!==![],_0x33f317=readline[_0x3c69c5(0x15c)]({'input':process['stdin'],'terminal':![]});_0x33f317['on'](_0x3c69c5(0x195),_0x1609cc=>{const _0x4dd770=_0x3c69c5;try{const _0xdd7a99=JSON[_0x4dd770(0x19e)](_0x1609cc);if(_0xdd7a99&&_0xdd7a99['jsonrpc']===_0x4dd770(0x18b)&&_0xdd7a99[_0x4dd770(0x182)]&&_0xdd7a99[_0x4dd770(0x173)]){const _0x186637=_0xdd7a99['params'];if(Array[_0x4dd770(0x152)](_0x186637[_0x4dd770(0x16c)])&&_0x186637[_0x4dd770(0x16c)]['length']>0x0){if(_0xbee164){const _0x4e139a=(0x0,proxy_conv_1['compressConversation'])(_0x186637[_0x4dd770(0x16c)]);(_0x4e139a[_0x4dd770(0x161)]>0x0||_0x4e139a[_0x4dd770(0x156)]>0x0)&&(_0x186637[_0x4dd770(0x16c)]=_0x4e139a[_0x4dd770(0x16c)],tracker_1['tracker'][_0x4dd770(0x19d)](_0x4dd770(0x19a),_0x4e139a[_0x4dd770(0x161)]+_0x4e139a[_0x4dd770(0x16c)][_0x4dd770(0x186)]+_0x4dd770(0x158),_0x4e139a[_0x4dd770(0x16c)][_0x4dd770(0x186)]+_0x4dd770(0x198)+_0x4e139a[_0x4dd770(0x161)]+_0x4dd770(0x160)+_0x4e139a['savedTokens']+_0x4dd770(0x169),0x0,undefined,[_0x4dd770(0x154)]));}if(_0x702be5){const _0x52fed8=(0x0,proxy_resp_1[_0x4dd770(0x164)])(_0x186637[_0x4dd770(0x16c)],_0x186637['max_tokens']);if(_0x52fed8){const _0x4260f2=_0x186637['max_tokens']||_0x4dd770(0x18d);_0x186637['max_tokens']=_0x52fed8['max_tokens'],tracker_1[_0x4dd770(0x181)]['logExecution'](_0x4dd770(0x19b),'max_tokens:\x20'+_0x4260f2,_0x4dd770(0x180)+_0x52fed8[_0x4dd770(0x19c)]+'\x20('+_0x52fed8[_0x4dd770(0x172)]+')',0x0,undefined,[_0x4dd770(0x184)]);}}}_0x22b9c6[_0x4dd770(0x163)][_0x4dd770(0x171)](JSON[_0x4dd770(0x165)](_0xdd7a99)+'\x0a');}else _0x22b9c6[_0x4dd770(0x163)][_0x4dd770(0x171)](_0x1609cc+'\x0a');}catch{_0x22b9c6[_0x4dd770(0x163)]['write'](_0x1609cc+'\x0a');}}),_0x33f317['on'](_0x3c69c5(0x174),()=>{const _0x123f37=_0x3c69c5;try{_0x22b9c6['stdin'][_0x123f37(0x183)]();}catch{}});const _0x27d769=readline[_0x3c69c5(0x15c)]({'input':_0x22b9c6[_0x3c69c5(0x153)],'terminal':![]});_0x27d769['on'](_0x3c69c5(0x195),_0x3988f2=>{const _0x395930=_0x3c69c5;try{const _0x10fbcf=JSON[_0x395930(0x19e)](_0x3988f2);if(_0x10fbcf&&_0x10fbcf[_0x395930(0x18e)]===_0x395930(0x18b)&&_0x10fbcf['id']!==undefined&&_0x10fbcf[_0x395930(0x189)]&&Array[_0x395930(0x152)](_0x10fbcf[_0x395930(0x189)][_0x395930(0x18a)])){let _0x5d487b=![];for(const _0x314ab1 of _0x10fbcf[_0x395930(0x189)]['content']){if(_0x314ab1[_0x395930(0x162)]===_0x395930(0x17b)&&typeof _0x314ab1['text']===_0x395930(0x15a)&&_0x314ab1[_0x395930(0x17b)][_0x395930(0x197)]()[_0x395930(0x186)]>0x0){const _0x31e765=_0x314ab1[_0x395930(0x17b)],_0x4d35c2=(0x0,filters_1[_0x395930(0x16b)])(_0x395930(0x17d),_0x31e765,'',tracker_1[_0x395930(0x181)][_0x395930(0x18c)]()[_0x395930(0x177)]);tracker_1[_0x395930(0x181)]['logExecution'](_0x395930(0x17e)+_0x10fbcf['id']+')',_0x31e765,_0x4d35c2,0x0),_0x314ab1[_0x395930(0x17b)]=_0x4d35c2,_0x5d487b=!![];}}_0x5d487b?process[_0x395930(0x153)]['write'](JSON[_0x395930(0x165)](_0x10fbcf)+'\x0a'):process[_0x395930(0x153)][_0x395930(0x171)](_0x3988f2+'\x0a');}else process[_0x395930(0x153)][_0x395930(0x171)](_0x3988f2+'\x0a');}catch{process[_0x395930(0x153)][_0x395930(0x171)](_0x3988f2+'\x0a');}}),_0x22b9c6['on'](_0x3c69c5(0x174),_0xe4521b=>{const _0x9a20df=_0x3c69c5;process[_0x9a20df(0x167)](_0xe4521b||0x0);}),_0x22b9c6['on'](_0x3c69c5(0x170),_0xca0b3=>{const _0x8dbee1=_0x3c69c5;console[_0x8dbee1(0x170)]('[TrimPrompt]\x20MCP\x20Server\x20Spawn\x20Error:\x20'+_0xca0b3[_0x8dbee1(0x196)]),process[_0x8dbee1(0x167)](0x1);});}
|
package/package.json
CHANGED
package/proxy-conv.js
CHANGED
|
@@ -1,181 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.compressConversation = compressConversation;
|
|
4
|
-
const ROLE_WEIGHT = {
|
|
5
|
-
system: 1.0,
|
|
6
|
-
user: 0.8,
|
|
7
|
-
assistant: 0.5,
|
|
8
|
-
tool: 0.3,
|
|
9
|
-
};
|
|
10
|
-
function estimateTokens(text) {
|
|
11
|
-
return Math.ceil(text.length / 4);
|
|
12
|
-
}
|
|
13
|
-
function blockText(b) {
|
|
14
|
-
if (!b || typeof b !== 'object')
|
|
15
|
-
return '';
|
|
16
|
-
if (b.type === 'text' && typeof b.text === 'string')
|
|
17
|
-
return b.text;
|
|
18
|
-
if (b.type === 'tool_result') {
|
|
19
|
-
if (typeof b.content === 'string')
|
|
20
|
-
return b.content;
|
|
21
|
-
if (Array.isArray(b.content))
|
|
22
|
-
return b.content.map(blockText).filter(Boolean).join('\n');
|
|
23
|
-
}
|
|
24
|
-
return '';
|
|
25
|
-
}
|
|
26
|
-
function messageText(msg) {
|
|
27
|
-
if (typeof msg.content === 'string')
|
|
28
|
-
return msg.content;
|
|
29
|
-
if (Array.isArray(msg.content)) {
|
|
30
|
-
return msg.content.map(blockText).filter(Boolean).join('\n');
|
|
31
|
-
}
|
|
32
|
-
return '';
|
|
33
|
-
}
|
|
34
|
-
function summarizeText(text) {
|
|
35
|
-
const tokens = estimateTokens(text);
|
|
36
|
-
const lines = text.split('\n');
|
|
37
|
-
if (tokens > 2000) {
|
|
38
|
-
if (lines.length > 10) {
|
|
39
|
-
const head = lines.slice(0, 5).join('\n');
|
|
40
|
-
const tail = lines.slice(-5).join('\n');
|
|
41
|
-
return `${head}\n[... ${lines.length - 10} lines trimmed by TrimPrompt ...]\n${tail}`;
|
|
42
|
-
}
|
|
43
|
-
return text.slice(0, 2000) + `\n[... ${text.length - 2000} chars trimmed by TrimPrompt ...]`;
|
|
44
|
-
}
|
|
45
|
-
if (tokens > 500) {
|
|
46
|
-
if (lines.length > 10) {
|
|
47
|
-
return lines.slice(0, 10).join('\n') + `\n[... ${lines.length - 10} lines trimmed ...]`;
|
|
48
|
-
}
|
|
49
|
-
return text.slice(0, 800) + `\n[... ${text.length - 800} chars trimmed ...]`;
|
|
50
|
-
}
|
|
51
|
-
return text;
|
|
52
|
-
}
|
|
53
|
-
function summarizeBlock(b) {
|
|
54
|
-
if (!b || typeof b !== 'object')
|
|
55
|
-
return b;
|
|
56
|
-
if (b.type === 'text' && typeof b.text === 'string') {
|
|
57
|
-
return { ...b, text: summarizeText(b.text) };
|
|
58
|
-
}
|
|
59
|
-
if (b.type === 'tool_result') {
|
|
60
|
-
if (typeof b.content === 'string')
|
|
61
|
-
return { ...b, content: summarizeText(b.content) };
|
|
62
|
-
if (Array.isArray(b.content)) {
|
|
63
|
-
const idx = largestBlockIndex(b.content);
|
|
64
|
-
if (idx >= 0) {
|
|
65
|
-
const content = b.content.map((c, i) => (i === idx ? summarizeBlock(c) : c));
|
|
66
|
-
return { ...b, content };
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return b;
|
|
71
|
-
}
|
|
72
|
-
function largestBlockIndex(blocks) {
|
|
73
|
-
let idx = -1, max = -1;
|
|
74
|
-
blocks.forEach((b, i) => {
|
|
75
|
-
const len = blockText(b).length;
|
|
76
|
-
if (len > max) {
|
|
77
|
-
max = len;
|
|
78
|
-
idx = i;
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
return max > 0 ? idx : -1;
|
|
82
|
-
}
|
|
83
|
-
function scoreMessage(msg, index, total) {
|
|
84
|
-
const roleW = ROLE_WEIGHT[msg.role] || 0.4;
|
|
85
|
-
const recency = (index + 1) / total;
|
|
86
|
-
const text = messageText(msg);
|
|
87
|
-
const tokens = estimateTokens(text);
|
|
88
|
-
const lengthPenalty = tokens > 2000 ? 0.6 : tokens > 500 ? 0.8 : 1.0;
|
|
89
|
-
return roleW * (0.3 + 0.7 * recency) * lengthPenalty;
|
|
90
|
-
}
|
|
91
|
-
function summarizeMessage(msg) {
|
|
92
|
-
const tokens = estimateTokens(messageText(msg));
|
|
93
|
-
if (tokens <= 500)
|
|
94
|
-
return msg;
|
|
95
|
-
if (typeof msg.content === 'string') {
|
|
96
|
-
return { ...msg, content: summarizeText(msg.content) };
|
|
97
|
-
}
|
|
98
|
-
if (Array.isArray(msg.content)) {
|
|
99
|
-
const idx = largestBlockIndex(msg.content);
|
|
100
|
-
if (idx >= 0) {
|
|
101
|
-
const newContent = msg.content.map((b, i) => (i === idx ? summarizeBlock(b) : b));
|
|
102
|
-
return { ...msg, content: newContent };
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return msg;
|
|
106
|
-
}
|
|
107
|
-
function compressConversation(messages, budgetTokens) {
|
|
108
|
-
const passthrough = { messages, trimmedCount: 0, savedTokens: 0 };
|
|
109
|
-
if (!messages || !Array.isArray(messages) || messages.length <= 6) {
|
|
110
|
-
return passthrough;
|
|
111
|
-
}
|
|
112
|
-
try {
|
|
113
|
-
return _compressConversation(messages, budgetTokens);
|
|
114
|
-
}
|
|
115
|
-
catch {
|
|
116
|
-
return passthrough;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
function _compressConversation(messages, budgetTokens) {
|
|
120
|
-
const budget = budgetTokens || 80000;
|
|
121
|
-
const keepTailCount = 4;
|
|
122
|
-
const systemMsgs = messages.filter(m => m.role === 'system');
|
|
123
|
-
const nonSystem = messages.filter(m => m.role !== 'system');
|
|
124
|
-
const tail = nonSystem.slice(-keepTailCount);
|
|
125
|
-
const middle = nonSystem.slice(0, -keepTailCount);
|
|
126
|
-
const scored = middle.map((msg, i) => ({
|
|
127
|
-
msg,
|
|
128
|
-
score: scoreMessage(msg, i, middle.length),
|
|
129
|
-
tokens: estimateTokens(messageText(msg)),
|
|
130
|
-
}));
|
|
131
|
-
const totalTokens = scored.reduce((s, m) => s + m.tokens, 0);
|
|
132
|
-
const tailTokens = tail.reduce((s, m) => s + estimateTokens(messageText(m)), 0);
|
|
133
|
-
const sysTokens = systemMsgs.reduce((s, m) => s + estimateTokens(messageText(m)), 0);
|
|
134
|
-
const availBudget = budget - tailTokens - sysTokens;
|
|
135
|
-
if (totalTokens <= availBudget) {
|
|
136
|
-
let savedTokens = 0;
|
|
137
|
-
const compressed = scored.map(s => {
|
|
138
|
-
if (s.tokens > 500) {
|
|
139
|
-
const summarized = summarizeMessage(s.msg);
|
|
140
|
-
const newTokens = estimateTokens(messageText(summarized));
|
|
141
|
-
if (newTokens < s.tokens) {
|
|
142
|
-
savedTokens += s.tokens - newTokens;
|
|
143
|
-
return summarized;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return s.msg;
|
|
147
|
-
});
|
|
148
|
-
return {
|
|
149
|
-
messages: [...systemMsgs, ...compressed, ...tail],
|
|
150
|
-
trimmedCount: 0,
|
|
151
|
-
savedTokens,
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
scored.sort((a, b) => b.score - a.score);
|
|
155
|
-
let usedTokens = 0;
|
|
156
|
-
let trimmedCount = 0;
|
|
157
|
-
let savedTokens = 0;
|
|
158
|
-
const kept = [];
|
|
159
|
-
for (const s of scored) {
|
|
160
|
-
if (usedTokens + s.tokens <= availBudget) {
|
|
161
|
-
if (s.tokens > 1000) {
|
|
162
|
-
const summarized = summarizeMessage(s.msg);
|
|
163
|
-
const newTokens = estimateTokens(messageText(summarized));
|
|
164
|
-
savedTokens += s.tokens - newTokens;
|
|
165
|
-
usedTokens += newTokens;
|
|
166
|
-
kept.push({ msg: summarized, originalIndex: middle.indexOf(s.msg) });
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
usedTokens += s.tokens;
|
|
170
|
-
kept.push({ msg: s.msg, originalIndex: middle.indexOf(s.msg) });
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
trimmedCount++;
|
|
175
|
-
savedTokens += s.tokens;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
kept.sort((a, b) => a.originalIndex - b.originalIndex);
|
|
179
|
-
const result = [...systemMsgs, ...kept.map(k => k.msg), ...tail];
|
|
180
|
-
return { messages: result, trimmedCount, savedTokens };
|
|
181
|
-
}
|
|
1
|
+
'use strict';const a0_0x550692=a0_0x2455;function a0_0x5e9b(){const _0x3008b2=['11706673ZIPKNl','485vWAndn','defineProperty','msg','system','\x20chars\x20trimmed\x20...]','2608KrYUNW','3376899reXYFA','4781504igkNnW','join','score','text','role','2364CskZNs','length','map','49036cAqTrW','reduce','16boNqrv','push','tool_result','345251iftZhT','__esModule','\x20lines\x20trimmed\x20...]','3465600tsBgMA','compressConversation','sort','type','forEach','\x0a[...\x20','filter','tokens','ceil','slice','string','\x20lines\x20trimmed\x20by\x20TrimPrompt\x20...]\x0a','isArray','split','object','content','20iVoqiB','originalIndex'];a0_0x5e9b=function(){return _0x3008b2;};return a0_0x5e9b();}(function(_0x264804,_0x55854c){const _0x3e70a4=a0_0x2455,_0x5cbc89=_0x264804();while(!![]){try{const _0x571a0a=parseInt(_0x3e70a4(0xff))/0x1+-parseInt(_0x3e70a4(0xf0))/0x2*(parseInt(_0x3e70a4(0xf7))/0x3)+parseInt(_0x3e70a4(0xfa))/0x4*(-parseInt(_0x3e70a4(0xeb))/0x5)+parseInt(_0x3e70a4(0x102))/0x6+-parseInt(_0x3e70a4(0xf2))/0x7+-parseInt(_0x3e70a4(0xfc))/0x8*(-parseInt(_0x3e70a4(0xf1))/0x9)+parseInt(_0x3e70a4(0xe8))/0xa*(parseInt(_0x3e70a4(0xea))/0xb);if(_0x571a0a===_0x55854c)break;else _0x5cbc89['push'](_0x5cbc89['shift']());}catch(_0x5dee83){_0x5cbc89['push'](_0x5cbc89['shift']());}}}(a0_0x5e9b,0xdc37c));Object[a0_0x550692(0xec)](exports,a0_0x550692(0x100),{'value':!![]}),exports[a0_0x550692(0x103)]=compressConversation;const ROLE_WEIGHT={'system':0x1,'user':0.8,'assistant':0.5,'tool':0.3};function estimateTokens(_0x504fa3){const _0x3c9cef=a0_0x550692;return Math[_0x3c9cef(0x10a)](_0x504fa3['length']/0x4);}function blockText(_0x4890af){const _0x2c0c60=a0_0x550692;if(!_0x4890af||typeof _0x4890af!=='object')return'';if(_0x4890af['type']==='text'&&typeof _0x4890af[_0x2c0c60(0xf5)]===_0x2c0c60(0x10c))return _0x4890af[_0x2c0c60(0xf5)];if(_0x4890af[_0x2c0c60(0x105)]==='tool_result'){if(typeof _0x4890af[_0x2c0c60(0xe7)]===_0x2c0c60(0x10c))return _0x4890af[_0x2c0c60(0xe7)];if(Array['isArray'](_0x4890af[_0x2c0c60(0xe7)]))return _0x4890af[_0x2c0c60(0xe7)][_0x2c0c60(0xf9)](blockText)[_0x2c0c60(0x108)](Boolean)[_0x2c0c60(0xf3)]('\x0a');}return'';}function messageText(_0x33cbda){const _0x26f3db=a0_0x550692;if(typeof _0x33cbda[_0x26f3db(0xe7)]===_0x26f3db(0x10c))return _0x33cbda[_0x26f3db(0xe7)];if(Array[_0x26f3db(0xe4)](_0x33cbda['content']))return _0x33cbda[_0x26f3db(0xe7)]['map'](blockText)[_0x26f3db(0x108)](Boolean)[_0x26f3db(0xf3)]('\x0a');return'';}function summarizeText(_0x32e089){const _0x31044d=a0_0x550692,_0x3a9b84=estimateTokens(_0x32e089),_0x45591d=_0x32e089[_0x31044d(0xe5)]('\x0a');if(_0x3a9b84>0x7d0){if(_0x45591d[_0x31044d(0xf8)]>0xa){const _0x40d901=_0x45591d[_0x31044d(0x10b)](0x0,0x5)[_0x31044d(0xf3)]('\x0a'),_0x581ddf=_0x45591d[_0x31044d(0x10b)](-0x5)[_0x31044d(0xf3)]('\x0a');return _0x40d901+_0x31044d(0x107)+(_0x45591d[_0x31044d(0xf8)]-0xa)+_0x31044d(0xe3)+_0x581ddf;}return _0x32e089[_0x31044d(0x10b)](0x0,0x7d0)+(_0x31044d(0x107)+(_0x32e089[_0x31044d(0xf8)]-0x7d0)+'\x20chars\x20trimmed\x20by\x20TrimPrompt\x20...]');}if(_0x3a9b84>0x1f4){if(_0x45591d['length']>0xa)return _0x45591d[_0x31044d(0x10b)](0x0,0xa)[_0x31044d(0xf3)]('\x0a')+(_0x31044d(0x107)+(_0x45591d[_0x31044d(0xf8)]-0xa)+_0x31044d(0x101));return _0x32e089['slice'](0x0,0x320)+(_0x31044d(0x107)+(_0x32e089[_0x31044d(0xf8)]-0x320)+_0x31044d(0xef));}return _0x32e089;}function summarizeBlock(_0x4aa4b2){const _0x2da7bc=a0_0x550692;if(!_0x4aa4b2||typeof _0x4aa4b2!==_0x2da7bc(0xe6))return _0x4aa4b2;if(_0x4aa4b2[_0x2da7bc(0x105)]==='text'&&typeof _0x4aa4b2[_0x2da7bc(0xf5)]===_0x2da7bc(0x10c))return{..._0x4aa4b2,'text':summarizeText(_0x4aa4b2[_0x2da7bc(0xf5)])};if(_0x4aa4b2['type']===_0x2da7bc(0xfe)){if(typeof _0x4aa4b2[_0x2da7bc(0xe7)]==='string')return{..._0x4aa4b2,'content':summarizeText(_0x4aa4b2[_0x2da7bc(0xe7)])};if(Array['isArray'](_0x4aa4b2[_0x2da7bc(0xe7)])){const _0xcca561=largestBlockIndex(_0x4aa4b2[_0x2da7bc(0xe7)]);if(_0xcca561>=0x0){const _0x94104f=_0x4aa4b2[_0x2da7bc(0xe7)][_0x2da7bc(0xf9)]((_0x190317,_0x2b370f)=>_0x2b370f===_0xcca561?summarizeBlock(_0x190317):_0x190317);return{..._0x4aa4b2,'content':_0x94104f};}}}return _0x4aa4b2;}function largestBlockIndex(_0x16ea49){const _0x16d4af=a0_0x550692;let _0x52ecf0=-0x1,_0x21652e=-0x1;return _0x16ea49[_0x16d4af(0x106)]((_0x301d77,_0x2ebe5e)=>{const _0x494106=_0x16d4af,_0x105c93=blockText(_0x301d77)[_0x494106(0xf8)];_0x105c93>_0x21652e&&(_0x21652e=_0x105c93,_0x52ecf0=_0x2ebe5e);}),_0x21652e>0x0?_0x52ecf0:-0x1;}function scoreMessage(_0x4a2453,_0x47bd62,_0x2543b1){const _0x192877=a0_0x550692,_0x299213=ROLE_WEIGHT[_0x4a2453[_0x192877(0xf6)]]||0.4,_0x498ebf=(_0x47bd62+0x1)/_0x2543b1,_0x303b05=messageText(_0x4a2453),_0x54bb6c=estimateTokens(_0x303b05),_0x4d5ff2=_0x54bb6c>0x7d0?0.6:_0x54bb6c>0x1f4?0.8:0x1;return _0x299213*(0.3+0.7*_0x498ebf)*_0x4d5ff2;}function summarizeMessage(_0x3cc1c7){const _0x10242d=a0_0x550692,_0x1de7bb=estimateTokens(messageText(_0x3cc1c7));if(_0x1de7bb<=0x1f4)return _0x3cc1c7;if(typeof _0x3cc1c7[_0x10242d(0xe7)]===_0x10242d(0x10c))return{..._0x3cc1c7,'content':summarizeText(_0x3cc1c7[_0x10242d(0xe7)])};if(Array[_0x10242d(0xe4)](_0x3cc1c7[_0x10242d(0xe7)])){const _0x273936=largestBlockIndex(_0x3cc1c7[_0x10242d(0xe7)]);if(_0x273936>=0x0){const _0x423111=_0x3cc1c7[_0x10242d(0xe7)][_0x10242d(0xf9)]((_0xd0bb3e,_0x5956fd)=>_0x5956fd===_0x273936?summarizeBlock(_0xd0bb3e):_0xd0bb3e);return{..._0x3cc1c7,'content':_0x423111};}}return _0x3cc1c7;}function a0_0x2455(_0x27e0d6,_0x272619){const _0x5e9b11=a0_0x5e9b();return a0_0x2455=function(_0x2455ae,_0x253b26){_0x2455ae=_0x2455ae-0xe3;let _0x2dc5e8=_0x5e9b11[_0x2455ae];return _0x2dc5e8;},a0_0x2455(_0x27e0d6,_0x272619);}function compressConversation(_0x251ffa,_0x2aa1f1){const _0x400ed3=a0_0x550692,_0x3dc97b={'messages':_0x251ffa,'trimmedCount':0x0,'savedTokens':0x0};if(!_0x251ffa||!Array['isArray'](_0x251ffa)||_0x251ffa[_0x400ed3(0xf8)]<=0x6)return _0x3dc97b;try{return _compressConversation(_0x251ffa,_0x2aa1f1);}catch{return _0x3dc97b;}}function _compressConversation(_0x174d3a,_0xf8e1f5){const _0x5e57aa=a0_0x550692,_0x474fd3=_0xf8e1f5||0x13880,_0x5313f5=0x4,_0x5cf001=_0x174d3a[_0x5e57aa(0x108)](_0x224c5e=>_0x224c5e[_0x5e57aa(0xf6)]===_0x5e57aa(0xee)),_0x9d133c=_0x174d3a[_0x5e57aa(0x108)](_0x4cd513=>_0x4cd513[_0x5e57aa(0xf6)]!==_0x5e57aa(0xee)),_0x486420=_0x9d133c[_0x5e57aa(0x10b)](-_0x5313f5),_0x5afdba=_0x9d133c[_0x5e57aa(0x10b)](0x0,-_0x5313f5),_0x57eeed=_0x5afdba['map']((_0x437dfc,_0x20d6b6)=>({'msg':_0x437dfc,'score':scoreMessage(_0x437dfc,_0x20d6b6,_0x5afdba[_0x5e57aa(0xf8)]),'tokens':estimateTokens(messageText(_0x437dfc))})),_0x1ca7ce=_0x57eeed['reduce']((_0xe9cc51,_0x3c3172)=>_0xe9cc51+_0x3c3172[_0x5e57aa(0x109)],0x0),_0x44c5a4=_0x486420[_0x5e57aa(0xfb)]((_0x5e8eb2,_0x28b6c0)=>_0x5e8eb2+estimateTokens(messageText(_0x28b6c0)),0x0),_0x4c6bf7=_0x5cf001[_0x5e57aa(0xfb)]((_0x3efa70,_0x3eeb04)=>_0x3efa70+estimateTokens(messageText(_0x3eeb04)),0x0),_0x1d0e91=_0x474fd3-_0x44c5a4-_0x4c6bf7;if(_0x1ca7ce<=_0x1d0e91){let _0x493099=0x0;const _0x1a0f96=_0x57eeed[_0x5e57aa(0xf9)](_0x4ee73c=>{const _0x4e2353=_0x5e57aa;if(_0x4ee73c[_0x4e2353(0x109)]>0x1f4){const _0x3ff301=summarizeMessage(_0x4ee73c[_0x4e2353(0xed)]),_0x399dd0=estimateTokens(messageText(_0x3ff301));if(_0x399dd0<_0x4ee73c['tokens'])return _0x493099+=_0x4ee73c['tokens']-_0x399dd0,_0x3ff301;}return _0x4ee73c[_0x4e2353(0xed)];});return{'messages':[..._0x5cf001,..._0x1a0f96,..._0x486420],'trimmedCount':0x0,'savedTokens':_0x493099};}_0x57eeed[_0x5e57aa(0x104)]((_0x55654d,_0x3c0d4)=>_0x3c0d4[_0x5e57aa(0xf4)]-_0x55654d['score']);let _0x113443=0x0,_0x3e8f98=0x0,_0x4a679b=0x0;const _0x242dd7=[];for(const _0x2a1f43 of _0x57eeed){if(_0x113443+_0x2a1f43['tokens']<=_0x1d0e91){if(_0x2a1f43[_0x5e57aa(0x109)]>0x3e8){const _0x3f5d69=summarizeMessage(_0x2a1f43[_0x5e57aa(0xed)]),_0x4915b4=estimateTokens(messageText(_0x3f5d69));_0x4a679b+=_0x2a1f43['tokens']-_0x4915b4,_0x113443+=_0x4915b4,_0x242dd7['push']({'msg':_0x3f5d69,'originalIndex':_0x5afdba['indexOf'](_0x2a1f43[_0x5e57aa(0xed)])});}else _0x113443+=_0x2a1f43[_0x5e57aa(0x109)],_0x242dd7[_0x5e57aa(0xfd)]({'msg':_0x2a1f43[_0x5e57aa(0xed)],'originalIndex':_0x5afdba['indexOf'](_0x2a1f43[_0x5e57aa(0xed)])});}else _0x3e8f98++,_0x4a679b+=_0x2a1f43[_0x5e57aa(0x109)];}_0x242dd7[_0x5e57aa(0x104)]((_0x65a924,_0x58036c)=>_0x65a924[_0x5e57aa(0xe9)]-_0x58036c[_0x5e57aa(0xe9)]);const _0x4810a5=[..._0x5cf001,..._0x242dd7[_0x5e57aa(0xf9)](_0x491d20=>_0x491d20['msg']),..._0x486420];return{'messages':_0x4810a5,'trimmedCount':_0x3e8f98,'savedTokens':_0x4a679b};}
|