trimprompt 1.0.29 → 1.0.31

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/mcp.js CHANGED
@@ -1 +1,132 @@
1
- 'use strict';function a0_0x2b5e(_0x22898f,_0x4d157f){_0x22898f=_0x22898f-0xf7;const _0x40c322=a0_0x40c3();let _0x2b5e6a=_0x40c322[_0x22898f];return _0x2b5e6a;}const a0_0x535df1=a0_0x2b5e;(function(_0x30dabb,_0x3632a7){const _0x27304c=a0_0x2b5e,_0x2b848f=_0x30dabb();while(!![]){try{const _0x271e98=-parseInt(_0x27304c(0x10a))/0x1+parseInt(_0x27304c(0x13d))/0x2*(parseInt(_0x27304c(0x107))/0x3)+-parseInt(_0x27304c(0x138))/0x4*(-parseInt(_0x27304c(0x13b))/0x5)+-parseInt(_0x27304c(0x125))/0x6*(-parseInt(_0x27304c(0x11a))/0x7)+parseInt(_0x27304c(0x102))/0x8*(-parseInt(_0x27304c(0xf9))/0x9)+parseInt(_0x27304c(0xf8))/0xa+-parseInt(_0x27304c(0x105))/0xb;if(_0x271e98===_0x3632a7)break;else _0x2b848f['push'](_0x2b848f['shift']());}catch(_0x254f2a){_0x2b848f['push'](_0x2b848f['shift']());}}}(a0_0x40c3,0x54b91));var __createBinding=this&&this[a0_0x535df1(0x141)]||(Object[a0_0x535df1(0x12f)]?function(_0x4bd6aa,_0x4d5067,_0x3956a9,_0x4c7dbd){const _0x1a6a34=a0_0x535df1;if(_0x4c7dbd===undefined)_0x4c7dbd=_0x3956a9;var _0x1b375a=Object['getOwnPropertyDescriptor'](_0x4d5067,_0x3956a9);(!_0x1b375a||(_0x1a6a34(0xfd)in _0x1b375a?!_0x4d5067[_0x1a6a34(0x131)]:_0x1b375a[_0x1a6a34(0x13f)]||_0x1b375a[_0x1a6a34(0x129)]))&&(_0x1b375a={'enumerable':!![],'get':function(){return _0x4d5067[_0x3956a9];}}),Object[_0x1a6a34(0x135)](_0x4bd6aa,_0x4c7dbd,_0x1b375a);}:function(_0x231d14,_0x405a4a,_0xe0bcf1,_0x4aad46){if(_0x4aad46===undefined)_0x4aad46=_0xe0bcf1;_0x231d14[_0x4aad46]=_0x405a4a[_0xe0bcf1];}),__setModuleDefault=this&&this['__setModuleDefault']||(Object['create']?function(_0x3f58b3,_0x51b592){const _0xbc91f2=a0_0x535df1;Object[_0xbc91f2(0x135)](_0x3f58b3,'default',{'enumerable':!![],'value':_0x51b592});}:function(_0x415f76,_0x234be0){const _0x15e57e=a0_0x535df1;_0x415f76[_0x15e57e(0x127)]=_0x234be0;}),__importStar=this&&this[a0_0x535df1(0x114)]||(function(){var _0xe8a155=function(_0x4eac28){return _0xe8a155=Object['getOwnPropertyNames']||function(_0x1381f3){const _0x2bb5dc=a0_0x2b5e;var _0x3318d6=[];for(var _0x36a098 in _0x1381f3)if(Object[_0x2bb5dc(0x117)][_0x2bb5dc(0x12b)][_0x2bb5dc(0x10f)](_0x1381f3,_0x36a098))_0x3318d6[_0x3318d6['length']]=_0x36a098;return _0x3318d6;},_0xe8a155(_0x4eac28);};return function(_0x22dca4){const _0x339884=a0_0x2b5e;if(_0x22dca4&&_0x22dca4[_0x339884(0x131)])return _0x22dca4;var _0x2c66a7={};if(_0x22dca4!=null){for(var _0x59359d=_0xe8a155(_0x22dca4),_0x29abff=0x0;_0x29abff<_0x59359d[_0x339884(0x130)];_0x29abff++)if(_0x59359d[_0x29abff]!==_0x339884(0x127))__createBinding(_0x2c66a7,_0x22dca4,_0x59359d[_0x29abff]);}return __setModuleDefault(_0x2c66a7,_0x22dca4),_0x2c66a7;};}());Object[a0_0x535df1(0x135)](exports,'__esModule',{'value':!![]}),exports[a0_0x535df1(0x11b)]=runMcpProxy;const child_process_1=require(a0_0x535df1(0x111)),readline=__importStar(require(a0_0x535df1(0x124))),filters_1=require(a0_0x535df1(0x12d)),tracker_1=require(a0_0x535df1(0x116)),proxy_conv_1=require(a0_0x535df1(0x139)),proxy_resp_1=require(a0_0x535df1(0x112));function runMcpProxy(_0x15becd,_0xaefc79){const _0x3fd8cd=a0_0x535df1,_0x18fe65=(0x0,child_process_1[_0x3fd8cd(0x12c)])(_0x15becd,_0xaefc79,{'stdio':[_0x3fd8cd(0x126),_0x3fd8cd(0x126),'inherit']}),_0x5d0d0c=tracker_1[_0x3fd8cd(0xf7)][_0x3fd8cd(0x13e)](),_0x41c36f=_0x5d0d0c[_0x3fd8cd(0x134)]||{},_0xa815c7=_0x41c36f[_0x3fd8cd(0x11f)]!==![],_0x507909=_0x41c36f['resp_optimize']!==![],_0xcf2abc=readline[_0x3fd8cd(0x119)]({'input':process[_0x3fd8cd(0x101)],'terminal':![]});_0xcf2abc['on']('line',_0xc6d1a7=>{const _0x53ef6b=_0x3fd8cd;try{const _0x36def5=JSON[_0x53ef6b(0x13c)](_0xc6d1a7);if(_0x36def5&&_0x36def5[_0x53ef6b(0xfa)]===_0x53ef6b(0x106)&&_0x36def5[_0x53ef6b(0x11c)]&&_0x36def5[_0x53ef6b(0x137)]){const _0xa106c2=_0x36def5[_0x53ef6b(0x137)];if(Array[_0x53ef6b(0x12a)](_0xa106c2['messages'])&&_0xa106c2['messages'][_0x53ef6b(0x130)]>0x0){if(_0xa815c7){const _0x5c402a=(0x0,proxy_conv_1[_0x53ef6b(0xfe)])(_0xa106c2['messages']);(_0x5c402a[_0x53ef6b(0x10d)]>0x0||_0x5c402a[_0x53ef6b(0xfc)]>0x0)&&(_0xa106c2[_0x53ef6b(0x120)]=_0x5c402a[_0x53ef6b(0x120)],tracker_1[_0x53ef6b(0xf7)][_0x53ef6b(0x118)](_0x53ef6b(0x108),_0x5c402a['trimmedCount']+_0x5c402a[_0x53ef6b(0x120)]['length']+_0x53ef6b(0x115),_0x5c402a[_0x53ef6b(0x120)][_0x53ef6b(0x130)]+_0x53ef6b(0x12e)+_0x5c402a[_0x53ef6b(0x10d)]+'\x20trimmed,\x20~'+_0x5c402a[_0x53ef6b(0xfc)]+_0x53ef6b(0x143),0x0,undefined,[_0x53ef6b(0x11f)]));}if(_0x507909){const _0x2a61eb=(0x0,proxy_resp_1[_0x53ef6b(0x10c)])(_0xa106c2[_0x53ef6b(0x120)],_0xa106c2[_0x53ef6b(0x10b)]);if(_0x2a61eb){const _0x35ead5=_0xa106c2['max_tokens']||_0x53ef6b(0x127);_0xa106c2['max_tokens']=_0x2a61eb[_0x53ef6b(0x10b)],tracker_1[_0x53ef6b(0xf7)][_0x53ef6b(0x118)]('proxy:resp-optimize',_0x53ef6b(0x133)+_0x35ead5,_0x53ef6b(0x133)+_0x2a61eb[_0x53ef6b(0x10b)]+'\x20('+_0x2a61eb[_0x53ef6b(0x140)]+')',0x0,undefined,['resp_optimize']);}}}_0x18fe65[_0x53ef6b(0x101)]['write'](JSON['stringify'](_0x36def5)+'\x0a');}else _0x18fe65[_0x53ef6b(0x101)][_0x53ef6b(0x11e)](_0xc6d1a7+'\x0a');}catch{_0x18fe65[_0x53ef6b(0x101)][_0x53ef6b(0x11e)](_0xc6d1a7+'\x0a');}}),_0xcf2abc['on'](_0x3fd8cd(0x121),()=>{const _0x5af35d=_0x3fd8cd;try{_0x18fe65['stdin'][_0x5af35d(0x104)]();}catch{}});const _0x29428f=readline[_0x3fd8cd(0x119)]({'input':_0x18fe65['stdout'],'terminal':![]});_0x29428f['on'](_0x3fd8cd(0x136),_0x1ae918=>{const _0x468543=_0x3fd8cd;try{const _0x3d34bd=JSON['parse'](_0x1ae918);if(_0x3d34bd&&_0x3d34bd[_0x468543(0xfa)]==='2.0'&&_0x3d34bd['id']!==undefined&&_0x3d34bd['result']&&Array[_0x468543(0x12a)](_0x3d34bd[_0x468543(0x100)][_0x468543(0x128)])){let _0x4afeb5=![];for(const _0x3b12d6 of _0x3d34bd[_0x468543(0x100)][_0x468543(0x128)]){if(_0x3b12d6[_0x468543(0x123)]===_0x468543(0x10e)&&typeof _0x3b12d6[_0x468543(0x10e)]===_0x468543(0x11d)&&_0x3b12d6[_0x468543(0x10e)]['trim']()[_0x468543(0x130)]>0x0){const _0x31108e=_0x3b12d6['text'],_0x11773b=(0x0,filters_1[_0x468543(0x13a)])(_0x468543(0xfb),_0x31108e,'',tracker_1['tracker'][_0x468543(0x13e)]()[_0x468543(0x109)]);tracker_1[_0x468543(0xf7)][_0x468543(0x118)](_0x468543(0x142)+_0x3d34bd['id']+')',_0x31108e,_0x11773b,0x0),_0x3b12d6[_0x468543(0x10e)]=_0x11773b,_0x4afeb5=!![];}}_0x4afeb5?process[_0x468543(0x132)][_0x468543(0x11e)](JSON[_0x468543(0x113)](_0x3d34bd)+'\x0a'):process['stdout'][_0x468543(0x11e)](_0x1ae918+'\x0a');}else process[_0x468543(0x132)][_0x468543(0x11e)](_0x1ae918+'\x0a');}catch{process[_0x468543(0x132)][_0x468543(0x11e)](_0x1ae918+'\x0a');}}),_0x18fe65['on'](_0x3fd8cd(0x121),_0x3515ea=>{const _0x1e2573=_0x3fd8cd;process[_0x1e2573(0x110)](_0x3515ea||0x0);}),_0x18fe65['on'](_0x3fd8cd(0xff),_0x5b4070=>{const _0x3364af=_0x3fd8cd;console[_0x3364af(0xff)](_0x3364af(0x103)+_0x5b4070[_0x3364af(0x122)]),process[_0x3364af(0x110)](0x1);});}function a0_0x40c3(){const _0x1a6ec1=['mcp\x20tool\x20(id:\x20','\x20tokens\x20saved)','tracker','3548930nKYQTU','66609srfUei','jsonrpc','mcp-tool-call','savedTokens','get','compressConversation','error','result','stdin','256pQUFiu','[TrimPrompt]\x20MCP\x20Server\x20Spawn\x20Error:\x20','end','5914909yRobMY','2.0','45gNdOzk','proxy:conv-compress','redaction_enabled','657114MMAMcy','max_tokens','optimizeMaxTokens','trimmedCount','text','call','exit','child_process','./proxy-resp','stringify','__importStar','\x20messages','./tracker','prototype','logExecution','createInterface','3049389TChQDM','runMcpProxy','method','string','write','conv_compress','messages','close','message','type','readline','6gPRHze','pipe','default','content','configurable','isArray','hasOwnProperty','spawn','./filters','\x20messages\x20(','create','length','__esModule','stdout','max_tokens:\x20','features_enabled','defineProperty','line','params','7092cbTVJz','./proxy-conv','compressOutput','1775kikEBh','parse','47834YlUPCE','getConfig','writable','complexity','__createBinding'];a0_0x40c3=function(){return _0x1a6ec1;};return a0_0x40c3();}
1
+ "use strict";
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
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trimprompt",
3
- "version": "1.0.29",
3
+ "version": "1.0.31",
4
4
  "description": "TrimPrompt — Save 80% on LLM tokens. Zero-config CLI proxy for AI coding agents",
5
5
  "keywords": [
6
6
  "llm",
@@ -24,9 +24,6 @@
24
24
  "trim": "cli.js"
25
25
  },
26
26
  "homepage": "https://trimprompt.ai",
27
- "scripts": {
28
- "postinstall": "node cli.js shims install || true"
29
- },
30
27
  "dependencies": {
31
28
  "commander": "^11.1.0",
32
29
  "express": "^4.18.2",
package/proxy-conv.js CHANGED
@@ -1 +1,181 @@
1
- 'use strict';const a0_0x40a803=a0_0x2356;(function(_0x1abde1,_0x2da495){const _0x5c9220=a0_0x2356,_0x64d9c2=_0x1abde1();while(!![]){try{const _0x1c108e=parseInt(_0x5c9220(0xfb))/0x1+parseInt(_0x5c9220(0xf7))/0x2*(parseInt(_0x5c9220(0xf2))/0x3)+-parseInt(_0x5c9220(0xfc))/0x4+parseInt(_0x5c9220(0xe6))/0x5+parseInt(_0x5c9220(0x102))/0x6*(-parseInt(_0x5c9220(0xeb))/0x7)+parseInt(_0x5c9220(0xed))/0x8+parseInt(_0x5c9220(0xfe))/0x9*(-parseInt(_0x5c9220(0x100))/0xa);if(_0x1c108e===_0x2da495)break;else _0x64d9c2['push'](_0x64d9c2['shift']());}catch(_0x4883ed){_0x64d9c2['push'](_0x64d9c2['shift']());}}}(a0_0x44bf,0xc690a));Object[a0_0x40a803(0x10c)](exports,'__esModule',{'value':!![]}),exports[a0_0x40a803(0x10a)]=compressConversation;const ROLE_WEIGHT={'system':0x1,'user':0.8,'assistant':0.5,'tool':0.3};function estimateTokens(_0x54165b){const _0x5061e3=a0_0x40a803;return Math[_0x5061e3(0xfa)](_0x54165b[_0x5061e3(0x107)]/0x4);}function blockText(_0x50b6f2){const _0x51fa7b=a0_0x40a803;if(!_0x50b6f2||typeof _0x50b6f2!==_0x51fa7b(0xf4))return'';if(_0x50b6f2[_0x51fa7b(0x103)]===_0x51fa7b(0x105)&&typeof _0x50b6f2[_0x51fa7b(0x105)]===_0x51fa7b(0xf8))return _0x50b6f2[_0x51fa7b(0x105)];if(_0x50b6f2['type']==='tool_result'){if(typeof _0x50b6f2[_0x51fa7b(0xff)]===_0x51fa7b(0xf8))return _0x50b6f2[_0x51fa7b(0xff)];if(Array[_0x51fa7b(0x109)](_0x50b6f2[_0x51fa7b(0xff)]))return _0x50b6f2[_0x51fa7b(0xff)]['map'](blockText)['filter'](Boolean)[_0x51fa7b(0x101)]('\x0a');}return'';}function messageText(_0x7781b4){const _0xb63e8=a0_0x40a803;if(typeof _0x7781b4[_0xb63e8(0xff)]==='string')return _0x7781b4['content'];if(Array[_0xb63e8(0x109)](_0x7781b4[_0xb63e8(0xff)]))return _0x7781b4[_0xb63e8(0xff)]['map'](blockText)[_0xb63e8(0xf5)](Boolean)[_0xb63e8(0x101)]('\x0a');return'';}function summarizeText(_0x9224ac){const _0x4e46ec=a0_0x40a803,_0x474b1c=estimateTokens(_0x9224ac),_0x48e8ce=_0x9224ac[_0x4e46ec(0xe4)]('\x0a');if(_0x474b1c>0x7d0){if(_0x48e8ce[_0x4e46ec(0x107)]>0xa){const _0x33ba46=_0x48e8ce[_0x4e46ec(0x10b)](0x0,0x5)[_0x4e46ec(0x101)]('\x0a'),_0x3bc4b4=_0x48e8ce[_0x4e46ec(0x10b)](-0x5)[_0x4e46ec(0x101)]('\x0a');return _0x33ba46+'\x0a[...\x20'+(_0x48e8ce[_0x4e46ec(0x107)]-0xa)+_0x4e46ec(0x104)+_0x3bc4b4;}return _0x9224ac['slice'](0x0,0x7d0)+(_0x4e46ec(0xe5)+(_0x9224ac[_0x4e46ec(0x107)]-0x7d0)+_0x4e46ec(0xe9));}if(_0x474b1c>0x1f4){if(_0x48e8ce[_0x4e46ec(0x107)]>0xa)return _0x48e8ce[_0x4e46ec(0x10b)](0x0,0xa)['join']('\x0a')+('\x0a[...\x20'+(_0x48e8ce[_0x4e46ec(0x107)]-0xa)+_0x4e46ec(0xea));return _0x9224ac[_0x4e46ec(0x10b)](0x0,0x320)+(_0x4e46ec(0xe5)+(_0x9224ac[_0x4e46ec(0x107)]-0x320)+_0x4e46ec(0xfd));}return _0x9224ac;}function summarizeBlock(_0x1f300e){const _0xb71251=a0_0x40a803;if(!_0x1f300e||typeof _0x1f300e!==_0xb71251(0xf4))return _0x1f300e;if(_0x1f300e[_0xb71251(0x103)]===_0xb71251(0x105)&&typeof _0x1f300e[_0xb71251(0x105)]==='string')return{..._0x1f300e,'text':summarizeText(_0x1f300e[_0xb71251(0x105)])};if(_0x1f300e[_0xb71251(0x103)]===_0xb71251(0xef)){if(typeof _0x1f300e[_0xb71251(0xff)]===_0xb71251(0xf8))return{..._0x1f300e,'content':summarizeText(_0x1f300e[_0xb71251(0xff)])};if(Array[_0xb71251(0x109)](_0x1f300e[_0xb71251(0xff)])){const _0x28cc22=largestBlockIndex(_0x1f300e[_0xb71251(0xff)]);if(_0x28cc22>=0x0){const _0x15d3ce=_0x1f300e[_0xb71251(0xff)]['map']((_0x1c20c8,_0x41e61c)=>_0x41e61c===_0x28cc22?summarizeBlock(_0x1c20c8):_0x1c20c8);return{..._0x1f300e,'content':_0x15d3ce};}}}return _0x1f300e;}function largestBlockIndex(_0x215e8b){const _0x17664a=a0_0x40a803;let _0x395ff5=-0x1,_0x32b25b=-0x1;return _0x215e8b[_0x17664a(0xf0)]((_0x44d6be,_0x3f9945)=>{const _0x15d678=_0x17664a,_0x14d044=blockText(_0x44d6be)[_0x15d678(0x107)];_0x14d044>_0x32b25b&&(_0x32b25b=_0x14d044,_0x395ff5=_0x3f9945);}),_0x32b25b>0x0?_0x395ff5:-0x1;}function scoreMessage(_0x119e55,_0x3f41dc,_0x8e032c){const _0x20be50=a0_0x40a803,_0x5bb801=ROLE_WEIGHT[_0x119e55[_0x20be50(0xf9)]]||0.4,_0xecd89b=(_0x3f41dc+0x1)/_0x8e032c,_0x432c93=messageText(_0x119e55),_0x4672b8=estimateTokens(_0x432c93),_0x3d517b=_0x4672b8>0x7d0?0.6:_0x4672b8>0x1f4?0.8:0x1;return _0x5bb801*(0.3+0.7*_0xecd89b)*_0x3d517b;}function a0_0x44bf(){const _0x452f78=['length','msg','isArray','compressConversation','slice','defineProperty','split','\x0a[...\x20','7139580aAChbL','sort','reduce','\x20chars\x20trimmed\x20by\x20TrimPrompt\x20...]','\x20lines\x20trimmed\x20...]','7iPAdYI','tokens','6621232YTqwJY','originalIndex','tool_result','forEach','map','68733zJRYMJ','indexOf','object','filter','system','10EqXAOd','string','role','ceil','1410612pyUGRK','6451228QJqyLg','\x20chars\x20trimmed\x20...]','192987vqFJNR','content','370aCQmlF','join','3367302aSXwbu','type','\x20lines\x20trimmed\x20by\x20TrimPrompt\x20...]\x0a','text','score'];a0_0x44bf=function(){return _0x452f78;};return a0_0x44bf();}function summarizeMessage(_0x1f3fe4){const _0x31d2f8=a0_0x40a803,_0x2515ab=estimateTokens(messageText(_0x1f3fe4));if(_0x2515ab<=0x1f4)return _0x1f3fe4;if(typeof _0x1f3fe4[_0x31d2f8(0xff)]===_0x31d2f8(0xf8))return{..._0x1f3fe4,'content':summarizeText(_0x1f3fe4['content'])};if(Array[_0x31d2f8(0x109)](_0x1f3fe4[_0x31d2f8(0xff)])){const _0x328cc7=largestBlockIndex(_0x1f3fe4[_0x31d2f8(0xff)]);if(_0x328cc7>=0x0){const _0x174e19=_0x1f3fe4[_0x31d2f8(0xff)]['map']((_0xebe8e1,_0x26ce94)=>_0x26ce94===_0x328cc7?summarizeBlock(_0xebe8e1):_0xebe8e1);return{..._0x1f3fe4,'content':_0x174e19};}}return _0x1f3fe4;}function a0_0x2356(_0x335845,_0x2b2589){_0x335845=_0x335845-0xe4;const _0x44bf77=a0_0x44bf();let _0x2356a2=_0x44bf77[_0x335845];return _0x2356a2;}function compressConversation(_0x5da4ce,_0x1e5a3){const _0x52a81f=a0_0x40a803,_0x3862af={'messages':_0x5da4ce,'trimmedCount':0x0,'savedTokens':0x0};if(!_0x5da4ce||!Array[_0x52a81f(0x109)](_0x5da4ce)||_0x5da4ce[_0x52a81f(0x107)]<=0x6)return _0x3862af;try{return _compressConversation(_0x5da4ce,_0x1e5a3);}catch{return _0x3862af;}}function _compressConversation(_0x2a954d,_0x2ed41a){const _0x1d5101=a0_0x40a803,_0xc8c24e=_0x2ed41a||0x13880,_0x2792a1=0x4,_0x4ec508=_0x2a954d['filter'](_0x4d7485=>_0x4d7485[_0x1d5101(0xf9)]===_0x1d5101(0xf6)),_0xa5b15=_0x2a954d[_0x1d5101(0xf5)](_0x1800e9=>_0x1800e9[_0x1d5101(0xf9)]!==_0x1d5101(0xf6)),_0xc0600e=_0xa5b15[_0x1d5101(0x10b)](-_0x2792a1),_0x2ef206=_0xa5b15['slice'](0x0,-_0x2792a1),_0x1499db=_0x2ef206[_0x1d5101(0xf1)]((_0x2ce095,_0x155d50)=>({'msg':_0x2ce095,'score':scoreMessage(_0x2ce095,_0x155d50,_0x2ef206[_0x1d5101(0x107)]),'tokens':estimateTokens(messageText(_0x2ce095))})),_0x3a43aa=_0x1499db[_0x1d5101(0xe8)]((_0x33cc2a,_0x1dbde3)=>_0x33cc2a+_0x1dbde3[_0x1d5101(0xec)],0x0),_0x482fac=_0xc0600e[_0x1d5101(0xe8)]((_0x235b83,_0x3536a2)=>_0x235b83+estimateTokens(messageText(_0x3536a2)),0x0),_0x3b6b2d=_0x4ec508[_0x1d5101(0xe8)]((_0x481c2e,_0x1d9aa6)=>_0x481c2e+estimateTokens(messageText(_0x1d9aa6)),0x0),_0x3b0e79=_0xc8c24e-_0x482fac-_0x3b6b2d;if(_0x3a43aa<=_0x3b0e79){let _0x12068c=0x0;const _0x1addab=_0x1499db[_0x1d5101(0xf1)](_0x3afadc=>{const _0x156383=_0x1d5101;if(_0x3afadc[_0x156383(0xec)]>0x1f4){const _0x5b9a90=summarizeMessage(_0x3afadc['msg']),_0x4df69d=estimateTokens(messageText(_0x5b9a90));if(_0x4df69d<_0x3afadc[_0x156383(0xec)])return _0x12068c+=_0x3afadc[_0x156383(0xec)]-_0x4df69d,_0x5b9a90;}return _0x3afadc[_0x156383(0x108)];});return{'messages':[..._0x4ec508,..._0x1addab,..._0xc0600e],'trimmedCount':0x0,'savedTokens':_0x12068c};}_0x1499db['sort']((_0x2f5dd3,_0x2ae274)=>_0x2ae274[_0x1d5101(0x106)]-_0x2f5dd3['score']);let _0x4c55fc=0x0,_0x33bd23=0x0,_0x5d61ac=0x0;const _0x53ecdf=[];for(const _0x3ff356 of _0x1499db){if(_0x4c55fc+_0x3ff356['tokens']<=_0x3b0e79){if(_0x3ff356[_0x1d5101(0xec)]>0x3e8){const _0x2822d2=summarizeMessage(_0x3ff356['msg']),_0x2e6a04=estimateTokens(messageText(_0x2822d2));_0x5d61ac+=_0x3ff356[_0x1d5101(0xec)]-_0x2e6a04,_0x4c55fc+=_0x2e6a04,_0x53ecdf['push']({'msg':_0x2822d2,'originalIndex':_0x2ef206[_0x1d5101(0xf3)](_0x3ff356[_0x1d5101(0x108)])});}else _0x4c55fc+=_0x3ff356[_0x1d5101(0xec)],_0x53ecdf['push']({'msg':_0x3ff356[_0x1d5101(0x108)],'originalIndex':_0x2ef206['indexOf'](_0x3ff356[_0x1d5101(0x108)])});}else _0x33bd23++,_0x5d61ac+=_0x3ff356[_0x1d5101(0xec)];}_0x53ecdf[_0x1d5101(0xe7)]((_0x10a511,_0x51fe4e)=>_0x10a511['originalIndex']-_0x51fe4e[_0x1d5101(0xee)]);const _0x2bac10=[..._0x4ec508,..._0x53ecdf[_0x1d5101(0xf1)](_0x1a903a=>_0x1a903a['msg']),..._0xc0600e];return{'messages':_0x2bac10,'trimmedCount':_0x33bd23,'savedTokens':_0x5d61ac};}
1
+ "use strict";
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
+ }