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.
- package/bin/approval-rejection-stop.cjs +15 -0
- package/bin/context-budget-ledger.cjs +31 -0
- package/blun.mjs +34 -10
- package/package.json +1 -1
|
@@ -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
|
|
417771
|
-
|
|
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
|
};
|