blun-king-cli 9.1.133 → 9.1.134

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
@@ -125,6 +125,8 @@ Ab BLUN King 9.1.132 wird der schlanke Basissystemprompt nach der generierten In
125
125
 
126
126
  Ab BLUN King 9.1.133 werden die projektlokale und die gemeinsame `Mistake.md` nicht mehr als zwei getrennte Promptblöcke gesendet. King wählt aus beiden Quellen höchstens fünf relevante vollständige Einträge innerhalb eines gemeinsamen Budgets von 6.000 Zeichen aus. Die vollständigen Dateien, Writer, Archive, Register, der Rohverlauf und Exporte bleiben unverändert. Die Auswahl erfolgt lokal und deterministisch und benötigt keinen zusätzlichen Modell-, Embedding- oder Netzwerkaufruf. Mit Fredriks aktuellen Dateien sinkt die wiederholte Modellsicht um 12.917 bis 16.811 Zeichen, also um etwa 3.230 bis 4.203 geschätzte Token pro Anfrage.
127
127
 
128
+ Ab BLUN King 9.1.134 begrenzt die Modellprojektion nicht adressierte Telegram-Gruppennachrichten auf eine nachvollziehbare Vorschau von 2.000 Zeichen. Anfang und Ende bleiben erhalten, eine Markierung nennt die ursprüngliche Länge. Direkt an den Agenten gerichtete Nachrichten, die sichtbare Telegram-Historie, der Rohverlauf und Exporte bleiben vollständig. In Fredriks realem Verlauf betraf die Grenze 211 von 517 verschiedenen mitgelesenen Gruppenmeldungen und hätte 102.466 wiederholt übertragene Zeichen eingespart, also rund 25.617 geschätzte Token über die gemessenen Modellanfragen.
129
+
128
130
  Ab BLUN King 9.1.131 entfernt die Modellprojektion zwei ältere Regelkopien aus dem Systemprompt, sobald gleichwertige Regeln im Conduct-Abschnitt vorhanden sind. Betroffen sind ausschließlich die doppelten Hinweise zu Ehrlichkeit und Zugangsdaten; die vollständigen Conduct-Regeln und alle übrigen Prompt-Abschnitte bleiben unverändert. In der ausgelieferten Standardvorlage sinkt der wiederholt gesendete Prompt dadurch um 1.010 Zeichen, also um etwa 253 geschätzte Token pro Modellanfrage. Fehlt eines der Conduct-Gegenstücke, bleibt die entsprechende ältere Regel unverändert erhalten.
129
131
 
130
132
  Ab BLUN King 9.1.118 bleibt der Sitzungszeitstempel im Systemprompt während einer laufenden Sitzung unverändert. Das erneute Einlesen von Verzeichnisübersicht, AGENTS.md-Dateien, Zusatzverzeichnissen und Skillinformationen kann den Prompt weiterhin ändern, wenn sich die jeweiligen Quellen tatsächlich verändert haben. Bleiben diese Quellen gleich, entwertet die Aktualisierung nach einer Verdichtung den Präfix-Cache des Anbieters nicht mehr allein durch einen neuen Zeitstempel. In Fredriks gemessener Sitzung unterschieden sich die beiden letzten Systemprompts mit jeweils 68.631 Zeichen nur in der Zeitangabe, und zwar erst nach einem gemeinsamen Präfix von 27.111 Zeichen. Der geänderte Zeitstempel verhinderte damit die Wiederverwendung der übrigen 41.512 unveränderten Zeichen aus dem Präfix-Cache.
package/README.md CHANGED
@@ -131,6 +131,8 @@ Ab BLUN King 9.1.132 wird der schlanke Basissystemprompt nach der generierten In
131
131
 
132
132
  Ab BLUN King 9.1.133 werden die projektlokale und die gemeinsame `Mistake.md` nicht mehr als zwei getrennte Promptblöcke gesendet. King wählt aus beiden Quellen höchstens fünf relevante vollständige Einträge innerhalb eines gemeinsamen Budgets von 6.000 Zeichen aus. Die vollständigen Dateien, Writer, Archive, Register, der Rohverlauf und Exporte bleiben unverändert. Die Auswahl erfolgt lokal und deterministisch und benötigt keinen zusätzlichen Modell-, Embedding- oder Netzwerkaufruf. Mit Fredriks aktuellen Dateien sinkt die wiederholte Modellsicht um 12.917 bis 16.811 Zeichen, also um etwa 3.230 bis 4.203 geschätzte Token pro Anfrage.
133
133
 
134
+ Ab BLUN King 9.1.134 begrenzt die Modellprojektion nicht adressierte Telegram-Gruppennachrichten auf eine nachvollziehbare Vorschau von 2.000 Zeichen. Anfang und Ende bleiben erhalten, eine Markierung nennt die ursprüngliche Länge. Direkt an den Agenten gerichtete Nachrichten, die sichtbare Telegram-Historie, der Rohverlauf und Exporte bleiben vollständig. In Fredriks realem Verlauf betraf die Grenze 211 von 517 verschiedenen mitgelesenen Gruppenmeldungen und hätte 102.466 wiederholt übertragene Zeichen eingespart, also rund 25.617 geschätzte Token über die gemessenen Modellanfragen.
135
+
134
136
  Ab BLUN King 9.1.131 entfernt die Modellprojektion zwei ältere Regelkopien aus dem Systemprompt, sobald gleichwertige Regeln im Conduct-Abschnitt vorhanden sind. Betroffen sind ausschließlich die doppelten Hinweise zu Ehrlichkeit und Zugangsdaten; die vollständigen Conduct-Regeln und alle übrigen Prompt-Abschnitte bleiben unverändert. In der ausgelieferten Standardvorlage sinkt der wiederholt gesendete Prompt dadurch um 1.010 Zeichen, also um etwa 253 geschätzte Token pro Modellanfrage. Fehlt eines der Conduct-Gegenstücke, bleibt die entsprechende ältere Regel unverändert erhalten.
135
137
 
136
138
  Ab BLUN King 9.1.118 bleibt der Sitzungszeitstempel im Systemprompt während einer laufenden Sitzung unverändert. Das erneute Einlesen von Verzeichnisübersicht, AGENTS.md-Dateien, Zusatzverzeichnissen und Skillinformationen kann den Prompt weiterhin ändern, wenn sich die jeweiligen Quellen tatsächlich verändert haben. Bleiben diese Quellen gleich, entwertet die Aktualisierung nach einer Verdichtung den Präfix-Cache des Anbieters nicht mehr allein durch einen neuen Zeitstempel. In Fredriks gemessener Sitzung unterschieden sich die beiden letzten Systemprompts mit jeweils 68.631 Zeichen nur in der Zeitangabe, und zwar erst nach einem gemeinsamen Präfix von 27.111 Zeichen. Der geänderte Zeitstempel verhinderte damit die Wiederverwendung der übrigen 41.512 unveränderten Zeichen aus dem Präfix-Cache.
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ const MAX_UNADDRESSED_TELEGRAM_CONTEXT_CHARS = 2000;
4
+
5
+ function trimDanglingHighSurrogate(value) {
6
+ if (value.length === 0) return value;
7
+ const last = value.charCodeAt(value.length - 1);
8
+ return last >= 0xd800 && last <= 0xdbff ? value.slice(0, -1) : value;
9
+ }
10
+
11
+ function trimLeadingLowSurrogate(value) {
12
+ if (value.length === 0) return value;
13
+ const first = value.charCodeAt(0);
14
+ return first >= 0xdc00 && first <= 0xdfff ? value.slice(1) : value;
15
+ }
16
+
17
+ function projectUnaddressedTelegramContext(
18
+ tag,
19
+ maxChars = MAX_UNADDRESSED_TELEGRAM_CONTEXT_CHARS,
20
+ ) {
21
+ if (typeof tag !== 'string') return '';
22
+ if (!Number.isInteger(maxChars) || maxChars < 1 || tag.length <= maxChars) return tag;
23
+
24
+ const marker = `\n[Telegram-Kontext gekuerzt; Original: ${tag.length} Zeichen]\n`;
25
+ if (marker.length >= maxChars) return marker.slice(0, maxChars);
26
+
27
+ const retainedChars = maxChars - marker.length;
28
+ const headChars = Math.ceil(retainedChars * 0.6);
29
+ const tailChars = retainedChars - headChars;
30
+ const head = trimDanglingHighSurrogate(tag.slice(0, headChars));
31
+ const tail = trimLeadingLowSurrogate(tag.slice(tag.length - tailChars));
32
+
33
+ return `${head}${marker}${tail}`;
34
+ }
35
+
36
+ module.exports = {
37
+ MAX_UNADDRESSED_TELEGRAM_CONTEXT_CHARS,
38
+ projectUnaddressedTelegramContext,
39
+ };
package/blun.mjs CHANGED
@@ -418052,6 +418052,7 @@ registerUiCatalogFragment({
418052
418052
  * This module is dependency-free on purpose: verify-telegram.ts drives the
418053
418053
  * real logic here with a mocked host (no TUI, no session, no Telegram).
418054
418054
  */
418055
+ var { projectUnaddressedTelegramContext } = createRequire(import.meta.url)("./bin/telegram-context-projection-policy.cjs");
418055
418056
  const MAX_BUFFERED_CONTEXT_MESSAGES = 20;
418056
418057
  const MAX_BUFFERED_CONTEXT_CHARS = 24e3;
418057
418058
  const CONTEXT_TRUNCATED_MARKER = "\n[Telegram-Kontext gekuerzt]";
@@ -418077,7 +418078,8 @@ function bufferContext(state, chatId, tag) {
418077
418078
  const buffers = state.bufferedByChat ?? /* @__PURE__ */ new Map();
418078
418079
  state.bufferedByChat = buffers;
418079
418080
  const messages = buffers.get(chatId) ?? [];
418080
- const boundedTag = tag.length <= MAX_BUFFERED_CONTEXT_CHARS ? tag : `${tag.slice(0, MAX_BUFFERED_CONTEXT_CHARS - 28)}${CONTEXT_TRUNCATED_MARKER}`;
418081
+ const projectedTag = projectUnaddressedTelegramContext(tag);
418082
+ const boundedTag = projectedTag.length <= MAX_BUFFERED_CONTEXT_CHARS ? projectedTag : `${projectedTag.slice(0, MAX_BUFFERED_CONTEXT_CHARS - 28)}${CONTEXT_TRUNCATED_MARKER}`;
418081
418083
  messages.push(boundedTag);
418082
418084
  let chars = messages.reduce((sum, message) => sum + message.length, 0);
418083
418085
  while (messages.length > MAX_BUFFERED_CONTEXT_MESSAGES || chars > MAX_BUFFERED_CONTEXT_CHARS) chars -= messages.shift()?.length ?? 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.133",
3
+ "version": "9.1.134",
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": {