blun-king-cli 9.1.189 → 9.1.191

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.
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ function wholeTokenCount(value) {
4
+ if (!Number.isFinite(value) || value <= 0) return 0;
5
+ return Math.floor(value);
6
+ }
7
+
8
+ function reconcileContextBudget(input = {}) {
9
+ const totalTokens = wholeTokenCount(input.totalTokens);
10
+ const maxTokens = Math.max(totalTokens, wholeTokenCount(input.maxTokens));
11
+ const conversationTokens = Math.min(totalTokens, wholeTokenCount(input.conversationTokens));
12
+ const toolTokens = Math.min(
13
+ totalTokens - conversationTokens,
14
+ wholeTokenCount(input.toolTokens),
15
+ );
16
+ const systemTokens = totalTokens - conversationTokens - toolTokens;
17
+
18
+ return {
19
+ systemTokens,
20
+ conversationTokens,
21
+ toolTokens,
22
+ freeTokens: maxTokens - totalTokens,
23
+ totalTokens,
24
+ maxTokens,
25
+ };
26
+ }
27
+
28
+ module.exports = {
29
+ reconcileContextBudget,
30
+ wholeTokenCount,
31
+ };
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ function projectLoopEventForRecord(event) {
4
+ if (
5
+ event?.type !== 'tool.call'
6
+ || (!Object.prototype.hasOwnProperty.call(event, 'display')
7
+ && !Object.prototype.hasOwnProperty.call(event, 'description'))
8
+ ) return event;
9
+
10
+ const { display: _display, description: _description, ...recordedEvent } = event;
11
+ return recordedEvent;
12
+ }
13
+
14
+ module.exports = { projectLoopEventForRecord };
package/blun.mjs CHANGED
@@ -75986,7 +75986,7 @@ var init_full = __esmMin((() => {
75986
75986
  }));
75987
75987
  //#endregion
75988
75988
  //#region ../../packages/agent-core/src/agent/compaction/micro.ts
75989
- var selectMicroCompactionCutoff, MICRO_COMPACTION_RECENT_MESSAGES, MICRO_COMPACTION_TOOL_ARGUMENTS_ENABLED, MICRO_COMPACTION_TOOL_ARGUMENT_MIN_TOKENS, isPersistedToolResultReference, projectHistoricalUnaddressedTelegramMessages, dedupeRepeatedUserMessages, projectRepeatedAssistantResponses, compactHistoricalSkillActivations, dedupeRecurringCronWakeups, dedupeRepeatedInjections, DEFAULT_CONFIG, MicroCompaction;
75989
+ var selectMicroCompactionCutoff, MICRO_COMPACTION_RECENT_MESSAGES, MICRO_COMPACTION_TOOL_ARGUMENTS_ENABLED, MICRO_COMPACTION_TOOL_ARGUMENT_MIN_TOKENS, isPersistedToolResultReference, projectHistoricalUnaddressedTelegramMessages, dedupeRepeatedUserMessages, projectRepeatedAssistantResponses, compactHistoricalSkillActivations, dedupeRecurringCronWakeups, dedupeRepeatedInjections, projectLoopEventForRecord, DEFAULT_CONFIG, MicroCompaction;
75990
75990
  var init_micro = __esmMin((() => {
75991
75991
  ({ selectMicroCompactionCutoff, MICRO_COMPACTION_RECENT_MESSAGES, MICRO_COMPACTION_TOOL_ARGUMENTS_ENABLED, MICRO_COMPACTION_TOOL_ARGUMENT_MIN_TOKENS } = createRequire(import.meta.url)("./bin/micro-compaction-policy.cjs"));
75992
75992
  ({ isPersistedToolResultReference } = createRequire(import.meta.url)("./bin/tool-result-offload-policy.cjs"));
@@ -75995,6 +75995,7 @@ var init_micro = __esmMin((() => {
75995
75995
  ({ projectRepeatedAssistantResponses } = createRequire(import.meta.url)("./bin/repeated-assistant-response-policy.cjs"));
75996
75996
  ({ compactHistoricalSkillActivations } = createRequire(import.meta.url)("./bin/skill-activation-performance-policy.cjs"));
75997
75997
  ({ dedupeRecurringCronWakeups, dedupeRepeatedInjections } = createRequire(import.meta.url)("./bin/repeated-injection-projection.cjs"));
75998
+ ({ projectLoopEventForRecord } = createRequire(import.meta.url)("./bin/loop-event-record-policy.cjs"));
75998
75999
  init_tokens();
75999
76000
  DEFAULT_CONFIG = {
76000
76001
  keepRecentMessages: MICRO_COMPACTION_RECENT_MESSAGES,
@@ -79084,7 +79085,7 @@ var init_context$2 = __esmMin((() => {
79084
79085
  appendLoopEvent(event) {
79085
79086
  this.agent.records.logRecord({
79086
79087
  type: "context.append_loop_event",
79087
- event
79088
+ event: projectLoopEventForRecord(event)
79088
79089
  });
79089
79090
  switch (event.type) {
79090
79091
  case "step.begin": {
@@ -265083,7 +265084,9 @@ var init_agent = __esmMin((() => {
265083
265084
  ...this.context.data(),
265084
265085
  projectedTokenCount: this.fullCompaction.estimateCurrentRequestTokens(),
265085
265086
  effectiveMaxContextTokens: this.fullCompaction.getEffectiveMaxContextTokens(),
265086
- compactionBudgetTokens: this.fullCompaction.getCompactionBudgetTokens()
265087
+ compactionBudgetTokens: this.fullCompaction.getCompactionBudgetTokens(),
265088
+ conversationTokens: estimateTokensForMessages(this.context.messages),
265089
+ toolSchemaTokens: estimateTokensForTools(this.tools.loopTools)
265087
265090
  }),
265088
265091
  getConfig: () => this.config.data(),
265089
265092
  getPermission: () => this.permission.data(),
@@ -327381,6 +327384,8 @@ var SDKRpcClientBase = class {
327381
327384
  contextTokens,
327382
327385
  maxContextTokens,
327383
327386
  compactionBudgetTokens: context.compactionBudgetTokens,
327387
+ conversationTokens: context.conversationTokens,
327388
+ toolSchemaTokens: context.toolSchemaTokens,
327384
327389
  contextUsage,
327385
327390
  usage: hasUsage ? usage : void 0
327386
327391
  };
@@ -402996,7 +403001,7 @@ const BUILTIN_SLASH_COMMAND_DEFINITIONS = [
402996
403001
  },
402997
403002
  {
402998
403003
  name: "usage",
402999
- aliases: [],
403004
+ aliases: ["context"],
403000
403005
  descriptionKey: "command.usage.description",
403001
403006
  priority: 60,
403002
403007
  availability: "always"
@@ -416737,6 +416742,7 @@ function buildManagedUsageReportLines(options) {
416737
416742
  const errorStyle = (text) => currentTheme.fg("error", text);
416738
416743
  return buildManagedUsageSection(options.managedUsage, options.managedUsageError, accent, value, muted, errorStyle);
416739
416744
  }
416745
+ var { reconcileContextBudget } = createRequire(import.meta.url)("./bin/context-budget-ledger.cjs");
416740
416746
  function buildUsageReportLines(options) {
416741
416747
  const accent = (text) => currentTheme.boldFg("primary", text);
416742
416748
  const value = (text) => currentTheme.fg("text", text);
@@ -416752,6 +416758,22 @@ function buildUsageReportLines(options) {
416752
416758
  lines.push("");
416753
416759
  lines.push(accent(uiText("usage.context.title")));
416754
416760
  lines.push(` ${barColoured} ${value(pct.padStart(6, " "))} ` + muted(`(${formatExactTokenCount(options.contextTokens, getCurrentUiLocale())} / ${formatExactTokenCount(options.maxContextTokens, getCurrentUiLocale())})`));
416761
+ if (Number.isFinite(options.conversationTokens) && Number.isFinite(options.toolSchemaTokens)) {
416762
+ const budget = reconcileContextBudget({
416763
+ totalTokens: options.contextTokens,
416764
+ maxTokens: options.maxContextTokens,
416765
+ conversationTokens: options.conversationTokens,
416766
+ toolTokens: options.toolSchemaTokens
416767
+ });
416768
+ const locale = getCurrentUiLocale();
416769
+ const contextRows = [
416770
+ [uiText("export.system"), budget.systemTokens],
416771
+ [uiText("export.conversation"), budget.conversationTokens],
416772
+ [uiText("mcp.capability.tools"), budget.toolTokens]
416773
+ ];
416774
+ for (const [label, count] of contextRows) lines.push(` ${muted(`${label}:`)} ${value(formatExactTokenCount(count, locale))}`);
416775
+ lines.push(` ${muted(uiText("usage.plan.metric.remaining", { count: formatExactTokenCount(budget.freeTokens, locale) }))}`);
416776
+ }
416755
416777
  }
416756
416778
  const managedSection = buildManagedUsageReportLines({
416757
416779
  managedUsage: options.managedUsage,
@@ -417766,14 +417788,19 @@ function managedUsageErrorCode(error) {
417766
417788
  return record.status === 401 || record.status === 403 ? "unauthenticated" : "unavailable";
417767
417789
  }
417768
417790
  async function showUsage(host) {
417769
- const sessionUsage = await loadSessionUsageReport(host);
417770
- const managedUsage = await loadManagedUsageReport(host);
417791
+ const [sessionUsage, managedUsage, runtimeStatus] = await Promise.all([
417792
+ loadSessionUsageReport(host),
417793
+ loadManagedUsageReport(host),
417794
+ loadRuntimeStatusReport(host)
417795
+ ]);
417771
417796
  const reportArgs = {
417772
417797
  sessionUsage: sessionUsage.usage,
417773
417798
  sessionUsageError: sessionUsage.error,
417774
417799
  contextUsage: host.state.appState.contextUsage,
417775
- contextTokens: host.state.appState.contextTokens,
417776
- maxContextTokens: host.state.appState.maxContextTokens,
417800
+ contextTokens: runtimeStatus.status?.contextTokens ?? host.state.appState.contextTokens,
417801
+ maxContextTokens: runtimeStatus.status?.maxContextTokens ?? host.state.appState.maxContextTokens,
417802
+ conversationTokens: runtimeStatus.status?.conversationTokens,
417803
+ toolSchemaTokens: runtimeStatus.status?.toolSchemaTokens,
417777
417804
  managedUsage: managedUsage?.usage,
417778
417805
  managedUsageError: managedUsage?.error
417779
417806
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.189",
3
+ "version": "9.1.191",
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": {