blun-king-cli 9.1.86 → 9.1.88

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
@@ -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.86
12
+ npm install -g blun-king-cli@9.1.87
13
13
 
14
14
  Start
15
15
  -----
@@ -50,6 +50,13 @@ FIFO-Warteschlange. Für diesen normalen Wartestatus erscheint kein
50
50
 
51
51
  Zuverlässiger King-Start
52
52
  -----------------------
53
+ Bei einer ausdrücklich als wiederholbar gekennzeichneten Serverüberlastung
54
+ (HTTP 429 mit x-should-retry: true) wartet BLUN King gemäß Retry-After und
55
+ sendet dieselbe Anfrage höchstens zweimal erneut. Authentifizierungs-,
56
+ Kontingent- und andere nicht wiederholbare Fehler brechen weiterhin sofort ab.
57
+ Bleibt der Server nach den begrenzten Versuchen überlastet, erhält der Nutzer
58
+ weiterhin die klare Fehlermeldung.
59
+
53
60
  Der Windows-Hilfsprozess für private Pfade übernimmt TEMP und TMP aus der
54
61
  Benutzersitzung. Dadurch arbeitet die ACL-Prüfung auch unter einem normalen
55
62
  Benutzerkonto. Bei einem Fehler wird die tatsächliche Ursache des
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.86
12
+ npm install -g blun-king-cli@9.1.88
13
13
  ```
14
14
 
15
15
  ## Reproduzierbares Staging und Packen
@@ -72,6 +72,11 @@ Geistervorschlägen, Bash-Eingabe und einer noch offenen Mehrzeileneingabe.
72
72
 
73
73
  ## Zuverlässiger King-Start
74
74
 
75
+ Bei einer vom Server ausdrücklich als wiederholbar gekennzeichneten
76
+ Überlastung (`HTTP 429`, `x-should-retry: true`) wartet BLUN King entsprechend
77
+ `Retry-After` und sendet dieselbe Anfrage höchstens zweimal erneut. Andere
78
+ Fehler und dauerhaft überlastete Server bleiben klar begrenzt und sichtbar.
79
+
75
80
  Der Windows-Hilfsprozess für private Pfade übernimmt `TEMP` und `TMP` aus der
76
81
  Benutzersitzung. Dadurch kann der C#-Compiler für die ACL-Prüfung auch unter
77
82
  einem normalen Benutzerkonto arbeiten. Scheitert der Unterprozess, nennt die
@@ -96,9 +101,9 @@ doppelten Namen bleiben unverändert.
96
101
 
97
102
  ## Kontextentlastung bei langen Sitzungen
98
103
 
99
- King bewahrt den vollständigen Verlauf weiterhin im Sitzungs-Wire auf. Erreicht der aktive Verlauf 75 Prozent des Modellfensters, ersetzt die Modellprojektion ältere große Werkzeugergebnisse sowie große Argumente abgeschlossener Werkzeugaufrufe durch kurze Platzhalter. Werkzeugargumente werden nur entlastet, wenn ein zugehöriges Werkzeugergebnis vorliegt und die gespeicherten Argumente gültiges JSON sind. Die letzten 20 Nachrichten bleiben unverändert. Solange der Prefix-Cache warm ist, wird der Schnitt höchstens nach jeweils 20 weiteren Nachrichten verschoben. Nach einer Stunde ohne Modellantwort darf er sofort nachziehen.
104
+ King bewahrt den vollständigen Verlauf weiterhin im Sitzungs-Wire auf. Bei 75 Prozent der wirksamen Verdichtungsgrenze ersetzt die Modellprojektion ältere große Werkzeugergebnisse sowie große Argumente abgeschlossener Werkzeugaufrufe durch kurze Platzhalter. Die Druckmessung verwendet die frühere Grenze aus Modellfenster und Vollverdichtungsbudget; bei einem Modellfenster von 1.048.576 Token und einer Vollverdichtung bei 256.000 Token liegt der Mikrodruckpunkt daher bei 192.000 Token. Werkzeugargumente werden nur entlastet, wenn ein zugehöriges Werkzeugergebnis vorliegt und die gespeicherten Argumente gültiges JSON sind. Die letzten 20 Nachrichten bleiben unverändert. Solange der Prefix-Cache warm ist, wird der Schnitt höchstens nach jeweils 20 weiteren Nachrichten verschoben. Nach einer Stunde ohne Modellantwort darf er sofort nachziehen.
100
105
 
101
- Dabei werden keine gespeicherten Nachrichten geändert oder gelöscht. Fortsetzen, Exportieren und die sichtbare Historie behalten die ursprünglichen Werkzeugergebnisse und Werkzeugargumente. Das Telemetrieereignis `micro_compaction_finished` nennt den Auslöser, den Schnitt und die geschätzte Tokenzahl vor und nach der Entlastung. Außerdem zählt es getrennt, wie viele Werkzeugergebnisse und Werkzeugargumente entlastet wurden. Der Sitzungsinspektor summiert zusätzlich die eingesparten Argument-Token, ohne Inhalte offenzulegen. Beispiel: Ein früherer `Write`-Aufruf mit einem vollständigen Dateiinhalt bleibt im Wire erhalten; die Modellprojektion trägt nur noch einen Platzhalter, sobald für diesen `Write`-Aufruf ein zugehöriges Ergebnis vorliegt.
106
+ Dabei werden keine gespeicherten Nachrichten geändert oder gelöscht. Fortsetzen, Exportieren und die sichtbare Historie behalten die ursprünglichen Werkzeugergebnisse und Werkzeugargumente. Das Telemetrieereignis `micro_compaction_finished` nennt den Auslöser, den Schnitt, die verwendete Druckgrenze, das Modellfenster und die geschätzte Tokenzahl vor und nach der Entlastung. Außerdem zählt es getrennt, wie viele Werkzeugergebnisse und Werkzeugargumente entlastet wurden. Der Sitzungsinspektor summiert zusätzlich die eingesparten Argument-Token, ohne Inhalte offenzulegen. Beispiel: Ein früherer `Write`-Aufruf mit einem vollständigen Dateiinhalt bleibt im Wire erhalten; die Modellprojektion trägt nur noch einen Platzhalter, sobald für diesen `Write`-Aufruf ein zugehöriges Ergebnis vorliegt.
102
107
 
103
108
  ## Große Werkzeugausgaben und isolierte Teilagenten
104
109
 
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  const MAX_AUTOMATIC_RATE_LIMIT_RESUMES = 3;
4
+ const MAX_EXPLICIT_RATE_LIMIT_RETRIES = 2;
4
5
  const RATE_LIMIT_RETRY_BASE_MS = 60_000;
5
6
  const RATE_LIMIT_COMPACTION_THRESHOLD_TOKENS = 64_000;
6
7
 
@@ -8,6 +9,16 @@ function isImmediateGenerateRetryAllowed(statusCode) {
8
9
  return statusCode !== 429 && [500, 502, 503, 504].includes(statusCode);
9
10
  }
10
11
 
12
+ function resolveTransportRetryBudget(configuredMaxRetries, statusCode, shouldRetryHeader) {
13
+ if (!Number.isInteger(configuredMaxRetries) || configuredMaxRetries < 0) {
14
+ throw new Error("configuredMaxRetries must be a non-negative integer.");
15
+ }
16
+ const explicitRetry = typeof shouldRetryHeader === "string"
17
+ && shouldRetryHeader.trim().toLowerCase() === "true";
18
+ if (statusCode !== 429 || !explicitRetry) return configuredMaxRetries;
19
+ return Math.max(configuredMaxRetries, MAX_EXPLICIT_RATE_LIMIT_RETRIES);
20
+ }
21
+
11
22
  function rateLimitRetryDelayMs(retryCount) {
12
23
  if (!Number.isInteger(retryCount) || retryCount < 1) {
13
24
  throw new Error("retryCount must be a positive integer.");
@@ -26,9 +37,11 @@ function shouldCompactBeforeRateLimitResume(estimatedRequestTokens) {
26
37
 
27
38
  module.exports = {
28
39
  MAX_AUTOMATIC_RATE_LIMIT_RESUMES,
40
+ MAX_EXPLICIT_RATE_LIMIT_RETRIES,
29
41
  RATE_LIMIT_RETRY_BASE_MS,
30
42
  isImmediateGenerateRetryAllowed,
31
43
  rateLimitRetryDelayMs,
44
+ resolveTransportRetryBudget,
32
45
  shouldCompactBeforeRateLimitResume,
33
46
  shouldStopAutomaticRateLimitResume,
34
47
  };
package/blun.mjs CHANGED
@@ -1935,9 +1935,10 @@ function getRecord(value) {
1935
1935
  function getString(value) {
1936
1936
  return typeof value === "string" && value.length > 0 ? value : void 0;
1937
1937
  }
1938
- var DEFAULT_MAX_RETRIES$1, MAX_RETRY_DELAY_MS, FetchTransport, DONE;
1938
+ var DEFAULT_MAX_RETRIES$1, MAX_RETRY_DELAY_MS, resolveTransportRetryBudget, FetchTransport, DONE;
1939
1939
  var init_fetch_http_client = __esmMin((() => {
1940
1940
  init_errors$10();
1941
+ ({ resolveTransportRetryBudget } = createRequire(import.meta.url)("./bin/rate-limit-recovery-policy.cjs"));
1941
1942
  DEFAULT_MAX_RETRIES$1 = 2;
1942
1943
  MAX_RETRY_DELAY_MS = 6e4;
1943
1944
  FetchTransport = class {
@@ -1993,7 +1994,8 @@ var init_fetch_http_client = __esmMin((() => {
1993
1994
  const startedAt = performance.now();
1994
1995
  try {
1995
1996
  const response = await this.fetch(`${this.baseUrl}${pathname}`, init);
1996
- const willRetry = attempt < maxRetries && shouldRetryResponse(response);
1997
+ const retryBudget = resolveTransportRetryBudget(maxRetries, response.status, response.headers.get("x-should-retry"));
1998
+ const willRetry = attempt < retryBudget && shouldRetryResponse(response);
1997
1999
  notifyTransportAttempt(requestOptions?.onTransportAttempt, {
1998
2000
  transportAttempt: attempt + 1,
1999
2001
  ...requestBytes === void 0 ? {} : { requestBytes },
@@ -75948,7 +75950,9 @@ var init_micro = __esmMin((() => {
75948
75950
  detect() {
75949
75951
  const config = this.config;
75950
75952
  const { history, lastAssistantAt } = this.agent.context;
75951
- const maxContextTokens = this.agent.config.modelCapabilities.max_context_tokens;
75953
+ const modelContextTokens = this.agent.config.modelCapabilities.max_context_tokens;
75954
+ const compactionBudgetTokens = this.agent.fullCompaction?.getCompactionBudgetTokens();
75955
+ const maxContextTokens = Number.isFinite(compactionBudgetTokens) && compactionBudgetTokens > 0 && (modelContextTokens <= 0 || compactionBudgetTokens < modelContextTokens) ? compactionBudgetTokens : modelContextTokens;
75952
75956
  const contextTokens = this.agent.context.tokenCountWithPending;
75953
75957
  const selection = selectMicroCompactionCutoff({
75954
75958
  historyLength: history.length,
@@ -75979,6 +75983,8 @@ var init_micro = __esmMin((() => {
75979
75983
  truncated_arguments_marker: config.truncatedArgumentsMarker,
75980
75984
  min_context_usage_ratio: config.minContextUsageRatio,
75981
75985
  context_usage_ratio: selection.contextUsageRatio,
75986
+ pressure_window_tokens: maxContextTokens,
75987
+ model_context_tokens: modelContextTokens,
75982
75988
  truncated_tool_result_count: effect.truncatedToolResultCount,
75983
75989
  truncated_tool_result_tokens_before: effect.truncatedToolResultTokensBefore,
75984
75990
  truncated_tool_result_tokens_after: effect.truncatedToolResultTokensAfter,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.86",
3
+ "version": "9.1.88",
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": {