blun-king-cli 9.1.104 → 9.1.105

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.100
12
+ npm install -g blun-king-cli@9.1.105
13
13
 
14
14
  Start
15
15
  -----
@@ -105,6 +105,8 @@ Das Telemetrieereignis `tool_result_batch_offloaded` meldet ausschließlich die
105
105
 
106
106
  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.
107
107
 
108
+ Version 9.1.105 ergänzt `TaskUpdate` für laufende Hintergrundagenten. King übergibt zusätzliche Anweisungen am nächsten sicheren Modellschritt an denselben aktiven Agenten, ohne ihn zu stoppen oder einen weiteren Agenten zu starten. Unbekannte und bereits beendete Aufgaben, Shell-Aufgaben sowie Agenten, die keine Aktualisierung mehr annehmen, werden unverändert abgewiesen.
109
+
108
110
  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.
109
111
 
110
112
  Rein lesende Sitzungsdiagnose
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.104
12
+ npm install -g blun-king-cli@9.1.105
13
13
  ```
14
14
 
15
15
  ## Reproduzierbares Staging und Packen
@@ -113,6 +113,8 @@ Große textbasierte Werkzeugergebnisse bleiben nicht mehr vollständig im Modell
113
113
 
114
114
  Version 9.1.104 lässt Shell-Befehle im Vordergrund auch bei sehr großen Ausgaben bis zum regulären Ende laufen. King schreibt bis zu 16 MiB fortlaufend in das private Aufgabenprotokoll, verwirft darüber hinausgehende Ausgaben und meldet den tatsächlichen Exit-Code, statt den Prozess wegen der Ausgabemenge zu beenden. Kleine Ausgaben, Hintergrundaufgaben, Zeitgrenzen und manuelle Abbrüche bleiben unverändert.
115
115
 
116
+ Version 9.1.105 ergänzt `TaskUpdate` für laufende Hintergrundagenten. King übergibt zusätzliche Anweisungen am nächsten sicheren Modellschritt an denselben aktiven Agenten, ohne ihn zu stoppen oder einen weiteren Agenten zu starten. Unbekannte und bereits beendete Aufgaben, Shell-Aufgaben sowie Agenten, die keine Aktualisierung mehr annehmen, werden unverändert abgewiesen.
117
+
116
118
  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.
117
119
 
118
120
  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.
package/blun.mjs CHANGED
@@ -28484,7 +28484,7 @@ var init_load = __esmMin((() => {
28484
28484
  //#region ../../packages/agent-core/src/profile/default/agent.yaml?raw
28485
28485
  var agent_default$1;
28486
28486
  var init_agent$3 = __esmMin((() => {
28487
- agent_default$1 = "name: agent\ndescription: Default BLUN King agent\n\nsystemPromptPath: ./system.md\npromptVars:\n roleAdditional: ''\n\ntools:\n - Read\n - Write\n - Edit\n - Grep\n - Glob\n - Bash\n - TaskList\n - TaskOutput\n - TaskStop\n - CronCreate\n - CronList\n - CronDelete\n - ReadMediaFile\n - TodoList\n - Skill\n - WebSearch\n - Agent\n - AgentSwarm\n - FetchURL\n - GenerateImage\n - GenerateVideo\n - GenerateSpeech\n - GetMedia\n - AskUserQuestion\n - MistakeRecord\n - CodebaseSearch\n - EnterPlanMode\n - ExitPlanMode\n - CreateGoal\n - GetGoal\n - SetGoalBudget\n - UpdateGoal\n - mcp__*\n\nsubagents:\n coder:\n description: General software engineering agent — the only subagent type with file-editing tools; use it for any delegated task that must modify code.\n explore:\n description: Fast codebase exploration with prompt-enforced read-only behavior.\n plan:\n description: Read-only implementation planning and architecture design.\n";
28487
+ agent_default$1 = "name: agent\ndescription: Default BLUN King agent\n\nsystemPromptPath: ./system.md\npromptVars:\n roleAdditional: ''\n\ntools:\n - Read\n - Write\n - Edit\n - Grep\n - Glob\n - Bash\n - TaskList\n - TaskOutput\n - TaskUpdate\n - TaskStop\n - CronCreate\n - CronList\n - CronDelete\n - ReadMediaFile\n - TodoList\n - Skill\n - WebSearch\n - Agent\n - AgentSwarm\n - FetchURL\n - GenerateImage\n - GenerateVideo\n - GenerateSpeech\n - GetMedia\n - AskUserQuestion\n - MistakeRecord\n - CodebaseSearch\n - EnterPlanMode\n - ExitPlanMode\n - CreateGoal\n - GetGoal\n - SetGoalBudget\n - UpdateGoal\n - mcp__*\n\nsubagents:\n coder:\n description: General software engineering agent — the only subagent type with file-editing tools; use it for any delegated task that must modify code.\n explore:\n description: Fast codebase exploration with prompt-enforced read-only behavior.\n plan:\n description: Read-only implementation planning and architecture design.\n";
28488
28488
  agent_default$1 = agent_default$1.replace(" - TodoList\n", " - TodoList\n - CompactConversation\n");
28489
28489
  }));
28490
28490
  //#endregion
@@ -29084,6 +29084,9 @@ var init_agent_task = __esmMin((() => {
29084
29084
  });
29085
29085
  }
29086
29086
  }
29087
+ update(message) {
29088
+ return this.subagentHost.updateActive(this.agentId, message);
29089
+ }
29087
29090
  onDetach() {
29088
29091
  this.runInBackground = true;
29089
29092
  this.subagentHost.markActiveChildDetached(this.agentId);
@@ -29497,6 +29500,17 @@ var init_background = __esmMin((() => {
29497
29500
  if (entry !== void 0) return this.toInfo(entry);
29498
29501
  return this.ghosts.get(taskId);
29499
29502
  }
29503
+ updateAgentTask(taskId, message) {
29504
+ const entry = this.tasks.get(taskId);
29505
+ if (entry === void 0) throw new Error(`Task not found: ${taskId}`);
29506
+ if (TERMINAL_STATUSES.has(entry.status)) throw new Error(`Task ${taskId} is already in terminal state: ${entry.status}`);
29507
+ if (entry.task.kind !== "agent" || typeof entry.task.update !== "function") throw new Error(`Task ${taskId} is not an agent task and cannot receive updates`);
29508
+ const turnId = entry.task.update(message);
29509
+ return {
29510
+ ...this.toInfo(entry),
29511
+ turnId
29512
+ };
29513
+ }
29500
29514
  /**
29501
29515
  * List tasks, optionally filtering to active-only.
29502
29516
  *
@@ -232803,7 +232817,7 @@ var init_manager$2 = __esmMin((() => {
232803
232817
  init_plugin_session_start();
232804
232818
  init_plan_mode();
232805
232819
  init_tool_awareness();
232806
- ACTIVE_BACKGROUND_TASK_GUIDANCE = "The conversation was compacted, so the earlier messages that started these background tasks are gone — but the tasks are still running from before. Do not start duplicates. Use TaskOutput to fetch a task’s result, TaskList to list them, and TaskStop to cancel one.";
232820
+ ACTIVE_BACKGROUND_TASK_GUIDANCE = "The conversation was compacted, so the earlier messages that started these background tasks are gone — but the tasks are still running from before. Do not start duplicates. Use TaskOutput to fetch a task’s result, TaskList to list them, TaskUpdate to send additional instructions to a running agent task, and TaskStop to cancel one.";
232807
232821
  InjectionManager = class {
232808
232822
  agent;
232809
232823
  injectors;
@@ -232980,6 +232994,7 @@ var init_default_tool_approve = __esmMin((() => {
232980
232994
  "TodoList",
232981
232995
  "TaskList",
232982
232996
  "TaskOutput",
232997
+ "TaskUpdate",
232983
232998
  "CronList",
232984
232999
  "WebSearch",
232985
233000
  "FetchURL",
@@ -250911,6 +250926,55 @@ var init_task_output = __esmMin((() => {
250911
250926
  };
250912
250927
  }));
250913
250928
  //#endregion
250929
+ //#region ../../packages/agent-core/src/tools/background/task-update.md?raw
250930
+ var task_update_default;
250931
+ var init_task_update$1 = __esmMin((() => {
250932
+ task_update_default = "Send additional instructions to a running background agent without stopping it or starting another agent.\n\nThe update is inserted into the same agent's active turn at the next safe model-step boundary, so the agent keeps its existing context and completed work. Use the exact task_id returned by Agent(run_in_background=true) or shown by TaskList.\n\nThis tool accepts only a currently running agent task. Shell tasks, unknown tasks, completed tasks, and tasks that are no longer accepting updates are rejected without changing them.";
250933
+ }));
250934
+ //#endregion
250935
+ //#region ../../packages/agent-core/src/tools/background/task-update.ts
250936
+ var TaskUpdateInputSchema, TaskUpdateTool;
250937
+ var init_task_update = __esmMin((() => {
250938
+ init_zod$1();
250939
+ init_input_schema();
250940
+ init_rule_match();
250941
+ init_task_update$1();
250942
+ TaskUpdateInputSchema = object({
250943
+ task_id: string().trim().min(1).describe("The running background agent task ID to update."),
250944
+ message: string().trim().min(1).describe("Additional instruction for the same running agent.")
250945
+ });
250946
+ TaskUpdateTool = class {
250947
+ manager;
250948
+ name = "TaskUpdate";
250949
+ description = task_update_default;
250950
+ parameters = toInputJsonSchema(TaskUpdateInputSchema);
250951
+ constructor(manager) {
250952
+ this.manager = manager;
250953
+ }
250954
+ resolveExecution(args) {
250955
+ return {
250956
+ description: `Updating agent task ${args.task_id}`,
250957
+ approvalRule: this.name,
250958
+ matchesRule: (ruleArgs) => matchesGlobRuleSubject(ruleArgs, args.task_id),
250959
+ execute: async () => {
250960
+ try {
250961
+ const info = this.manager.updateAgentTask(args.task_id, args.message);
250962
+ return {
250963
+ output: `task_id: ${info.taskId}\nstatus: ${info.status}\nagent_id: ${info.agentId}\nturn_id: ${String(info.turnId)}\nupdate: accepted`,
250964
+ isError: false
250965
+ };
250966
+ } catch (error) {
250967
+ return {
250968
+ output: error instanceof Error ? error.message : String(error),
250969
+ isError: true
250970
+ };
250971
+ }
250972
+ }
250973
+ };
250974
+ }
250975
+ };
250976
+ }));
250977
+ //#endregion
250914
250978
  //#region ../../packages/agent-core/src/tools/background/task-stop.md?raw
250915
250979
  var task_stop_default;
250916
250980
  var init_task_stop$1 = __esmMin((() => {
@@ -251950,6 +252014,22 @@ IMPORTANT:
251950
252014
  })
251951
252015
  };
251952
252016
  }
252017
+ updateActive(agentId, message) {
252018
+ const active = this.activeChildren.get(agentId);
252019
+ if (active === void 0 || active.runInBackground !== true) throw new Error(`Agent instance "${agentId}" is not running in the background`);
252020
+ const child = this.session.getReadyAgent(agentId);
252021
+ if (child === void 0 || !child.turn.hasActiveTurn) throw new Error(`Agent instance "${agentId}" has no active turn to update`);
252022
+ const turnId = child.turn.currentId;
252023
+ const acceptedTurnId = child.turn.steerActive([{
252024
+ type: "text",
252025
+ text: message
252026
+ }], turnId, {
252027
+ kind: "system_trigger",
252028
+ name: "subagent_update"
252029
+ });
252030
+ if (acceptedTurnId === null) throw new Error(`Agent instance "${agentId}" is not accepting updates at this boundary`);
252031
+ return acceptedTurnId;
252032
+ }
251953
252033
  async retry(agentId, options) {
251954
252034
  options.signal.throwIfAborted();
251955
252035
  const { parent, child, profileName } = await this.ensureIdleSubagent(agentId);
@@ -263218,6 +263298,7 @@ var init_blun_media$1 = __esmMin((() => {
263218
263298
  var init_builtin = __esmMin((() => {
263219
263299
  init_task_list();
263220
263300
  init_task_output();
263301
+ init_task_update();
263221
263302
  init_task_stop();
263222
263303
  init_cron_create();
263223
263304
  init_cron_delete();
@@ -263660,6 +263741,7 @@ var init_tool$1 = __esmMin((() => {
263660
263741
  new CompactConversationTool(this.agent),
263661
263742
  new TaskListTool(background),
263662
263743
  new TaskOutputTool(background),
263744
+ new TaskUpdateTool(background),
263663
263745
  new TaskStopTool(background),
263664
263746
  this.agent.cron && new CronCreateTool(this.agent.cron),
263665
263747
  this.agent.cron && new CronListTool(this.agent.cron),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.104",
3
+ "version": "9.1.105",
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": {