blun-king-cli 2.6.0 → 2.6.2
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/blun.js +31 -9
- package/package.json +1 -1
package/bin/blun.js
CHANGED
|
@@ -25,12 +25,9 @@ if (!fs.existsSync(SKILLS_DIR)) fs.mkdirSync(SKILLS_DIR, { recursive: true });
|
|
|
25
25
|
|
|
26
26
|
// ── Default Config ──
|
|
27
27
|
function loadConfig() {
|
|
28
|
-
|
|
29
|
-
try { return JSON.parse(fs.readFileSync(CONFIG_FILE, "utf8")); } catch(e) {}
|
|
30
|
-
}
|
|
31
|
-
return {
|
|
28
|
+
var defaults = {
|
|
32
29
|
auth: { type: "api_key", api_key: "", oauth_token: "", oauth_expires: null },
|
|
33
|
-
api: { base_url: "http://176.9.158.30:3200", timeout: 60000 },
|
|
30
|
+
api: { base_url: "http://176.9.158.30:3200", timeout: 60000, key: "" },
|
|
34
31
|
telegram: { enabled: false, bot_token: "", chat_id: "" },
|
|
35
32
|
model: "blun-king-v100",
|
|
36
33
|
workdir: process.cwd(),
|
|
@@ -38,6 +35,20 @@ function loadConfig() {
|
|
|
38
35
|
verbose: false,
|
|
39
36
|
watchdog: { enabled: false, interval: 600 }
|
|
40
37
|
};
|
|
38
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
39
|
+
try {
|
|
40
|
+
var saved = JSON.parse(fs.readFileSync(CONFIG_FILE, "utf8"));
|
|
41
|
+
// Deep merge saved over defaults
|
|
42
|
+
Object.keys(defaults).forEach(function(k) {
|
|
43
|
+
if (typeof defaults[k] === "object" && defaults[k] !== null && saved[k]) {
|
|
44
|
+
defaults[k] = Object.assign({}, defaults[k], saved[k]);
|
|
45
|
+
} else if (saved[k] !== undefined) {
|
|
46
|
+
defaults[k] = saved[k];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
} catch(e) {}
|
|
50
|
+
}
|
|
51
|
+
return defaults;
|
|
41
52
|
}
|
|
42
53
|
|
|
43
54
|
function saveConfig(cfg) {
|
|
@@ -74,8 +85,9 @@ function apiCall(method, endpoint, body) {
|
|
|
74
85
|
timeout: config.api.timeout
|
|
75
86
|
};
|
|
76
87
|
|
|
77
|
-
|
|
78
|
-
|
|
88
|
+
var authToken = config.api.key || config.auth.api_key;
|
|
89
|
+
if (authToken) {
|
|
90
|
+
options.headers["Authorization"] = "Bearer " + authToken;
|
|
79
91
|
} else if (config.auth.type === "oauth" && config.auth.oauth_token) {
|
|
80
92
|
options.headers["Authorization"] = "Bearer " + config.auth.oauth_token;
|
|
81
93
|
}
|
|
@@ -495,9 +507,17 @@ async function sendChat(message) {
|
|
|
495
507
|
chatHistory.push({ role: "user", content: message });
|
|
496
508
|
chatHistory.push({ role: "assistant", content: resp.data.answer });
|
|
497
509
|
|
|
510
|
+
// Token tracking
|
|
511
|
+
var inTok = Math.ceil(message.length / 3.5);
|
|
512
|
+
var outTok = Math.ceil((resp.data.answer || "").length / 3.5);
|
|
513
|
+
sessionCost.requests++;
|
|
514
|
+
sessionCost.inputTokensEst += inTok;
|
|
515
|
+
sessionCost.outputTokensEst += outTok;
|
|
516
|
+
|
|
498
517
|
var q = resp.data.quality || {};
|
|
518
|
+
var tokInfo = C.dim + (inTok + outTok) + " tok" + C.reset;
|
|
499
519
|
var meta = resp.data.task_type + "/" + resp.data.role + " " + BOX.dot + " score: " + (q.score || "?") +
|
|
500
|
-
(q.retried ? " " + BOX.dot + " retried" : "");
|
|
520
|
+
(q.retried ? " " + BOX.dot + " retried" : "") + " " + BOX.dot + " " + tokInfo;
|
|
501
521
|
printAnswer(resp.data.answer, meta);
|
|
502
522
|
|
|
503
523
|
// Auto Memory Dream Mode
|
|
@@ -2442,7 +2462,9 @@ async function main() {
|
|
|
2442
2462
|
var permColor = isDangerous ? C.red + C.bold : permMode === "deny" ? C.red : C.yellow;
|
|
2443
2463
|
var modelName = typeof config.model === "string" ? config.model : (config.model && config.model.name ? config.model.name : "default");
|
|
2444
2464
|
var wdShort = config.workdir ? path.basename(config.workdir) : "~";
|
|
2445
|
-
|
|
2465
|
+
var totalTok = sessionCost.inputTokensEst + sessionCost.outputTokensEst;
|
|
2466
|
+
var tokStr = totalTok > 1000 ? (totalTok / 1000).toFixed(1) + "k" : String(totalTok);
|
|
2467
|
+
lines.push(permColor + " " + permIcon + " " + permLabel + C.reset + C.dim + " \u2502 " + C.reset + C.cyan + modelName + C.reset + C.dim + " \u2502 " + C.reset + C.dim + wdShort + C.reset + C.dim + " \u2502 " + C.reset + C.yellow + tokStr + " tok" + C.reset);
|
|
2446
2468
|
|
|
2447
2469
|
// Menu
|
|
2448
2470
|
if (menuVisible && menuItems.length > 0) {
|