blun-king-cli 9.1.190 → 9.1.192

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,15 @@
1
+ 'use strict';
2
+
3
+ function buildApprovalRejectionStop(output) {
4
+ return {
5
+ syntheticResult: {
6
+ output,
7
+ isError: true,
8
+ stopTurn: true,
9
+ },
10
+ };
11
+ }
12
+
13
+ module.exports = {
14
+ buildApprovalRejectionStop,
15
+ };
@@ -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
+ };
package/blun.mjs CHANGED
@@ -233964,10 +233964,7 @@ var init_permission = __esmMin((() => {
233964
233964
  const resolved = result.resolveApproval?.(response);
233965
233965
  if (resolved !== void 0) return this.permissionPolicyResolutionToPrepare(resolved, context, policyName);
233966
233966
  if (response.decision === "approved") return;
233967
- return {
233968
- block: true,
233969
- reason: this.formatApprovalRejectionMessage(name, response)
233970
- };
233967
+ return buildApprovalRejectionStop(this.formatApprovalRejectionMessage(name, response));
233971
233968
  }
233972
233969
  async evaluatePolicies(context) {
233973
233970
  for (const policy of this.policies) {
@@ -265084,7 +265081,9 @@ var init_agent = __esmMin((() => {
265084
265081
  ...this.context.data(),
265085
265082
  projectedTokenCount: this.fullCompaction.estimateCurrentRequestTokens(),
265086
265083
  effectiveMaxContextTokens: this.fullCompaction.getEffectiveMaxContextTokens(),
265087
- compactionBudgetTokens: this.fullCompaction.getCompactionBudgetTokens()
265084
+ compactionBudgetTokens: this.fullCompaction.getCompactionBudgetTokens(),
265085
+ conversationTokens: estimateTokensForMessages(this.context.messages),
265086
+ toolSchemaTokens: estimateTokensForTools(this.tools.loopTools)
265088
265087
  }),
265089
265088
  getConfig: () => this.config.data(),
265090
265089
  getPermission: () => this.permission.data(),
@@ -327382,6 +327381,8 @@ var SDKRpcClientBase = class {
327382
327381
  contextTokens,
327383
327382
  maxContextTokens,
327384
327383
  compactionBudgetTokens: context.compactionBudgetTokens,
327384
+ conversationTokens: context.conversationTokens,
327385
+ toolSchemaTokens: context.toolSchemaTokens,
327385
327386
  contextUsage,
327386
327387
  usage: hasUsage ? usage : void 0
327387
327388
  };
@@ -402997,7 +402998,7 @@ const BUILTIN_SLASH_COMMAND_DEFINITIONS = [
402997
402998
  },
402998
402999
  {
402999
403000
  name: "usage",
403000
- aliases: [],
403001
+ aliases: ["context"],
403001
403002
  descriptionKey: "command.usage.description",
403002
403003
  priority: 60,
403003
403004
  availability: "always"
@@ -416738,6 +416739,8 @@ function buildManagedUsageReportLines(options) {
416738
416739
  const errorStyle = (text) => currentTheme.fg("error", text);
416739
416740
  return buildManagedUsageSection(options.managedUsage, options.managedUsageError, accent, value, muted, errorStyle);
416740
416741
  }
416742
+ var { buildApprovalRejectionStop } = createRequire(import.meta.url)("./bin/approval-rejection-stop.cjs");
416743
+ var { reconcileContextBudget } = createRequire(import.meta.url)("./bin/context-budget-ledger.cjs");
416741
416744
  function buildUsageReportLines(options) {
416742
416745
  const accent = (text) => currentTheme.boldFg("primary", text);
416743
416746
  const value = (text) => currentTheme.fg("text", text);
@@ -416753,6 +416756,22 @@ function buildUsageReportLines(options) {
416753
416756
  lines.push("");
416754
416757
  lines.push(accent(uiText("usage.context.title")));
416755
416758
  lines.push(` ${barColoured} ${value(pct.padStart(6, " "))} ` + muted(`(${formatExactTokenCount(options.contextTokens, getCurrentUiLocale())} / ${formatExactTokenCount(options.maxContextTokens, getCurrentUiLocale())})`));
416759
+ if (Number.isFinite(options.conversationTokens) && Number.isFinite(options.toolSchemaTokens)) {
416760
+ const budget = reconcileContextBudget({
416761
+ totalTokens: options.contextTokens,
416762
+ maxTokens: options.maxContextTokens,
416763
+ conversationTokens: options.conversationTokens,
416764
+ toolTokens: options.toolSchemaTokens
416765
+ });
416766
+ const locale = getCurrentUiLocale();
416767
+ const contextRows = [
416768
+ [uiText("export.system"), budget.systemTokens],
416769
+ [uiText("export.conversation"), budget.conversationTokens],
416770
+ [uiText("mcp.capability.tools"), budget.toolTokens]
416771
+ ];
416772
+ for (const [label, count] of contextRows) lines.push(` ${muted(`${label}:`)} ${value(formatExactTokenCount(count, locale))}`);
416773
+ lines.push(` ${muted(uiText("usage.plan.metric.remaining", { count: formatExactTokenCount(budget.freeTokens, locale) }))}`);
416774
+ }
416756
416775
  }
416757
416776
  const managedSection = buildManagedUsageReportLines({
416758
416777
  managedUsage: options.managedUsage,
@@ -417767,14 +417786,19 @@ function managedUsageErrorCode(error) {
417767
417786
  return record.status === 401 || record.status === 403 ? "unauthenticated" : "unavailable";
417768
417787
  }
417769
417788
  async function showUsage(host) {
417770
- const sessionUsage = await loadSessionUsageReport(host);
417771
- const managedUsage = await loadManagedUsageReport(host);
417789
+ const [sessionUsage, managedUsage, runtimeStatus] = await Promise.all([
417790
+ loadSessionUsageReport(host),
417791
+ loadManagedUsageReport(host),
417792
+ loadRuntimeStatusReport(host)
417793
+ ]);
417772
417794
  const reportArgs = {
417773
417795
  sessionUsage: sessionUsage.usage,
417774
417796
  sessionUsageError: sessionUsage.error,
417775
417797
  contextUsage: host.state.appState.contextUsage,
417776
- contextTokens: host.state.appState.contextTokens,
417777
- maxContextTokens: host.state.appState.maxContextTokens,
417798
+ contextTokens: runtimeStatus.status?.contextTokens ?? host.state.appState.contextTokens,
417799
+ maxContextTokens: runtimeStatus.status?.maxContextTokens ?? host.state.appState.maxContextTokens,
417800
+ conversationTokens: runtimeStatus.status?.conversationTokens,
417801
+ toolSchemaTokens: runtimeStatus.status?.toolSchemaTokens,
417778
417802
  managedUsage: managedUsage?.usage,
417779
417803
  managedUsageError: managedUsage?.error
417780
417804
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.190",
3
+ "version": "9.1.192",
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": {