blun-king-cli 9.1.121 → 9.1.123
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
|
@@ -121,6 +121,10 @@ Ab BLUN King 9.1.120 lagert die Konsole auch große ältere Assistentenantworten
|
|
|
121
121
|
|
|
122
122
|
Ab BLUN King 9.1.121 begrenzt die Modellprojektion auch die Gesamtgröße älterer, mittelgroßer Werkzeugergebnisse, die ausschließlich Text enthalten. Überschreiten Werkzeugergebnisse außerhalb der letzten 20 Nachrichten zusammen 12.000 Zeichen, archiviert King so viele der größten geeigneten Ergebnisse wie nötig und behält nur kompakte, lesbare Dateiverweise im Modellkontext. Der nur ergänzte Rohverlauf und die vollständigen Ergebnisse bleiben unverändert. Gemischte Medienergebnisse und die letzten 20 Nachrichten werden nicht angetastet. In einer gemessenen Sitzung von Fredrik wählte dieser Schnitt 12 ältere Ergebnisse aus und verringerte die projizierte alte Werkzeugausgabe um mindestens 63.444 Zeichen, also um etwa 15.861 geschätzte Token.
|
|
123
123
|
|
|
124
|
+
Ab BLUN King 9.1.122 wird die vollständige integrierte Designrichtlinie nicht mehr bei jeder Modellanfrage mitgesendet. Nicht visuelle Arbeit erhält nur noch einen kompakten Aktivierungsvertrag. Vor Arbeiten an Benutzeroberflächen, Frontends, visueller Gestaltung, Interaktionen, Design oder Barrierefreiheit lädt King die vollständige Richtlinie über das Skill-Werkzeug; vom Nutzer ausgewählte Design-Skills bleiben zusätzlich verfügbar. Auch bestehende Sitzungen profitieren davon, ohne dass ihr nur ergänzter Rohverlauf umgeschrieben wird, denn verkürzt wird ausschließlich die Modellprojektion. Die Auslagerung älterer reiner Textausgaben von Werkzeugen erzielt nun außerdem die bestmögliche Entlastung, wenn allein die ausgenommenen kleinen Ergebnisse bereits über dem Ziel von 12.000 Zeichen liegen, statt in diesem Fall die gesamte Entlastung abzubrechen. In Fredriks aktuell vermessener Sitzung wurden 14 ältere Werkzeugergebnisse ausgewählt; die projizierte alte Werkzeugausgabe sank dadurch von 77.342 auf 12.418 Zeichen. Zusammen mit der bedarfsgeladenen Designrichtlinie sowie den bestehenden Auslagerungen von Nutzer- und Assistentennachrichten sank die gemessene Projektion von 322.780 Rohzeichen auf 109.656 Zeichen, also auf etwa 27.414 geschätzte Token. Die neuesten 20 Nachrichten, gemischte Medien, der Rohverlauf, Exporte und die vollständige bedarfsgeladene Designrichtlinie bleiben unverändert.
|
|
125
|
+
|
|
126
|
+
Ab BLUN King 9.1.123 entlastet die Modellprojektion zusätzlich die Argumente älterer, bereits abgeschlossener Werkzeugaufrufe. Name, Kennung und Ergebnis bleiben erhalten; nur die wiederholte Übertragung großer alter JSON-Argumente entfällt. Unbeantwortete Werkzeugaufrufe, ungültige JSON-Argumente und die neuesten 20 Nachrichten bleiben vollständig. Der gespeicherte Rohverlauf und Exporte werden nicht verändert. In Fredriks gemessener Projektion sank der Anfrageumfang dadurch von 101.459 auf 94.026 Zeichen, also um etwa 1.859 geschätzte Token je Anfrage.
|
|
127
|
+
|
|
124
128
|
Verliert ein delegierter Einzelagent oder ein Mitglied eines Agentenschwarms die Provider-Verbindung, erhält es eine leere Provider-Antwort, bricht sein Stream wegen Leerlaufs ab oder meldet der Server HTTP 408/500/502/503/504, setzt BLUN King denselben Agenten anhand seines dauerhaften Verlaufs fort. Bei Einzelagenten sowie bei Schwarm-Unterbrechungen außerhalb von HTTP 429 wartet die erste Fortsetzung zwei Sekunden und die zweite fünf Sekunden; danach bleibt der ursprüngliche Fehler sichtbar. HTTP 429 behält im Schwarm seine getrennte, längere Überlastungsregel. Authentifizierungs-, Zahlungs- oder Kontingent-, Richtlinien-, Kontext-, Werkzeug- und Codefehler sowie manuelle Abbrüche lösen keine automatische Fortsetzung aus. Jeder Fortsetzungsversuch verwendet die bestehende Agenten-ID, damit bereits abgeschlossene Arbeit nicht wiederholt wird.
|
|
125
129
|
|
|
126
130
|
Rein lesende Sitzungsdiagnose
|
package/README.md
CHANGED
|
@@ -127,6 +127,10 @@ Ab BLUN King 9.1.120 lagert die Konsole auch große ältere Assistentenantworten
|
|
|
127
127
|
|
|
128
128
|
Ab BLUN King 9.1.121 begrenzt die Modellprojektion auch die Gesamtgröße älterer, mittelgroßer Werkzeugergebnisse, die ausschließlich Text enthalten. Überschreiten Werkzeugergebnisse außerhalb der letzten 20 Nachrichten zusammen 12.000 Zeichen, archiviert King so viele der größten geeigneten Ergebnisse wie nötig und behält nur kompakte, lesbare Dateiverweise im Modellkontext. Der nur ergänzte Rohverlauf und die vollständigen Ergebnisse bleiben unverändert. Gemischte Medienergebnisse und die letzten 20 Nachrichten werden nicht angetastet. In einer gemessenen Sitzung von Fredrik wählte dieser Schnitt 12 ältere Ergebnisse aus und verringerte die projizierte alte Werkzeugausgabe um mindestens 63.444 Zeichen, also um etwa 15.861 geschätzte Token.
|
|
129
129
|
|
|
130
|
+
Ab BLUN King 9.1.122 wird die vollständige integrierte Designrichtlinie nicht mehr bei jeder Modellanfrage mitgesendet. Nicht visuelle Arbeit erhält nur noch einen kompakten Aktivierungsvertrag. Vor Arbeiten an Benutzeroberflächen, Frontends, visueller Gestaltung, Interaktionen, Design oder Barrierefreiheit lädt King die vollständige Richtlinie über das Skill-Werkzeug; vom Nutzer ausgewählte Design-Skills bleiben zusätzlich verfügbar. Auch bestehende Sitzungen profitieren davon, ohne dass ihr nur ergänzter Rohverlauf umgeschrieben wird, denn verkürzt wird ausschließlich die Modellprojektion. Die Auslagerung älterer reiner Textausgaben von Werkzeugen erzielt nun außerdem die bestmögliche Entlastung, wenn allein die ausgenommenen kleinen Ergebnisse bereits über dem Ziel von 12.000 Zeichen liegen, statt in diesem Fall die gesamte Entlastung abzubrechen. In Fredriks aktuell vermessener Sitzung wurden 14 ältere Werkzeugergebnisse ausgewählt; die projizierte alte Werkzeugausgabe sank dadurch von 77.342 auf 12.418 Zeichen. Zusammen mit der bedarfsgeladenen Designrichtlinie sowie den bestehenden Auslagerungen von Nutzer- und Assistentennachrichten sank die gemessene Projektion von 322.780 Rohzeichen auf 109.656 Zeichen, also auf etwa 27.414 geschätzte Token. Die neuesten 20 Nachrichten, gemischte Medien, der Rohverlauf, Exporte und die vollständige bedarfsgeladene Designrichtlinie bleiben unverändert.
|
|
131
|
+
|
|
132
|
+
Ab BLUN King 9.1.123 entlastet die Modellprojektion zusätzlich die Argumente älterer, bereits abgeschlossener Werkzeugaufrufe. Name, Kennung und Ergebnis bleiben erhalten; nur die wiederholte Übertragung großer alter JSON-Argumente entfällt. Unbeantwortete Werkzeugaufrufe, ungültige JSON-Argumente und die neuesten 20 Nachrichten bleiben vollständig. Der gespeicherte Rohverlauf und Exporte werden nicht verändert. In Fredriks gemessener Projektion sank der Anfrageumfang dadurch von 101.459 auf 94.026 Zeichen, also um etwa 1.859 geschätzte Token je Anfrage.
|
|
133
|
+
|
|
130
134
|
Ab BLUN King 9.1.99 werden auch direkt aufeinanderfolgende reine Textergebnisse als Stapel betrachtet. Enthalten sie zusammen mehr als 12.000 Zeichen, obwohl kein einzelnes Ergebnis diese Grenze überschreitet, speichert King so viele der größten geeigneten Ergebnisse wie nötig in privaten Dateien. In der Modellprojektion verbleiben lesbare Verweise. Der unveränderte Sitzungsrohverlauf bleibt vollständig erhalten. Gemischte Medienergebnisse, einzelne Ergebnisse unter 3.000 Zeichen und Stapel bis einschließlich 12.000 Zeichen bleiben unverändert. Beispiel: Bei zwei Suchergebnissen mit 7.000 und 6.000 Zeichen wird das größere Ergebnis privat gespeichert; Anfang, Ende, ausgelassene Zeichenzahl und `output_path` bleiben für den Agenten sichtbar.
|
|
131
135
|
|
|
132
136
|
Ab BLUN King 9.1.100 beendet eine begrenzte Grep-Inhaltssuche ripgrep, sobald der Versatz, die angeforderten Zeilen und eine zusätzliche Vorschauzeile vollständig vorliegen. Die Vorschauzeile belegt, ob eine weitere Seite existiert, ohne vorher bis zu 10 MB einzulesen. Unbegrenzte Suchen, Trefferzählungen und nach Änderungszeit sortierte Dateilisten laufen weiterhin vollständig durch.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const BASELINE_ACTIVATION_MAX_CHARS = 700;
|
|
4
|
+
const BASELINE_SKILL_ORIGIN_PREFIX = 'baseline_skill:';
|
|
5
|
+
|
|
6
|
+
function escapeXmlAttribute(value) {
|
|
7
|
+
return String(value ?? '')
|
|
8
|
+
.replaceAll('&', '&')
|
|
9
|
+
.replaceAll('"', '"')
|
|
10
|
+
.replaceAll('<', '<')
|
|
11
|
+
.replaceAll('>', '>');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function renderBaselineActivationPrompt(input = {}) {
|
|
15
|
+
const skillName = String(input.skillName || 'blun-design-dna').trim();
|
|
16
|
+
const attributes = [
|
|
17
|
+
`name="${escapeXmlAttribute(skillName)}"`,
|
|
18
|
+
input.skillSource ? `source="${escapeXmlAttribute(input.skillSource)}"` : '',
|
|
19
|
+
input.skillDir ? `dir="${escapeXmlAttribute(input.skillDir)}"` : '',
|
|
20
|
+
].filter(Boolean).join(' ');
|
|
21
|
+
|
|
22
|
+
return [
|
|
23
|
+
`<blun-baseline-skill ${attributes}>`,
|
|
24
|
+
'For non-visual work, keep the design baseline dormant and do not load its full body.',
|
|
25
|
+
`Before UI, frontend, visual, interaction, design, or accessibility work, call the Skill tool with "${skillName}" and follow the complete loaded instructions before editing.`,
|
|
26
|
+
'User-selected design skills are additive; they do not replace the baseline.',
|
|
27
|
+
'</blun-baseline-skill>',
|
|
28
|
+
].join('\n');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function compactBaselineSkillInjections(messages) {
|
|
32
|
+
if (!Array.isArray(messages)) return messages;
|
|
33
|
+
return messages.map((message) => {
|
|
34
|
+
const variant = String(message?.origin?.variant || '');
|
|
35
|
+
if (message?.origin?.kind !== 'injection' || !variant.startsWith(BASELINE_SKILL_ORIGIN_PREFIX)) {
|
|
36
|
+
return message;
|
|
37
|
+
}
|
|
38
|
+
const skillName = variant.slice(BASELINE_SKILL_ORIGIN_PREFIX.length).trim();
|
|
39
|
+
if (!skillName || !Array.isArray(message.content)) return message;
|
|
40
|
+
const textIndex = message.content.findIndex((part) => part?.type === 'text');
|
|
41
|
+
if (textIndex < 0) return message;
|
|
42
|
+
const compactText = `<system-reminder>\n${renderBaselineActivationPrompt({ skillName })}\n</system-reminder>`;
|
|
43
|
+
if (message.content[textIndex].text === compactText) return message;
|
|
44
|
+
const content = [...message.content];
|
|
45
|
+
content[textIndex] = { ...content[textIndex], text: compactText };
|
|
46
|
+
return { ...message, content };
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
module.exports = {
|
|
51
|
+
BASELINE_ACTIVATION_MAX_CHARS,
|
|
52
|
+
compactBaselineSkillInjections,
|
|
53
|
+
renderBaselineActivationPrompt,
|
|
54
|
+
};
|
|
@@ -91,9 +91,7 @@ function selectHistoricalToolResultOffloads(textLengths) {
|
|
|
91
91
|
selected.push(candidate.index);
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
return
|
|
95
|
-
? selected.sort((left, right) => left - right)
|
|
96
|
-
: [];
|
|
94
|
+
return selected.sort((left, right) => left - right);
|
|
97
95
|
}
|
|
98
96
|
|
|
99
97
|
module.exports = {
|
package/blun.mjs
CHANGED
|
@@ -76075,6 +76075,7 @@ var init_micro = __esmMin((() => {
|
|
|
76075
76075
|
}
|
|
76076
76076
|
compact(messages) {
|
|
76077
76077
|
const config = this.config;
|
|
76078
|
+
const historicalArgumentCutoff = Math.max(this.cutoff, messages.length - config.keepRecentMessages);
|
|
76078
76079
|
const completedToolCallIds = new Set(messages.filter((message) => message?.role === "tool" && message.toolCallId !== void 0).map((message) => message.toolCallId));
|
|
76079
76080
|
const serializedArgumentsMarker = JSON.stringify({ _blun_compacted: config.truncatedArgumentsMarker });
|
|
76080
76081
|
const result = [];
|
|
@@ -76087,7 +76088,7 @@ var init_micro = __esmMin((() => {
|
|
|
76087
76088
|
text: config.truncatedMarker
|
|
76088
76089
|
}]
|
|
76089
76090
|
});
|
|
76090
|
-
else if (i <
|
|
76091
|
+
else if (i < historicalArgumentCutoff && msg.role === "assistant" && Array.isArray(msg.toolCalls)) {
|
|
76091
76092
|
let changed = false;
|
|
76092
76093
|
const toolCalls = msg.toolCalls.map((call) => {
|
|
76093
76094
|
if (!completedToolCallIds.has(call.id) || typeof call.arguments !== "string" || this.toolArgumentTokens(call.arguments) < config.minContentTokens) return call;
|
|
@@ -78960,7 +78961,7 @@ var init_context$2 = __esmMin((() => {
|
|
|
78960
78961
|
}
|
|
78961
78962
|
project(messages, options) {
|
|
78962
78963
|
const anomalies = [];
|
|
78963
|
-
const result = project(this.agent.assistantMessageOffload.compact(this.agent.userMessageOffload.compact(this.agent.microCompaction.compact(this.agent.toolResultBatchOffload.compact(dedupeRepeatedInjections(messages))))), {
|
|
78964
|
+
const result = project(this.agent.assistantMessageOffload.compact(this.agent.userMessageOffload.compact(this.agent.microCompaction.compact(this.agent.toolResultBatchOffload.compact(dedupeRepeatedInjections(compactBaselineSkillInjections(messages)))))), {
|
|
78964
78965
|
...options,
|
|
78965
78966
|
onAnomaly: (anomaly) => {
|
|
78966
78967
|
anomalies.push(anomaly);
|
|
@@ -235799,15 +235800,7 @@ function renderUserSlashSkillPrompt(input) {
|
|
|
235799
235800
|
].join("\n");
|
|
235800
235801
|
}
|
|
235801
235802
|
function renderBaselineSkillPrompt(input) {
|
|
235802
|
-
return
|
|
235803
|
-
"This baseline skill is always active. Apply it silently whenever it is relevant.",
|
|
235804
|
-
"Additional skills selected by the user are additive and remain available.",
|
|
235805
|
-
"",
|
|
235806
|
-
renderSkillLoadedBlock({
|
|
235807
|
-
...input,
|
|
235808
|
-
trigger: "baseline"
|
|
235809
|
-
})
|
|
235810
|
-
].join("\n");
|
|
235803
|
+
return renderBaselineActivationPrompt(input);
|
|
235811
235804
|
}
|
|
235812
235805
|
function renderModelToolSkillPrompt(input) {
|
|
235813
235806
|
return [
|
|
@@ -235835,8 +235828,10 @@ function renderSkillAttributes(input) {
|
|
|
235835
235828
|
["args", input.skillArgs]
|
|
235836
235829
|
].filter((item) => item[1] !== void 0).map(([name, value]) => ` ${name}="${escapeXml$1(value)}"`).join("");
|
|
235837
235830
|
}
|
|
235831
|
+
var compactBaselineSkillInjections, renderBaselineActivationPrompt;
|
|
235838
235832
|
var init_prompt$2 = __esmMin((() => {
|
|
235839
235833
|
init_xml_escape();
|
|
235834
|
+
({ compactBaselineSkillInjections, renderBaselineActivationPrompt } = createRequire(import.meta.url)("./bin/baseline-skill-performance-policy.cjs"));
|
|
235840
235835
|
}));
|
|
235841
235836
|
//#endregion
|
|
235842
235837
|
//#region ../../packages/agent-core/src/agent/skill/index.ts
|
|
@@ -235885,11 +235880,8 @@ var init_skill$3 = __esmMin((() => {
|
|
|
235885
235880
|
if (skill === void 0) return false;
|
|
235886
235881
|
const variant = `${BASELINE_SKILL_ORIGIN_PREFIX}${skill.name}`;
|
|
235887
235882
|
if (this.agent.context.history.some((message) => message.origin?.kind === "injection" && message.origin.variant === variant)) return true;
|
|
235888
|
-
const skillContent = this.registry.renderSkillPrompt(skill, "");
|
|
235889
235883
|
this.agent.context.appendSystemReminder(renderBaselineSkillPrompt({
|
|
235890
235884
|
skillName: skill.name,
|
|
235891
|
-
skillArgs: "",
|
|
235892
|
-
skillContent,
|
|
235893
235885
|
skillSource: skill.source,
|
|
235894
235886
|
skillDir: skill.dir
|
|
235895
235887
|
}), {
|
|
@@ -297021,14 +297013,6 @@ var init_session$1 = __esmMin((() => {
|
|
|
297021
297013
|
});
|
|
297022
297014
|
await this.skills.loadRoots(roots);
|
|
297023
297015
|
registerBuiltinSkills(this.skills);
|
|
297024
|
-
const baseline = this.skills.getSkill(BASELINE_SKILL_NAME);
|
|
297025
|
-
if (baseline !== void 0) this.skills.register({
|
|
297026
|
-
...baseline,
|
|
297027
|
-
metadata: {
|
|
297028
|
-
...baseline.metadata,
|
|
297029
|
-
disableModelInvocation: true
|
|
297030
|
-
}
|
|
297031
|
-
}, { replace: true });
|
|
297032
297016
|
}
|
|
297033
297017
|
async loadMcpServers() {
|
|
297034
297018
|
const servers = this.currentMcpConfig?.servers;
|