blun-king-cli 9.1.158 → 9.1.160

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/LIESMICH.txt CHANGED
@@ -155,6 +155,10 @@ Ab BLUN King 9.1.157 werden geeignete erfolgreiche, rein textbasierte Werkzeugau
155
155
 
156
156
  Ab BLUN King 9.1.158 werden reine Statusnachrichten, die unmittelbar auf eine abgeschlossene Telegram-Antwort folgen, außerhalb der neuesten 20 Nachrichten in der Modellprojektion durch einen kurzen Vermerk ersetzt. Der versendete Antwortaufruf und sein Ergebnis, aktuelle Nachrichten, Zusammenfassungen nach anderen Werkzeugen, gemischte Inhalte, Rohverlauf und Exporte bleiben unverändert. In Fredriks stabil vermessenem Sitzungsschnappschuss werden sechs historische Statusnachrichten um 1.837 Zeichen verkleinert. Das spart rund 460 geschätzte Eingabetoken pro gleich aufgebauter Anfrage.
157
157
 
158
+ Ab BLUN King 9.1.159 werden gültige JSON-Argumente abgeschlossener Werkzeugaufrufe außerhalb der neuesten 12 Nachrichten in der Modellprojektion durch einen kurzen Vermerk ersetzt. Das zugehörige Werkzeugergebnis, die neuesten 12 Nachrichten, nicht abgeschlossene Aufrufe, kleine oder ungültige Argumente, Rohverlauf und Exporte bleiben unverändert. In Fredriks stabil vermessenem Sitzungsschnappschuss werden drei Argumente abgeschlossener Werkzeugaufrufe von 2.849 auf 165 Zeichen verkleinert. Das spart 2.684 Zeichen beziehungsweise rund 671 geschätzte Eingabetoken pro gleich aufgebauter Anfrage.
159
+
160
+ Ab BLUN King 9.1.160 schützt die Modellprojektion nur noch die neuesten zwölf Nachrichten vollständig, bevor ältere erfolgreiche Werkzeugergebnisse, die ausschließlich Text enthalten, durch einen kurzen Abschlussvermerk ersetzt werden. Fehlerausgaben, Medien, gespeicherte Dateiverweise, die neuesten zwölf Nachrichten, Rohverlauf und Exporte bleiben unverändert. In Fredriks stabil vermessenem Sitzungsschnappschuss werden dadurch zwei weitere alte Werkzeugergebnisse verkleinert. Die Modellprojektion sinkt von 81.800 auf 78.402 Zeichen. Das spart weitere 3.398 Zeichen beziehungsweise rund 850 geschätzte Eingabetoken pro gleich aufgebauter Anfrage.
161
+
158
162
  Ab BLUN King 9.1.155 werden gespeicherte Verweise auf Nutzernachrichten wiederhergestellt, bevor Textprojektionen den Hash der ursprünglichen Nachricht verändern können. Bestehende Auslagerungen bleiben dadurch wirksam, statt unbemerkt auf die projizierte vollständige Nachricht zurückzufallen. Rohverlauf, wiederlesbare Dateiverweise, die neuesten 20 Nachrichten, Medien und Exporte bleiben unverändert. In Fredriks stabil vermessenem Schnappschuss sinkt die Modellprojektion von 105.810 auf 99.143 Zeichen. Das spart weitere 6.667 Zeichen beziehungsweise rund 1.667 geschätzte Eingabetoken pro gleich aufgebauter Anfrage.
159
163
 
160
164
  Ab BLUN King 9.1.154 werden adressierte Telegram-Kanalabschnitte außerhalb der neuesten 20 Nachrichten auf eine 500 statt 1.000 Zeichen lange Vorschau mit Anfang und Ende begrenzt. Vollständige Kanalmetadaten, Anfang und Ende des Nachrichteninhalts, die neuesten 20 Nachrichten, Anhänge, Rohverlauf und Exporte bleiben unverändert. In Fredriks stabil vermessenem Schnappschuss werden sieben zusätzliche historische adressierte Abschnitte verkleinert. Das spart 3.500 Zeichen beziehungsweise rund 875 geschätzte Token pro wiederholter Anfrage.
@@ -8,6 +8,11 @@ const ASSISTANT_MESSAGE_OFFLOAD_MARKER = '[Assistant message offloaded]';
8
8
  const ASSISTANT_TOOL_NARRATION_MIN_CHARS = 120;
9
9
  const ASSISTANT_TOOL_NARRATION_MARKER = '[Earlier completed tool-step narration compacted]';
10
10
  const ASSISTANT_POST_TELEGRAM_REPLY_MARKER = '[Earlier post-reply status compacted]';
11
+ const ASSISTANT_TOOL_ARGUMENT_KEEP_RECENT_MESSAGES = 12;
12
+ const ASSISTANT_TOOL_ARGUMENT_MIN_TOKENS = 100;
13
+ const ASSISTANT_TOOL_ARGUMENT_MARKER = JSON.stringify({
14
+ _blun_compacted: '[Old tool call arguments cleared]',
15
+ });
11
16
  const TELEGRAM_REPLY_TOOL_RE = /^mcp__[^\s]*telegram[^\s]*__reply$/iu;
12
17
 
13
18
  function shouldOffloadHistoricalAssistantMessage(options = {}) {
@@ -103,6 +108,48 @@ function compactHistoricalPostTelegramReplyNarration(messages) {
103
108
  return changed ? projected : messages;
104
109
  }
105
110
 
111
+ function compactHistoricalCompletedToolCallArguments(messages) {
112
+ if (!Array.isArray(messages) || messages.length === 0) return messages;
113
+
114
+ const completedToolCallIds = new Set(messages
115
+ .filter((message) => message?.role === 'tool' && message.toolCallId !== undefined)
116
+ .map((message) => message.toolCallId));
117
+ const recentStart = Math.max(
118
+ 0,
119
+ messages.length - ASSISTANT_TOOL_ARGUMENT_KEEP_RECENT_MESSAGES,
120
+ );
121
+ let changed = false;
122
+ const projected = messages.map((message, historyIndex) => {
123
+ if (
124
+ historyIndex >= recentStart
125
+ || message?.role !== 'assistant'
126
+ || !Array.isArray(message.toolCalls)
127
+ || message.toolCalls.length === 0
128
+ ) return message;
129
+
130
+ let toolCallsChanged = false;
131
+ const toolCalls = message.toolCalls.map((call) => {
132
+ if (
133
+ !completedToolCallIds.has(call?.id)
134
+ || typeof call?.arguments !== 'string'
135
+ || Math.ceil(call.arguments.length / 4) < ASSISTANT_TOOL_ARGUMENT_MIN_TOKENS
136
+ ) return call;
137
+ try {
138
+ JSON.parse(call.arguments);
139
+ } catch {
140
+ return call;
141
+ }
142
+ toolCallsChanged = true;
143
+ return { ...call, arguments: ASSISTANT_TOOL_ARGUMENT_MARKER };
144
+ });
145
+ if (!toolCallsChanged) return message;
146
+ changed = true;
147
+ return { ...message, toolCalls };
148
+ });
149
+
150
+ return changed ? projected : messages;
151
+ }
152
+
106
153
  module.exports = {
107
154
  ASSISTANT_MESSAGE_KEEP_RECENT_MESSAGES,
108
155
  ASSISTANT_MESSAGE_MAX_CHARS,
@@ -112,6 +159,10 @@ module.exports = {
112
159
  ASSISTANT_TOOL_NARRATION_MARKER,
113
160
  ASSISTANT_TOOL_NARRATION_MIN_CHARS,
114
161
  ASSISTANT_POST_TELEGRAM_REPLY_MARKER,
162
+ ASSISTANT_TOOL_ARGUMENT_KEEP_RECENT_MESSAGES,
163
+ ASSISTANT_TOOL_ARGUMENT_MARKER,
164
+ ASSISTANT_TOOL_ARGUMENT_MIN_TOKENS,
165
+ compactHistoricalCompletedToolCallArguments,
115
166
  compactHistoricalPostTelegramReplyNarration,
116
167
  createAssistantMessagePreview,
117
168
  shouldCompactHistoricalAssistantToolNarration,
@@ -10,7 +10,7 @@ const TOOL_RESULT_HISTORICAL_KEEP_RECENT_MESSAGES = 4;
10
10
  const TOOL_RESULT_HISTORICAL_MAX_CHARS = TOOL_RESULT_BATCH_MAX_CHARS;
11
11
  const TOOL_RESULT_HISTORICAL_MIN_ITEM_CHARS = 600;
12
12
  const TOOL_RESULT_HISTORICAL_REPLACEMENT_BUDGET_CHARS = 600;
13
- const TOOL_RESULT_SUCCESS_KEEP_RECENT_MESSAGES = 20;
13
+ const TOOL_RESULT_SUCCESS_KEEP_RECENT_MESSAGES = 12;
14
14
  const TOOL_RESULT_HISTORICAL_SUCCESS_MARKER = '[Old tool result content cleared]';
15
15
 
16
16
  function shouldOffloadToolResult(textLength) {
package/blun.mjs CHANGED
@@ -260750,7 +260750,7 @@ function renderPersistedAssistantMessage(text, outputPath) {
260750
260750
  createAssistantMessagePreview(text)
260751
260751
  ].join("\n");
260752
260752
  }
260753
- var ASSISTANT_MESSAGE_MAX_CHARS, ASSISTANT_MESSAGE_OFFLOAD_MARKER, ASSISTANT_TOOL_NARRATION_MARKER, shouldOffloadHistoricalAssistantMessage, shouldCompactHistoricalAssistantToolNarration, compactHistoricalPostTelegramReplyNarration, createAssistantMessagePreview;
260753
+ var ASSISTANT_MESSAGE_MAX_CHARS, ASSISTANT_MESSAGE_OFFLOAD_MARKER, ASSISTANT_TOOL_NARRATION_MARKER, shouldOffloadHistoricalAssistantMessage, shouldCompactHistoricalAssistantToolNarration, compactHistoricalPostTelegramReplyNarration, compactHistoricalCompletedToolCallArguments, createAssistantMessagePreview;
260754
260754
  var init_assistant_message_offload = __esmMin((() => {
260755
260755
  const policy = createRequire(import.meta.url)("./bin/assistant-message-offload-policy.cjs");
260756
260756
  ASSISTANT_MESSAGE_MAX_CHARS = policy.ASSISTANT_MESSAGE_MAX_CHARS;
@@ -260759,6 +260759,7 @@ var init_assistant_message_offload = __esmMin((() => {
260759
260759
  shouldOffloadHistoricalAssistantMessage = policy.shouldOffloadHistoricalAssistantMessage;
260760
260760
  shouldCompactHistoricalAssistantToolNarration = policy.shouldCompactHistoricalAssistantToolNarration;
260761
260761
  compactHistoricalPostTelegramReplyNarration = policy.compactHistoricalPostTelegramReplyNarration;
260762
+ compactHistoricalCompletedToolCallArguments = policy.compactHistoricalCompletedToolCallArguments;
260762
260763
  createAssistantMessagePreview = policy.createAssistantMessagePreview;
260763
260764
  }));
260764
260765
  var AssistantMessageOffload = class {
@@ -260844,7 +260845,8 @@ var AssistantMessageOffload = class {
260844
260845
  changed = true;
260845
260846
  return { ...message, content: replacement.content };
260846
260847
  });
260847
- return compactHistoricalPostTelegramReplyNarration(changed ? projected : messages);
260848
+ const narrationProjected = compactHistoricalPostTelegramReplyNarration(changed ? projected : messages);
260849
+ return compactHistoricalCompletedToolCallArguments(narrationProjected);
260848
260850
  }
260849
260851
  reset(history = this.agent.context?.history ?? []) {
260850
260852
  const activeHashes = new Set(history.map((message) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.158",
3
+ "version": "9.1.160",
4
4
  "description": "BLUN CLI - your own AI agent with a Telegram channel. Get it done. With BLUN.",
5
5
  "license": "MIT",
6
6
  "bin": {