blun-king-cli 9.1.88 → 9.1.89
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 +3 -1
- package/README.md +3 -1
- package/bin/read-continuation-policy.cjs +18 -0
- package/blun.mjs +10 -3
- package/package.json +1 -1
package/LIESMICH.txt
CHANGED
|
@@ -9,7 +9,7 @@ Installation
|
|
|
9
9
|
------------
|
|
10
10
|
Die geprüfte Version exakt global installieren:
|
|
11
11
|
|
|
12
|
-
npm install -g blun-king-cli@9.1.
|
|
12
|
+
npm install -g blun-king-cli@9.1.89
|
|
13
13
|
|
|
14
14
|
Start
|
|
15
15
|
-----
|
|
@@ -89,6 +89,8 @@ Dabei werden keine gespeicherten Nachrichten geändert oder gelöscht. Fortsetze
|
|
|
89
89
|
|
|
90
90
|
Große textbasierte Werkzeugergebnisse bleiben nicht mehr vollständig im Modellkontext. Ab 12.001 Zeichen speichert BLUN King das vollständige Ergebnis in einer privaten Datei im Sitzungsordner `tool-results`. Im Modellkontext verbleiben die ersten 1.000 und die letzten 1.000 Zeichen, die genaue Zahl der ausgelassenen Zeichen und der `output_path`. Der Agent kann das vollständige Ergebnis anschließend mit `Read` seitenweise über diesen Pfad lesen. Ergebnisse bis einschließlich 12.000 Zeichen, gemischte Medienergebnisse und bereits gekürzte Ergebnisse bleiben unverändert. Auch eine spätere Mikroverdichtung bewahrt den Dateiverweis. Beispiel: Bei einem Suchergebnis mit 30.000 Zeichen sehen folgende Modellanfragen den Anfang und das abschließende Ergebnis oder den Fehler; der vollständige Text bleibt lokal verfügbar.
|
|
91
91
|
|
|
92
|
+
Große Dateien werden weiterhin seitenweise gelesen. Erreicht `Read` seine interne Grenze von 1.000 Zeilen und enthält die Datei weitere Zeilen, nennt das Ergebnis jetzt den exakten nächsten `line_offset`. Beispiel: Ein Lesevorgang ab Zeile 2001 wird mit `line_offset=3001` fortgesetzt. Am Dateiende und bei einem bewusst kleineren Leseausschnitt erscheint kein Fortsetzungshinweis. Dadurch zieht der Agent keine Schlüsse aus einem unvollständigen Ausschnitt und liest die Datei nicht erneut ab der ersten Zeile.
|
|
93
|
+
|
|
92
94
|
Das Telemetrieereignis `tool_result_offloaded` enthält ausschließlich `tool_name`, `output_size_chars`, `output_size_bytes` und `preview_size_chars`. Es enthält weder den Inhalt noch den Speicherpfad. Beispiel: Eine Ausgabe mit 80.000 Zeichen erzeugt eine Vorschau mit 2.000 Zeichen; die Telemetrie zeigt die Größenersparnis, ohne Nutzdaten zu protokollieren.
|
|
93
95
|
|
|
94
96
|
Reguläre `Agent`-Teilaufgaben verwenden eine eigene `ContextMemory` und eine eigene `wire.jsonl` in einem getrennten Agentenverzeichnis. Der Hauptagent erhält nur die Ergebniszusammenfassung, sodass lange Teilaufgaben nicht den Hauptverlauf füllen. `TodoList` speichert Pläne weiterhin maschinenlesbar im Sitzungs-Wire; `blun handoff` übergibt sie zusammen mit prüfbaren Hashes zwischen CLI, Desktop und Web.
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Voraussetzung ist Node.js 24.15 oder neuer. Die geprüfte Version wird exakt
|
|
|
9
9
|
installiert:
|
|
10
10
|
|
|
11
11
|
```powershell
|
|
12
|
-
npm install -g blun-king-cli@9.1.
|
|
12
|
+
npm install -g blun-king-cli@9.1.89
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## Reproduzierbares Staging und Packen
|
|
@@ -109,6 +109,8 @@ Dabei werden keine gespeicherten Nachrichten geändert oder gelöscht. Fortsetze
|
|
|
109
109
|
|
|
110
110
|
Große textbasierte Werkzeugergebnisse bleiben nicht mehr vollständig im Modellkontext. Ab 12.001 Zeichen speichert BLUN King das vollständige Ergebnis in einer privaten Datei im Sitzungsordner `tool-results`. Im Modellkontext verbleiben die ersten 1.000 und die letzten 1.000 Zeichen, die genaue Zahl der ausgelassenen Zeichen und der `output_path`. Der Agent kann das vollständige Ergebnis anschließend mit `Read` seitenweise über diesen Pfad lesen. Ergebnisse bis einschließlich 12.000 Zeichen, gemischte Medienergebnisse und bereits gekürzte Ergebnisse bleiben unverändert. Auch eine spätere Mikroverdichtung bewahrt den Dateiverweis. Beispiel: Bei einem Suchergebnis mit 30.000 Zeichen sehen folgende Modellanfragen den Anfang und das abschließende Ergebnis oder den Fehler; der vollständige Text bleibt lokal verfügbar.
|
|
111
111
|
|
|
112
|
+
Große Dateien werden weiterhin seitenweise gelesen. Erreicht `Read` seine interne Grenze von 1.000 Zeilen und enthält die Datei weitere Zeilen, nennt das Ergebnis jetzt den exakten nächsten `line_offset`. Beispiel: Ein Lesevorgang ab Zeile 2001 wird mit `line_offset=3001` fortgesetzt. Am Dateiende und bei einem bewusst kleineren Leseausschnitt erscheint kein Fortsetzungshinweis. Dadurch zieht der Agent keine Schlüsse aus einem unvollständigen Ausschnitt und liest die Datei nicht erneut ab der ersten Zeile.
|
|
113
|
+
|
|
112
114
|
Das Telemetrieereignis `tool_result_offloaded` enthält ausschließlich `tool_name`, `output_size_chars`, `output_size_bytes` und `preview_size_chars`. Es enthält weder den Inhalt noch den Speicherpfad. Beispiel: Eine Ausgabe mit 80.000 Zeichen erzeugt eine Vorschau mit 2.000 Zeichen; die Telemetrie zeigt die Größenersparnis, ohne Nutzdaten zu protokollieren.
|
|
113
115
|
|
|
114
116
|
Reguläre `Agent`-Teilaufgaben verwenden eine eigene `ContextMemory` und eine eigene `wire.jsonl` in einem getrennten Agentenverzeichnis. Der Hauptagent erhält nur die Ergebniszusammenfassung, sodass lange Teilaufgaben nicht den Hauptverlauf füllen. `TodoList` speichert Pläne weiterhin maschinenlesbar im Sitzungs-Wire; `blun handoff` übergibt sie zusammen mit prüfbaren Hashes zwischen CLI, Desktop und Web.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const READ_LINE_CAP = 1000;
|
|
4
|
+
|
|
5
|
+
function readContinuationNotice(input) {
|
|
6
|
+
if (input?.maxLinesReached !== true) return undefined;
|
|
7
|
+
if (!Number.isSafeInteger(input.lineOffset) || input.lineOffset < 1) return undefined;
|
|
8
|
+
if (!Number.isSafeInteger(input.effectiveLimit) || input.effectiveLimit < READ_LINE_CAP) return undefined;
|
|
9
|
+
|
|
10
|
+
const nextLineOffset = input.lineOffset + input.effectiveLimit;
|
|
11
|
+
if (!Number.isSafeInteger(nextLineOffset)) return undefined;
|
|
12
|
+
return `Continue reading with line_offset=${String(nextLineOffset)}. Do not assume you have reached the end of the file.`;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
module.exports = {
|
|
16
|
+
READ_LINE_CAP,
|
|
17
|
+
readContinuationNotice,
|
|
18
|
+
};
|
package/blun.mjs
CHANGED
|
@@ -258603,7 +258603,7 @@ function containsNulByte(text) {
|
|
|
258603
258603
|
function notReadableFileOutput(path) {
|
|
258604
258604
|
return `"${path}" is not readable as UTF-8 text. If it is an image or video, use ReadMediaFile. For other binary formats, use Bash or an MCP tool if available.`;
|
|
258605
258605
|
}
|
|
258606
|
-
var MAX_LINES$1, MAX_LINE_LENGTH, MAX_BYTES, S_IFMT$1, S_IFREG, PositiveLineOffsetSchema, TailLineOffsetSchema, ReadInputSchema, READ_DESCRIPTION, ReadTool;
|
|
258606
|
+
var MAX_LINES$1, MAX_LINE_LENGTH, MAX_BYTES, S_IFMT$1, S_IFREG, PositiveLineOffsetSchema, TailLineOffsetSchema, ReadInputSchema, READ_DESCRIPTION, ReadTool, readContinuationNotice;
|
|
258607
258607
|
var init_read = __esmMin((() => {
|
|
258608
258608
|
init_zod$1();
|
|
258609
258609
|
init_tool_access();
|
|
@@ -258614,6 +258614,7 @@ var init_read = __esmMin((() => {
|
|
|
258614
258614
|
init_rule_match();
|
|
258615
258615
|
init_line_endings();
|
|
258616
258616
|
init_read$1();
|
|
258617
|
+
({ readContinuationNotice } = createRequire(import.meta.url)("./bin/read-continuation-policy.cjs"));
|
|
258617
258618
|
MAX_LINES$1 = 1e3;
|
|
258618
258619
|
MAX_LINE_LENGTH = 2e3;
|
|
258619
258620
|
MAX_BYTES = 100 * 1024;
|
|
@@ -258740,7 +258741,9 @@ var init_read = __esmMin((() => {
|
|
|
258740
258741
|
lineEndingStyle,
|
|
258741
258742
|
startLine: selectedEntries.length > 0 ? lineOffset : 0,
|
|
258742
258743
|
totalLines: scan.totalLines,
|
|
258743
|
-
requestedLines
|
|
258744
|
+
requestedLines,
|
|
258745
|
+
lineOffset,
|
|
258746
|
+
effectiveLimit
|
|
258744
258747
|
});
|
|
258745
258748
|
}
|
|
258746
258749
|
const selectedEntries = [];
|
|
@@ -258785,7 +258788,9 @@ var init_read = __esmMin((() => {
|
|
|
258785
258788
|
lineEndingStyle,
|
|
258786
258789
|
startLine: selectedEntries.length > 0 ? lineOffset : 0,
|
|
258787
258790
|
totalLines: currentLineNo,
|
|
258788
|
-
requestedLines
|
|
258791
|
+
requestedLines,
|
|
258792
|
+
lineOffset,
|
|
258793
|
+
effectiveLimit
|
|
258789
258794
|
});
|
|
258790
258795
|
}
|
|
258791
258796
|
async readTail(safePath, displayPath, lineOffset, effectiveLimit, requestedLines) {
|
|
@@ -258900,6 +258905,8 @@ var init_read = __esmMin((() => {
|
|
|
258900
258905
|
if (input.maxLinesReached) parts.push(`Max ${String(MAX_LINES$1)} lines reached.`);
|
|
258901
258906
|
else if (input.maxBytesReached) parts.push(`Max ${String(MAX_BYTES)} bytes reached.`);
|
|
258902
258907
|
else if (lineCount < input.requestedLines) parts.push("End of file reached.");
|
|
258908
|
+
const continuationNotice = readContinuationNotice(input);
|
|
258909
|
+
if (continuationNotice !== void 0) parts.push(continuationNotice);
|
|
258903
258910
|
if (input.truncatedLineNumbers.length > 0) parts.push(`Lines [${input.truncatedLineNumbers.join(", ")}] were truncated.`);
|
|
258904
258911
|
if (input.lineEndingStyle === "mixed") parts.push("Mixed or lone carriage-return line endings are shown as \\r. Use exact \\r\\n or \\r escapes in Edit.old_string for those lines.");
|
|
258905
258912
|
return parts.join(" ");
|