@nxuss/lemma 0.7.9 → 0.8.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 +31 -5
- package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/cjs/cli/lemma-proxy.js +53 -7
- package/dist/cjs/cli/lemma-proxy.js.map +1 -1
- package/dist/cjs/mcp/index.js +1 -0
- package/dist/cjs/mcp/index.js.map +1 -1
- package/dist/cjs/mcp/prompts.d.ts +1 -0
- package/dist/cjs/mcp/prompts.d.ts.map +1 -1
- package/dist/cjs/mcp/prompts.js +58 -1
- package/dist/cjs/mcp/prompts.js.map +1 -1
- package/dist/cjs/mcp/resources.d.ts.map +1 -1
- package/dist/cjs/mcp/resources.js +3 -2
- package/dist/cjs/mcp/resources.js.map +1 -1
- package/dist/cjs/mcp/tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools.js +288 -10
- package/dist/cjs/mcp/tools.js.map +1 -1
- package/dist/cjs/mcp/utils.d.ts.map +1 -1
- package/dist/cjs/mcp/utils.js +2 -2
- package/dist/cjs/mcp/utils.js.map +1 -1
- package/dist/cjs/utils/reportSavings.d.ts.map +1 -1
- package/dist/cjs/utils/reportSavings.js +2 -2
- package/dist/cjs/utils/reportSavings.js.map +1 -1
- package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/esm/cli/lemma-proxy.js +53 -7
- package/dist/esm/cli/lemma-proxy.js.map +1 -1
- package/dist/esm/mcp/index.js +2 -1
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/mcp/prompts.d.ts +1 -0
- package/dist/esm/mcp/prompts.d.ts.map +1 -1
- package/dist/esm/mcp/prompts.js +57 -0
- package/dist/esm/mcp/prompts.js.map +1 -1
- package/dist/esm/mcp/resources.d.ts.map +1 -1
- package/dist/esm/mcp/resources.js +3 -2
- package/dist/esm/mcp/resources.js.map +1 -1
- package/dist/esm/mcp/tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools.js +288 -10
- package/dist/esm/mcp/tools.js.map +1 -1
- package/dist/esm/mcp/utils.d.ts.map +1 -1
- package/dist/esm/mcp/utils.js +2 -2
- package/dist/esm/mcp/utils.js.map +1 -1
- package/dist/esm/utils/reportSavings.d.ts.map +1 -1
- package/dist/esm/utils/reportSavings.js +2 -2
- package/dist/esm/utils/reportSavings.js.map +1 -1
- package/package.json +1 -1
package/dist/esm/mcp/prompts.js
CHANGED
|
@@ -47,6 +47,44 @@ You never need to manually sanitize file content.
|
|
|
47
47
|
- \`lemma://stats/usage\` — token savings report.
|
|
48
48
|
|
|
49
49
|
Remember: the user hired YOU to be autonomous. Act like it.`;
|
|
50
|
+
export const LEMMA_TURBOMODE_PROMPT = `You are operating in LEMMA TURBOMODE. Your goal: multiply the user's LLM membership 50x by spending 50x fewer tokens per task. Every token counts. Every cache hit is a membership extension.
|
|
51
|
+
|
|
52
|
+
## MANDATORY TURBOMODE RULES — VIOLATE THESE AND YOU WASTE THE USER'S MONEY
|
|
53
|
+
|
|
54
|
+
### 0. Before ANYTHING → check token_budget
|
|
55
|
+
Every 5 turns, call \`token_budget\` to check your consumption. If multiplier drops below 10x, optimize harder.
|
|
56
|
+
|
|
57
|
+
### 1. Before sending ANY code → call turbosqueeze
|
|
58
|
+
BEFORE including ANY code block in your response, run it through \`turbosqueeze\` first. Strip comments, collapse whitespace, remove imports. A 500-line file becomes 50 lines. This is your #1 token saver.
|
|
59
|
+
|
|
60
|
+
### 2. Before reasoning → call smarter_cache (threshold 0.75)
|
|
61
|
+
NEVER reason from scratch. Call \`smarter_cache\` with the user's exact question. If similarity >= 75%, return the cached answer INSTANTLY. Zero cloud tokens spent. Only reason if you get a MISS.
|
|
62
|
+
|
|
63
|
+
### 3. Before every new turn → call compress_context
|
|
64
|
+
At the start of any extended interaction, call \`compress_context\` on the full message history. Keep only the last 3 turns intact. Summarize everything before that into 2 sentences. This keeps your context window lean.
|
|
65
|
+
|
|
66
|
+
### 4. Before reading files → call get_ast_hologram
|
|
67
|
+
NEVER read files blindly. Always call \`get_ast_hologram\` first to locate the exact symbols you need. Then read only those specific files. Each unnecessary file read wastes 1000+ tokens.
|
|
68
|
+
|
|
69
|
+
### 5. After every solution → call store_memory automatically
|
|
70
|
+
Every bug fix, feature, or answer MUST be stored via \`store_memory\`. This creates a permanent cache hit for future sessions. The first time costs tokens; every time after is FREE.
|
|
71
|
+
|
|
72
|
+
### 6. Answer concisely — no fluff
|
|
73
|
+
- No "Sure, I can help you with that" — just do it.
|
|
74
|
+
- No explanation of what you did — unless asked.
|
|
75
|
+
- No markdown formatting in internal responses.
|
|
76
|
+
- No repeating the user's question back to them.
|
|
77
|
+
|
|
78
|
+
### 7. Use batch_tool_calls aggressively
|
|
79
|
+
Any set of independent operations (read 3 files, search 2 patterns, check cache for 2 questions) — use \`batch_tool_calls\` to run them in parallel. Single round-trip > multiple sequential calls.
|
|
80
|
+
|
|
81
|
+
## TURBOMODE SCORING
|
|
82
|
+
- Cache HIT = perfect score (0 tokens spent)
|
|
83
|
+
- Cache MISS + compress = good score (< 100 tokens spent on overhead)
|
|
84
|
+
- Reasoning from scratch = bad score (only when absolutely necessary)
|
|
85
|
+
- Reading full files without hologram = FAIL (wasteful)
|
|
86
|
+
|
|
87
|
+
Remember: this user has a deadline. Every token you save is time and money. Make every token count.`;
|
|
50
88
|
export function setupPromptsHandlers(server) {
|
|
51
89
|
server.setRequestHandler(ListPromptsRequestSchema, async () => {
|
|
52
90
|
return {
|
|
@@ -56,6 +94,11 @@ export function setupPromptsHandlers(server) {
|
|
|
56
94
|
description: "Lemma Autopilot: mandatory behavioral instructions for the AI assistant. Load this prompt to make all Lemma tools fire automatically with zero user friction.",
|
|
57
95
|
arguments: [],
|
|
58
96
|
},
|
|
97
|
+
{
|
|
98
|
+
name: "lemma-turbomode",
|
|
99
|
+
description: "⚠️ LEMMA TURBOMODE: Extreme token optimization. Load this prompt to multiply your LLM membership 50x by aggressively compressing prompts, caching everything, and minimizing every token spent. Use for long/deadline-driven projects.",
|
|
100
|
+
arguments: [],
|
|
101
|
+
},
|
|
59
102
|
],
|
|
60
103
|
};
|
|
61
104
|
});
|
|
@@ -74,6 +117,20 @@ export function setupPromptsHandlers(server) {
|
|
|
74
117
|
],
|
|
75
118
|
};
|
|
76
119
|
}
|
|
120
|
+
if (request.params.name === "lemma-turbomode") {
|
|
121
|
+
return {
|
|
122
|
+
description: "Lemma TurboMode — Extreme Token Optimization",
|
|
123
|
+
messages: [
|
|
124
|
+
{
|
|
125
|
+
role: "user",
|
|
126
|
+
content: {
|
|
127
|
+
type: "text",
|
|
128
|
+
text: LEMMA_TURBOMODE_PROMPT,
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
};
|
|
133
|
+
}
|
|
77
134
|
throw new Error(`Unknown prompt: ${request.params.name}`);
|
|
78
135
|
});
|
|
79
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/mcp/prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAEtG,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4DA+CyB,CAAC;AAE7D,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QAC5D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,iBAAiB;oBACvB,WAAW,EAAE,+JAA+J;oBAC5K,SAAS,EAAE,EAAE;iBACd;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACjE,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC9C,OAAO;gBACL,WAAW,EAAE,qCAAqC;gBAClD,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,mBAAmB;yBAC1B;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/mcp/prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAEtG,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4DA+CyB,CAAC;AAE7D,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oGAqC8D,CAAC;AAErG,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QAC5D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,iBAAiB;oBACvB,WAAW,EAAE,+JAA+J;oBAC5K,SAAS,EAAE,EAAE;iBACd;gBACD;oBACE,IAAI,EAAE,iBAAiB;oBACvB,WAAW,EAAE,wOAAwO;oBACrP,SAAS,EAAE,EAAE;iBACd;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACjE,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC9C,OAAO;gBACL,WAAW,EAAE,qCAAqC;gBAClD,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,mBAAmB;yBAC1B;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC9C,OAAO;gBACL,WAAW,EAAE,8CAA8C;gBAC3D,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,sBAAsB;yBAC7B;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA2D3D"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ListResourcesRequestSchema, ReadResourceRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
import path from "path";
|
|
4
|
+
import os from "os";
|
|
4
5
|
import axios from "axios";
|
|
5
6
|
import { getProxyPort, logError } from "./utils";
|
|
6
7
|
export function setupResourcesHandlers(server) {
|
|
@@ -121,7 +122,7 @@ async function handleProjectContext(uri) {
|
|
|
121
122
|
let memoryCount = 0;
|
|
122
123
|
let monthlyTokens = 'N/A';
|
|
123
124
|
try {
|
|
124
|
-
const statsFile = path.join(
|
|
125
|
+
const statsFile = path.join(os.homedir(), '.lemma-cache/stats.json');
|
|
125
126
|
const stats = JSON.parse(fs.readFileSync(statsFile, 'utf8'));
|
|
126
127
|
monthlyTokens = String(stats.monthlyTokens || stats.totalTokens || 'N/A');
|
|
127
128
|
}
|
|
@@ -148,7 +149,7 @@ async function handleProjectContext(uri) {
|
|
|
148
149
|
};
|
|
149
150
|
}
|
|
150
151
|
async function handleStatsUsage(uri) {
|
|
151
|
-
const statsFile = path.join(
|
|
152
|
+
const statsFile = path.join(os.homedir(), ".lemma-cache/stats.json");
|
|
152
153
|
try {
|
|
153
154
|
const stats = JSON.parse(fs.readFileSync(statsFile, "utf8"));
|
|
154
155
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/mcp/resources.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/mcp/resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC3G,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,MAAM,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QAC9D,OAAO;YACL,SAAS,EAAE;gBACT;oBACE,GAAG,EAAE,yBAAyB;oBAC9B,IAAI,EAAE,oBAAoB;oBAC1B,WAAW,EAAE,kFAAkF;oBAC/F,QAAQ,EAAE,eAAe;iBAC1B;gBACD;oBACE,GAAG,EAAE,qBAAqB;oBAC1B,IAAI,EAAE,0BAA0B;oBAChC,WAAW,EAAE,qEAAqE;oBAClF,QAAQ,EAAE,kBAAkB;iBAC7B;gBACD;oBACE,GAAG,EAAE,yBAAyB;oBAC9B,IAAI,EAAE,uBAAuB;oBAC7B,WAAW,EAAE,2FAA2F;oBACxG,QAAQ,EAAE,eAAe;iBAC1B;gBACD;oBACE,GAAG,EAAE,4BAA4B;oBACjC,IAAI,EAAE,uCAAuC;oBAC7C,WAAW,EAAE,oHAAoH;oBACjI,QAAQ,EAAE,eAAe;iBAC1B;gBACD;oBACE,GAAG,EAAE,6BAA6B;oBAClC,IAAI,EAAE,wCAAwC;oBAC9C,WAAW,EAAE,4HAA4H;oBACzI,QAAQ,EAAE,eAAe;iBAC1B;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACpE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAE/B,IAAI,GAAG,KAAK,yBAAyB,EAAE,CAAC;YACtC,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,GAAG,KAAK,qBAAqB,EAAE,CAAC;YAClC,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,GAAG,KAAK,yBAAyB,EAAE,CAAC;YACtC,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,GAAG,KAAK,4BAA4B,EAAE,CAAC;YACzC,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,GAAG,KAAK,6BAA6B,EAAE,CAAC;YAC1C,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,GAAW;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO;YACL,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SAC9D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACnC,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG;oBACH,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,0EAA0E;iBACjF;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,GAAW;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACxF,WAAW,GAAG,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC;QACtC,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QAC7D,IAAI,IAAI,CAAC,KAAK;YAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,IAAI;YAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,GAAG;YAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,OAAO;YAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,cAAc,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,UAAU;YAAE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,IAAI,CAAC;QACH,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9D,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,IAAI,CAAC;QACH,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,IAAI,CAAC;QACH,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;QAClE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,yBAAyB,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QACjD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,MAAM,QAAQ,GAAG;QACf,KAAK,WAAW,EAAE;QAClB,EAAE;QACF,eAAe,WAAW,IAAI;QAC9B,mBAAmB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;QACxE,qBAAqB,WAAW,EAAE;QAClC,8BAA8B,aAAa,EAAE;QAC7C,EAAE;QACF,yDAAyD;KAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;QACL,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,GAAW;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,yBAAyB,CAAC,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,OAAO;YACL,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACxF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAC/B,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG;oBACH,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;iBACtE;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,GAAW;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,oBAAoB,IAAI,yBAAyB,CAAC,CAAC;QACpF,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG;oBACH,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,mDAAmD;iBACpF;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG;oBACH,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,mEAAmE,KAAK,CAAC,OAAO,2BAA2B;iBAClH;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,GAAW;IACjD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,oBAAoB,IAAI,uBAAuB,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAU,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QAErD,IAAI,QAAQ,GAAG,0DAA0D,CAAC;QAC1E,QAAQ,IAAI,qHAAqH,CAAC;QAElI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,IAAI,mHAAmH,CAAC;QAClI,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YACzC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBAC7B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;gBAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,gBAAgB,CAAC;gBAEtE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBAChG,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAE7C,QAAQ,IAAI,OAAO,GAAG,GAAG,CAAC,gBAAgB,IAAI,CAAC,EAAE,QAAQ,OAAO,KAAK,OAAO,KAAK,CAAC;gBAClF,QAAQ,IAAI,oCAAoC,YAAY,IAAI,UAAU,IAAI,CAAC;gBAE/E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,QAAQ,IAAI,oDAAoD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC;gBACjH,CAAC;gBAED,QAAQ,IAAI,yBAAyB,CAAC;gBACtC,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;oBAC9C,QAAQ,IAAI,SAAS,IAAI,CAAC,QAAQ,MAAM,CAAC;oBACzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACd,QAAQ,IAAI,oDAAoD,IAAI,CAAC,IAAI,gBAAgB,CAAC;oBAC5F,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,QAAQ,IAAI,WAAW,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC/D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,QAAQ,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QACvC,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG;oBACH,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,0DAA0D,KAAK,CAAC,OAAO,2BAA2B;iBACzG;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAqXnE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,IAAI,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAC1C,IAAI,CA2CN"}
|
package/dist/esm/mcp/tools.js
CHANGED
|
@@ -274,6 +274,57 @@ const toolDefinitions = [
|
|
|
274
274
|
required: ["calls"],
|
|
275
275
|
},
|
|
276
276
|
},
|
|
277
|
+
{
|
|
278
|
+
name: "turbosqueeze",
|
|
279
|
+
description: "COMPRIME prompts hasta 90%. Elimina comentarios, imports redundantes, whitespace excesivo, y compacta JSON. Usar ANTES de enviar código largo al LLM para maximizar ahorro de tokens.",
|
|
280
|
+
inputSchema: {
|
|
281
|
+
type: "object",
|
|
282
|
+
properties: {
|
|
283
|
+
text: { type: "string", description: "El texto/prompt a comprimir" },
|
|
284
|
+
stripComments: { type: "boolean", description: "Eliminar comentarios del código", default: true },
|
|
285
|
+
stripImports: { type: "boolean", description: "Eliminar imports/requires", default: true },
|
|
286
|
+
compactJson: { type: "boolean", description: "Compactar JSON a 1 línea", default: true },
|
|
287
|
+
},
|
|
288
|
+
required: ["text"],
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
name: "compress_context",
|
|
293
|
+
description: "Comprime el historial de conversación: resume turns antiguos vía Ollama, mantiene solo los últimos N intactos. Reduce contexto 70-80%. USAR antes de cada turno extendido.",
|
|
294
|
+
inputSchema: {
|
|
295
|
+
type: "object",
|
|
296
|
+
properties: {
|
|
297
|
+
messages: {
|
|
298
|
+
type: "array",
|
|
299
|
+
items: { type: "object" },
|
|
300
|
+
description: "Array de mensajes del historial con role + content",
|
|
301
|
+
},
|
|
302
|
+
keepRecent: { type: "number", description: "Número de turns recientes a mantener intactos", default: 3 },
|
|
303
|
+
},
|
|
304
|
+
required: ["messages"],
|
|
305
|
+
},
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
name: "smarter_cache",
|
|
309
|
+
description: "Cache predictivo con threshold bajo (75%). Busca en The Brain antes de cualquier razonamiento. Si hay hit >= 75%, devuelve respuesta instantánea sin gastar tokens en LLM.",
|
|
310
|
+
inputSchema: {
|
|
311
|
+
type: "object",
|
|
312
|
+
properties: {
|
|
313
|
+
query: { type: "string", description: "La pregunta o task description" },
|
|
314
|
+
context: { type: "string", description: "Contexto adicional opcional" },
|
|
315
|
+
threshold: { type: "number", description: "Threshold de similitud (0.0-1.0, default: 0.75)", default: 0.75 },
|
|
316
|
+
},
|
|
317
|
+
required: ["query"],
|
|
318
|
+
},
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
name: "token_budget",
|
|
322
|
+
description: "Muestra el dashboard de consumo: multiplicador actual de membresía, tokens ahorrados, tools usadas, y recomendaciones para optimizar más. Consultar periódicamente para auto-regular consumo.",
|
|
323
|
+
inputSchema: {
|
|
324
|
+
type: "object",
|
|
325
|
+
properties: {},
|
|
326
|
+
},
|
|
327
|
+
},
|
|
277
328
|
];
|
|
278
329
|
const toolHandlers = {
|
|
279
330
|
scrub_privacy: handleScrubPrivacy,
|
|
@@ -297,6 +348,10 @@ const toolHandlers = {
|
|
|
297
348
|
prune_conversation_history: handlePruneConversationHistory,
|
|
298
349
|
diff_only: handleDiffOnly,
|
|
299
350
|
batch_tool_calls: handleBatchToolCalls,
|
|
351
|
+
turbosqueeze: handleTurboSqueeze,
|
|
352
|
+
compress_context: handleCompressContext,
|
|
353
|
+
smarter_cache: handleSmarterCache,
|
|
354
|
+
token_budget: handleTokenBudget,
|
|
300
355
|
};
|
|
301
356
|
export function setupToolsHandlers(server, onToolCall) {
|
|
302
357
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
@@ -864,7 +919,7 @@ async function handleValidatePatchSandbox(args) {
|
|
|
864
919
|
try {
|
|
865
920
|
fs.mkdirSync(sandboxDir, { recursive: true });
|
|
866
921
|
fs.writeFileSync(sandboxFile, patchedContent, "utf8");
|
|
867
|
-
// Step 1: Try tsc --noEmit validation
|
|
922
|
+
// Step 1: Try tsc --noEmit validation on the sandbox file only
|
|
868
923
|
const tsconfigPath = path.join(workspaceRoot, "tsconfig.json");
|
|
869
924
|
let tscResult = {
|
|
870
925
|
success: true,
|
|
@@ -872,17 +927,28 @@ async function handleValidatePatchSandbox(args) {
|
|
|
872
927
|
};
|
|
873
928
|
if (fs.existsSync(tsconfigPath) && filePath.match(/\.tsx?$/)) {
|
|
874
929
|
try {
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
930
|
+
// Create a minimal tsconfig in the sandbox that includes only the patched file
|
|
931
|
+
const sandboxTsconfig = {
|
|
932
|
+
compilerOptions: {
|
|
933
|
+
target: "ESNext",
|
|
934
|
+
module: "ESNext",
|
|
935
|
+
moduleResolution: "node",
|
|
936
|
+
strict: true,
|
|
937
|
+
noEmit: true,
|
|
938
|
+
skipLibCheck: true,
|
|
939
|
+
esModuleInterop: true,
|
|
940
|
+
allowJs: true,
|
|
941
|
+
jsx: "react-jsx",
|
|
942
|
+
},
|
|
943
|
+
include: [path.basename(filePath)],
|
|
944
|
+
};
|
|
945
|
+
const sandboxTsconfigPath = path.join(sandboxDir, "tsconfig.json");
|
|
946
|
+
fs.writeFileSync(sandboxTsconfigPath, JSON.stringify(sandboxTsconfig, null, 2));
|
|
947
|
+
const tscOut = execSync(`npx tsc --noEmit --project "${sandboxTsconfigPath}" 2>&1 | head -40 || true`, { timeout: 20000, encoding: "utf8", cwd: sandboxDir });
|
|
883
948
|
const relevantErrors = tscOut
|
|
884
949
|
.split("\n")
|
|
885
|
-
.filter((l) => l.includes(
|
|
950
|
+
.filter((l) => l.includes("error TS"))
|
|
951
|
+
.filter(Boolean);
|
|
886
952
|
tscResult = {
|
|
887
953
|
success: relevantErrors.length === 0,
|
|
888
954
|
output: relevantErrors.length > 0
|
|
@@ -1150,4 +1216,216 @@ async function handleBatchToolCalls(args) {
|
|
|
1150
1216
|
content: [{ type: "text", text: JSON.stringify(results, null, 2) }],
|
|
1151
1217
|
};
|
|
1152
1218
|
}
|
|
1219
|
+
// ── TurboSqueeze ─────────────────────────────────────────────────
|
|
1220
|
+
async function handleTurboSqueeze(args) {
|
|
1221
|
+
const text = args?.text;
|
|
1222
|
+
const stripComments = args?.stripComments !== false;
|
|
1223
|
+
const stripImports = args?.stripImports !== false;
|
|
1224
|
+
const compactJson = args?.compactJson !== false;
|
|
1225
|
+
if (!text)
|
|
1226
|
+
throw new Error("text is required");
|
|
1227
|
+
let squeezed = text;
|
|
1228
|
+
// Strip multi-line comments
|
|
1229
|
+
if (stripComments) {
|
|
1230
|
+
squeezed = squeezed.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
1231
|
+
squeezed = squeezed.replace(/\/\/.*$/gm, '');
|
|
1232
|
+
}
|
|
1233
|
+
// Remove empty lines and trim whitespace
|
|
1234
|
+
squeezed = squeezed.replace(/^\s*[\r\n]/gm, '\n');
|
|
1235
|
+
squeezed = squeezed.replace(/^[ \t]+/gm, ' ');
|
|
1236
|
+
squeezed = squeezed.replace(/[ \t]+$/gm, '');
|
|
1237
|
+
// Strip imports
|
|
1238
|
+
if (stripImports) {
|
|
1239
|
+
squeezed = squeezed.replace(/^import\s+[\s\S]*?from\s+['"][\w@\/\.-]+['"];?\s*$/gm, '');
|
|
1240
|
+
squeezed = squeezed.replace(/^import\s+['"][\w@\/\.-]+['"];?\s*$/gm, '');
|
|
1241
|
+
squeezed = squeezed.replace(/^const\s+\w+\s*=\s*require\(['"][\w@\/\.-]+['"]\);?\s*$/gm, '');
|
|
1242
|
+
squeezed = squeezed.replace(/^require\(['"][\w@\/\.-]+['"]\);?\s*$/gm, '');
|
|
1243
|
+
}
|
|
1244
|
+
// Compact JSON
|
|
1245
|
+
if (compactJson) {
|
|
1246
|
+
squeezed = squeezed.replace(/"\s*:\s*/g, '":');
|
|
1247
|
+
squeezed = squeezed.replace(/,\s*"/g, ',"');
|
|
1248
|
+
squeezed = squeezed.replace(/\[\s+/g, '[');
|
|
1249
|
+
squeezed = squeezed.replace(/\s+\]/g, ']');
|
|
1250
|
+
squeezed = squeezed.replace(/\{\s+/g, '{');
|
|
1251
|
+
squeezed = squeezed.replace(/\s+\}/g, '}');
|
|
1252
|
+
}
|
|
1253
|
+
// Compact consecutive blank lines
|
|
1254
|
+
squeezed = squeezed.replace(/\n{3,}/g, '\n\n').trim();
|
|
1255
|
+
const ratio = text.length > 0 ? ((1 - squeezed.length / text.length) * 100).toFixed(1) : "0";
|
|
1256
|
+
const saved = Math.max(0, text.length - squeezed.length);
|
|
1257
|
+
try {
|
|
1258
|
+
const { reportSavings } = await import("../utils/reportSavings");
|
|
1259
|
+
reportSavings({ source: "contextSqueeze", charsBefore: text.length, charsAfter: squeezed.length, toolName: "turbosqueeze" });
|
|
1260
|
+
}
|
|
1261
|
+
catch { }
|
|
1262
|
+
return {
|
|
1263
|
+
content: [{
|
|
1264
|
+
type: "text",
|
|
1265
|
+
text: `[TurboSqueeze: ${ratio}% reduction (${saved} chars / ~${Math.floor(saved / 4)} tokens saved)]\n\n${squeezed}`,
|
|
1266
|
+
}],
|
|
1267
|
+
};
|
|
1268
|
+
}
|
|
1269
|
+
// ── Compress Context ─────────────────────────────────────────────
|
|
1270
|
+
async function handleCompressContext(args) {
|
|
1271
|
+
const messages = args?.messages;
|
|
1272
|
+
const keepRecent = args?.keepRecent || 3;
|
|
1273
|
+
if (!messages || !Array.isArray(messages))
|
|
1274
|
+
throw new Error("messages array is required");
|
|
1275
|
+
if (messages.length <= keepRecent + 1) {
|
|
1276
|
+
return {
|
|
1277
|
+
content: [{
|
|
1278
|
+
type: "text",
|
|
1279
|
+
text: JSON.stringify({ messages, tokensSavedEstimate: 0, note: "Historial muy corto — no se necesita compresión." }, null, 2),
|
|
1280
|
+
}],
|
|
1281
|
+
};
|
|
1282
|
+
}
|
|
1283
|
+
const recent = messages.slice(-keepRecent);
|
|
1284
|
+
const old = messages.slice(0, -keepRecent);
|
|
1285
|
+
let summary = "";
|
|
1286
|
+
let summaryMethod = "trim";
|
|
1287
|
+
try {
|
|
1288
|
+
const host = process.env.OLLAMA_HOST || 'http://localhost:11434';
|
|
1289
|
+
const model = process.env.OLLAMA_GEN_MODEL || 'llama3';
|
|
1290
|
+
const summaryPrompt = `Summarize the following conversation history into 2-3 concise sentences. Capture ONLY: key decisions made, code patterns established, unresolved issues. Be extremely brief.\n\n${JSON.stringify(old.map((m) => ({ role: m.role, content: typeof m.content === 'string' ? m.content.substring(0, 400) : '...' })))}`;
|
|
1291
|
+
const resp = await axios.post(`${host}/api/generate`, {
|
|
1292
|
+
model, prompt: summaryPrompt, stream: false,
|
|
1293
|
+
options: { temperature: 0.1, num_predict: 300 },
|
|
1294
|
+
});
|
|
1295
|
+
summary = resp.data.response.trim();
|
|
1296
|
+
summaryMethod = "ollama";
|
|
1297
|
+
}
|
|
1298
|
+
catch {
|
|
1299
|
+
summary = old.map((m, i) => `[Turn ${i + 1} / ${m.role}]: ${typeof m.content === 'string' ? m.content.substring(0, 150).replace(/\n/g, ' ') : '...'}`).join('\n').substring(0, 2000);
|
|
1300
|
+
summaryMethod = "truncate";
|
|
1301
|
+
}
|
|
1302
|
+
const oldLength = JSON.stringify(old).length;
|
|
1303
|
+
const summaryLength = summary.length;
|
|
1304
|
+
const tokensSaved = Math.floor(Math.max(0, oldLength - summaryLength) / 4);
|
|
1305
|
+
const compressed = [
|
|
1306
|
+
{ role: "user", content: `[Historial comprimido vía ${summaryMethod} — turns anteriores resumidos a ~${Math.floor(summaryLength / 4)} tokens]:\n${summary}` },
|
|
1307
|
+
...recent,
|
|
1308
|
+
];
|
|
1309
|
+
try {
|
|
1310
|
+
const { reportSavings } = await import("../utils/reportSavings");
|
|
1311
|
+
reportSavings({ source: "historyPrune", tokens: tokensSaved, toolName: "compress_context" });
|
|
1312
|
+
}
|
|
1313
|
+
catch { }
|
|
1314
|
+
return {
|
|
1315
|
+
content: [{
|
|
1316
|
+
type: "text",
|
|
1317
|
+
text: JSON.stringify({ messages: compressed, tokensSavedEstimate: tokensSaved, summaryMethod }, null, 2),
|
|
1318
|
+
}],
|
|
1319
|
+
};
|
|
1320
|
+
}
|
|
1321
|
+
// ── Smarter Cache ────────────────────────────────────────────────
|
|
1322
|
+
async function handleSmarterCache(args) {
|
|
1323
|
+
const query = args?.query;
|
|
1324
|
+
const context = args?.context || "";
|
|
1325
|
+
const threshold = typeof args?.threshold === "number" ? args.threshold : 0.75;
|
|
1326
|
+
if (!query)
|
|
1327
|
+
throw new Error("query is required");
|
|
1328
|
+
const port = getProxyPort();
|
|
1329
|
+
const fullQuery = context ? `${query}\n\nContext: ${context}` : query;
|
|
1330
|
+
try {
|
|
1331
|
+
const searchRes = await axios.get(`http://localhost:${port}/api/search?q=${encodeURIComponent(fullQuery)}&limit=5`);
|
|
1332
|
+
const results = searchRes.data.results || [];
|
|
1333
|
+
const topHit = results[0];
|
|
1334
|
+
if (topHit && topHit.similarity >= threshold) {
|
|
1335
|
+
const responseText = typeof topHit.response === "string"
|
|
1336
|
+
? topHit.response
|
|
1337
|
+
: topHit.response?.choices?.[0]?.message?.content || JSON.stringify(topHit.response, null, 2);
|
|
1338
|
+
const tokensSaved = Math.floor(responseText.length / 4);
|
|
1339
|
+
try {
|
|
1340
|
+
const { reportSavings } = await import("../utils/reportSavings");
|
|
1341
|
+
reportSavings({ source: "cache", tokens: tokensSaved, toolName: "smarter_cache", query: query.substring(0, 100) });
|
|
1342
|
+
}
|
|
1343
|
+
catch { }
|
|
1344
|
+
return {
|
|
1345
|
+
content: [{
|
|
1346
|
+
type: "text",
|
|
1347
|
+
text: JSON.stringify({
|
|
1348
|
+
hit: true,
|
|
1349
|
+
similarity: topHit.similarity,
|
|
1350
|
+
threshold,
|
|
1351
|
+
answer: responseText,
|
|
1352
|
+
source: "lemma-brain",
|
|
1353
|
+
tokensSaved,
|
|
1354
|
+
tokensSavedFormatted: `~${tokensSaved.toLocaleString()} tokens`,
|
|
1355
|
+
}, null, 2),
|
|
1356
|
+
}],
|
|
1357
|
+
};
|
|
1358
|
+
}
|
|
1359
|
+
return {
|
|
1360
|
+
content: [{
|
|
1361
|
+
type: "text",
|
|
1362
|
+
text: JSON.stringify({
|
|
1363
|
+
hit: false,
|
|
1364
|
+
similarity: topHit?.similarity || 0,
|
|
1365
|
+
threshold,
|
|
1366
|
+
answer: null,
|
|
1367
|
+
source: "llm-call-required",
|
|
1368
|
+
hint: "Después de resolver, llama store_memory para cachear y no gastar tokens en esto otra vez.",
|
|
1369
|
+
}, null, 2),
|
|
1370
|
+
}],
|
|
1371
|
+
};
|
|
1372
|
+
}
|
|
1373
|
+
catch (e) {
|
|
1374
|
+
logError("smarter_cache", e);
|
|
1375
|
+
return {
|
|
1376
|
+
content: [{
|
|
1377
|
+
type: "text",
|
|
1378
|
+
text: JSON.stringify({
|
|
1379
|
+
hit: false,
|
|
1380
|
+
error: e.message,
|
|
1381
|
+
source: "cache-unavailable",
|
|
1382
|
+
hint: "Lemma Proxy no está corriendo. El LLM funcionará normalmente sin cache.",
|
|
1383
|
+
}, null, 2),
|
|
1384
|
+
}],
|
|
1385
|
+
};
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1388
|
+
// ── Token Budget ─────────────────────────────────────────────────
|
|
1389
|
+
async function handleTokenBudget(_args) {
|
|
1390
|
+
const statsFile = path.join(os.homedir(), '.lemma-cache/stats.json');
|
|
1391
|
+
const port = getProxyPort();
|
|
1392
|
+
let stats = {};
|
|
1393
|
+
try {
|
|
1394
|
+
stats = JSON.parse(fs.readFileSync(statsFile, 'utf8'));
|
|
1395
|
+
}
|
|
1396
|
+
catch { }
|
|
1397
|
+
let ledger = [];
|
|
1398
|
+
try {
|
|
1399
|
+
const resp = await axios.get(`http://localhost:${port}/api/ledger`);
|
|
1400
|
+
ledger = resp.data.events || [];
|
|
1401
|
+
}
|
|
1402
|
+
catch { }
|
|
1403
|
+
const totalTokensSaved = stats.totalTokens || ledger.reduce((sum, e) => sum + (e.tokensImpact || 0), 0);
|
|
1404
|
+
const monthlyTokens = stats.monthlyTokens || stats.totalTokens || 100000;
|
|
1405
|
+
const multiplier = monthlyTokens > 0 ? ((monthlyTokens + totalTokensSaved) / monthlyTokens).toFixed(1) : "N/A";
|
|
1406
|
+
const toolCallCount = ledger.length || stats.toolCalls || 0;
|
|
1407
|
+
return {
|
|
1408
|
+
content: [{
|
|
1409
|
+
type: "text",
|
|
1410
|
+
text: JSON.stringify({
|
|
1411
|
+
membershipMultiplier: `${multiplier}x`,
|
|
1412
|
+
totalTokensSaved: totalTokensSaved.toLocaleString(),
|
|
1413
|
+
estimatedTokensPerMonth: monthlyTokens.toLocaleString(),
|
|
1414
|
+
effectiveBudget: (monthlyTokens + totalTokensSaved).toLocaleString(),
|
|
1415
|
+
toolCallsOptimized: toolCallCount,
|
|
1416
|
+
activeStrategies: {
|
|
1417
|
+
turboSqueeze: true,
|
|
1418
|
+
contextCompression: true,
|
|
1419
|
+
semanticCaching: true,
|
|
1420
|
+
historyPruning: true,
|
|
1421
|
+
astNavigation: true,
|
|
1422
|
+
privacyScrubbing: true,
|
|
1423
|
+
},
|
|
1424
|
+
recommendations: toolCallCount === 0
|
|
1425
|
+
? ["No se han usado tools de Lemma todavía. Asegúrate de que el agente esté usando el prompt lemma-turbomode."]
|
|
1426
|
+
: ["Sigue usando turbosqueeze antes de cada code block grande.", "Usa smarter_cache antes de razonar."],
|
|
1427
|
+
}, null, 2),
|
|
1428
|
+
}],
|
|
1429
|
+
};
|
|
1430
|
+
}
|
|
1153
1431
|
//# sourceMappingURL=tools.js.map
|