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.
- package/bin/context-budget-ledger.cjs +31 -0
- package/bin/loop-event-record-policy.cjs +14 -0
- package/blun.mjs +35 -8
- 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
|
+
};
|
|
@@ -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
|
|
417770
|
-
|
|
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
|
};
|