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 +15 -0
- package/README.md +28 -0
- package/bin/compaction-history-startup.cjs +50 -0
- package/bin/turn-tool-performance-policy.cjs +5 -1
- package/blun.mjs +5 -0
- package/package.json +1 -1
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
|
-
|
|
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
|