blun-king-cli 9.1.401 → 9.1.403

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
@@ -381,6 +381,21 @@ Anweisung wie "Zeig mir den letzten Telegram-Verlauf" das passende Werkzeug im
381
381
  selben Modellschritt erhalten, während Begrüßungen und fachfremde Anfragen keine
382
382
  zusätzlichen Schemata laden.
383
383
 
384
+ Begrenztes Ranking bei großen Eingaben
385
+ --------------------------------------
386
+
387
+ Ab BLUN King 9.1.403 bewertet die automatische Werkzeugauswahl pro aktueller
388
+ Anfrage höchstens 1.000 Zeichen. Eingebettete Inhalte aus
389
+ `<attached_documents>`, `<attachment_content>`, `<document_content>` und
390
+ `<file_content>` werden vor dem Ranking vollständig entfernt. Damit können
391
+ große Anhänge weder die Auswahl unnötig verteuern noch anhand ihres Inhalts ein
392
+ fachfremdes Werkzeug vorladen.
393
+
394
+ Der eigentliche Anhang und die vollständige Nutzernachricht bleiben für den Zug
395
+ unverändert verfügbar. Die Begrenzung betrifft ausschließlich die kleine
396
+ lexikalische Vorauswahl von höchstens zwei Werkzeugschemas; ToolSearch und alle
397
+ explizit benötigten Medien- und Anhangswerkzeuge bleiben erhalten.
398
+
384
399
  Abschlussbedingungen mit Laufzeitbeleg
385
400
  --------------------------------------
386
401
 
package/README.md CHANGED
@@ -391,6 +391,20 @@ Anweisung wie „Zeig mir den letzten Telegram-Verlauf“ das passende Werkzeug
391
391
  selben Modellschritt erhalten, während Begrüßungen und fachfremde Anfragen keine
392
392
  zusätzlichen Schemata laden.
393
393
 
394
+ ## Begrenztes Ranking bei großen Eingaben
395
+
396
+ Ab BLUN King 9.1.403 bewertet die automatische Werkzeugauswahl pro aktueller
397
+ Anfrage höchstens 1.000 Zeichen. Eingebettete Inhalte aus
398
+ `<attached_documents>`, `<attachment_content>`, `<document_content>` und
399
+ `<file_content>` werden vor dem Ranking vollständig entfernt. Damit können
400
+ große Anhänge weder die Auswahl unnötig verteuern noch anhand ihres Inhalts ein
401
+ fachfremdes Werkzeug vorladen.
402
+
403
+ Der eigentliche Anhang und die vollständige Nutzernachricht bleiben für den Zug
404
+ unverändert verfügbar. Die Begrenzung betrifft ausschließlich die kleine
405
+ lexikalische Vorauswahl von höchstens zwei Werkzeugschemas; ToolSearch und alle
406
+ explizit benötigten Medien- und Anhangswerkzeuge bleiben erhalten.
407
+
394
408
  ## Abschlussbedingungen mit Laufzeitbeleg
395
409
 
396
410
  Ab BLUN King 9.1.397 kann ein autonomes Ziel mit ausdrücklich gesetzter
@@ -426,6 +440,20 @@ Weitere Text-, Denk- und Werkzeugfragmente bleiben adaptiv gebündelt. Kurze
426
440
  Ausgaben behalten ihren schnellen Takt; bei langen Ausgaben wächst das Intervall
427
441
  weiterhin stufenweise, damit vollständige Neurenderings die TUI nicht ausbremsen.
428
442
 
443
+ ## Bereinigung alter Verdichtungsarchive beim Start
444
+
445
+ Ab BLUN King 9.1.402 beginnt beim Start einmalig eine Hintergrundbereinigung
446
+ für private Verdichtungsarchive unter `~/.blun/conversation-history/`. Dateien,
447
+ deren Aufbewahrungsfrist abgelaufen ist, werden damit auch dann entfernt, wenn
448
+ anschließend keine neue Vollverdichtung stattfindet.
449
+
450
+ Die Bereinigung wird nicht abgewartet und kann den Start weder verzögern noch
451
+ verhindern. Sie bleibt auf reguläre `compaction-*.md`-Dateien direkt im
452
+ Archivverzeichnis begrenzt. Fehler werden protokolliert und fallen weich
453
+ zurück; Sitzungs-Wire, andere Dateien und laufende Antworten bleiben
454
+ unverändert. `BLUN_COMPACTION_HISTORY_RETENTION_DAYS=0` schaltet die
455
+ Bereinigung weiterhin vollständig ab.
456
+
429
457
  ## Reaktionsfähige Wiederaufnahme großer Sitzungen
430
458
 
431
459
  Ab BLUN King 9.1.400 spielt die TUI gespeicherte Sitzungsverläufe weiterhin
@@ -0,0 +1,50 @@
1
+ 'use strict';
2
+
3
+ const { sweepCompactionHistory } = require('./compaction-history-archive.cjs');
4
+
5
+ function startCompactionHistoryStartupSweep(options = {}) {
6
+ const sweep = typeof options.sweep === 'function'
7
+ ? options.sweep
8
+ : sweepCompactionHistory;
9
+ const sweepOptions = { homedir: options.homedir };
10
+ if (options.now !== undefined) sweepOptions.now = options.now;
11
+ if (options.retentionDays !== undefined) sweepOptions.retentionDays = options.retentionDays;
12
+
13
+ return Promise.resolve()
14
+ .then(() => sweep(sweepOptions))
15
+ .then((result) => {
16
+ const normalized = normalizeSweepResult(result);
17
+ if (normalized.deleted > 0 || normalized.failed > 0) {
18
+ safeLog(options.logger, 'info', 'compaction history startup sweep completed', normalized);
19
+ }
20
+ return normalized;
21
+ })
22
+ .catch((error) => {
23
+ const result = { deleted: 0, failed: 1 };
24
+ safeLog(options.logger, 'warn', 'compaction history startup sweep failed', {
25
+ error: error instanceof Error ? error.message : String(error),
26
+ });
27
+ return result;
28
+ });
29
+ }
30
+
31
+ function normalizeSweepResult(result) {
32
+ return {
33
+ deleted: nonNegativeInteger(result?.deleted),
34
+ failed: nonNegativeInteger(result?.failed),
35
+ };
36
+ }
37
+
38
+ function nonNegativeInteger(value) {
39
+ return Number.isInteger(value) && value >= 0 ? value : 0;
40
+ }
41
+
42
+ function safeLog(logger, level, message, properties) {
43
+ try {
44
+ logger?.[level]?.(message, properties);
45
+ } catch {}
46
+ }
47
+
48
+ module.exports = {
49
+ startCompactionHistoryStartupSweep,
50
+ };
@@ -6,6 +6,7 @@ const DEFERRED_TOOL_LOADER_NAME = 'ToolSearch';
6
6
  const MAX_PERSISTENT_DEFERRED_TOOLS = 4;
7
7
  const MAX_TOOL_SEARCH_QUERY_CHARS = 1_000;
8
8
  const MAX_AUTO_RANKED_TOOLS = 2;
9
+ const TOOL_RANK_EMBEDDED_CONTENT_RE = /<(attached_documents?|attachment_content|document_content|file_content)\b[^>]*>[\s\S]*?<\/\1>/giu;
9
10
  const TOOL_RANK_STOP_WORDS = new Set([
10
11
  'aber', 'also', 'and', 'aus', 'bitte', 'can', 'das', 'den', 'der', 'des', 'die', 'dies', 'diese',
11
12
  'du', 'ein', 'eine', 'einer', 'eines', 'for', 'fuer', 'für', 'haben', 'ich', 'ist', 'kann', 'kannst',
@@ -177,7 +178,10 @@ function rankingIntentTexts(value) {
177
178
  const channelBodies = [...text.matchAll(
178
179
  /(?:^|\r?\n)<channel\b[^>]*>\r?\n([\s\S]*?)\r?\n<\/channel>(?=\r?\n|$)/giu,
179
180
  )].map((match) => match[1]);
180
- return channelBodies.length > 0 ? channelBodies : [text];
181
+ const intentTexts = channelBodies.length > 0 ? channelBodies : [text];
182
+ return intentTexts.map((intentText) => normalizeDeferredToolQuery(
183
+ intentText.replace(TOOL_RANK_EMBEDDED_CONTENT_RE, ' '),
184
+ ));
181
185
  }
182
186
 
183
187
  function rankingTokens(value) {
package/blun.mjs CHANGED
@@ -519874,6 +519874,7 @@ function errorMessage(error) {
519874
519874
  * Parses CLI arguments via Commander.js, validates options, runs the
519875
519875
  * outer update preflight, then delegates to the requested UI runner.
519876
519876
  */
519877
+ const { startCompactionHistoryStartupSweep } = createRequire(import.meta.url)("./bin/compaction-history-startup.cjs");
519877
519878
  /** Keep the plain `blun` launcher Telegram-free without changing plugin state on disk. */
519878
519879
  function configureTelegramPluginLaunchMode(env) {
519879
519880
  const disabled = new Set((env["BLUN_DISABLED_PLUGINS"] ?? "").split(/[,;\s]+/).map((id) => id.trim().toLowerCase()).filter((id) => /^[a-z0-9][a-z0-9_-]{0,63}$/.test(id)));
@@ -519893,6 +519894,10 @@ async function handleMainCommand(opts, version) {
519893
519894
  }
519894
519895
  throw error;
519895
519896
  }
519897
+ void startCompactionHistoryStartupSweep({
519898
+ homedir: resolveBlunHome$1(),
519899
+ logger: log
519900
+ });
519896
519901
  const mistakeSync = await startAutomaticMistakeSync({
519897
519902
  homeDir: resolveBlunHome$1(),
519898
519903
  env: process.env
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.401",
3
+ "version": "9.1.403",
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": {