@bgicli/bgicli 2.7.0 → 2.7.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/dist/bgi.js CHANGED
@@ -17200,7 +17200,7 @@ function clearCheckpoints(sessionId) {
17200
17200
 
17201
17201
  // src/index.ts
17202
17202
  var import_fs7 = require("fs");
17203
- var VERSION2 = "2.7.0";
17203
+ var VERSION2 = "2.7.2";
17204
17204
  var BRAND2 = "bgi".toLowerCase();
17205
17205
  var SKILLHUB_HUBS = {
17206
17206
  bgi: { label: "BGI\u5185\u7F51", apiBase: "https://clawhub.ai", backend: "clawhub" },
@@ -17404,32 +17404,8 @@ function installBundledData() {
17404
17404
  }
17405
17405
  }
17406
17406
  function printBanner() {
17407
- if (BRAND2 === "bio") {
17408
- console.log(source_default.cyan.bold(`
17409
- \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
17410
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551
17411
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17412
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17413
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551
17414
- \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D v${VERSION2}`));
17415
- } else if (BRAND2 === "mbp") {
17416
- console.log(source_default.cyan.bold(`
17417
- \u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
17418
- \u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551
17419
- \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17420
- \u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17421
- \u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551
17422
- \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D v${VERSION2}`));
17423
- } else {
17424
- console.log(source_default.cyan.bold(`
17425
- \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
17426
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551
17427
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17428
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17429
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551
17430
- \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D v${VERSION2}`));
17431
- }
17432
- console.log(source_default.dim(" \u751F\u7269\u4FE1\u606F\u5B66 AI \u7EC8\u7AEF\u52A9\u624B \u2014 Bioinformatics AI Terminal"));
17407
+ console.log(source_default.cyan.bold(`
17408
+ ${BRAND2}`) + source_default.dim(` v${VERSION2} \u751F\u7269\u4FE1\u606F\u5B66 AI \u7EC8\u7AEF\u52A9\u624B`));
17433
17409
  console.log();
17434
17410
  }
17435
17411
  function printHelp() {
@@ -19371,20 +19347,29 @@ ${expanded}` : expanded;
19371
19347
  try {
19372
19348
  const currentCfg = loadConfig();
19373
19349
  currentAbortController = new AbortController();
19374
- const debugT0 = debugMode ? Date.now() : 0;
19375
- const debugTokensBefore = debugMode ? { in: sessionStats.inputTokens, out: sessionStats.outputTokens } : null;
19350
+ const roundT0 = Date.now();
19351
+ const tokensBefore = { in: sessionStats.inputTokens, out: sessionStats.outputTokens };
19376
19352
  const reply = await chat(history, currentCfg, systemPrompt, sessionStats, currentAbortController.signal);
19377
19353
  currentAbortController = null;
19378
- if (debugMode && debugTokensBefore && reply) {
19379
- const elapsedMs = Date.now() - debugT0;
19380
- const dIn = sessionStats.inputTokens - debugTokensBefore.in;
19381
- const dOut = sessionStats.outputTokens - debugTokensBefore.out;
19354
+ if (reply) {
19355
+ const elapsedMs = Date.now() - roundT0;
19356
+ const dIn = sessionStats.inputTokens - tokensBefore.in;
19357
+ const dOut = sessionStats.outputTokens - tokensBefore.out;
19358
+ const elapsed = (elapsedMs / 1e3).toFixed(2);
19359
+ console.log(
19360
+ source_default.dim(`
19361
+ \u23F1 ${elapsed}s`) + source_default.dim(" \xB7 ") + source_default.dim(`\u2191 ${dIn}`) + source_default.dim(" ") + source_default.dim(`\u2193 ${dOut} tokens`)
19362
+ );
19363
+ }
19364
+ if (debugMode && reply) {
19365
+ const elapsedMs = Date.now() - roundT0;
19366
+ const dIn = sessionStats.inputTokens - tokensBefore.in;
19367
+ const dOut = sessionStats.outputTokens - tokensBefore.out;
19382
19368
  try {
19383
19369
  appendDebugRound(systemPrompt, history, reply, elapsedMs, dIn, dOut);
19384
19370
  } catch {
19385
19371
  }
19386
- console.log(source_default.bold.yellow(`
19387
- [DEBUG] \u5DF2\u8BB0\u5F55 \u2192 ${debugFilePath}`));
19372
+ console.log(source_default.bold.yellow(` [DEBUG] \u5DF2\u8BB0\u5F55 \u2192 ${debugFilePath}`));
19388
19373
  }
19389
19374
  if (!reply && history[history.length - 1]?.role === "user") {
19390
19375
  history.pop();
@@ -19399,10 +19384,9 @@ ${expanded}` : expanded;
19399
19384
  saveCheckpoint(sessionId, label, history, Array.from(injectedSkills.keys()));
19400
19385
  lastCheckpointMsgCount = history.length;
19401
19386
  }
19402
- if (injectedSkills.size > 0) {
19403
- const ids = Array.from(injectedSkills.keys()).join(" \xB7 ");
19404
- console.log(source_default.dim(`
19405
- [\u6FC0\u6D3B Skill: ${ids}]`));
19387
+ const activeNonPerm = Array.from(injectedSkills.keys()).filter((id) => !permanentSkillIds.has(id));
19388
+ if (activeNonPerm.length > 0) {
19389
+ console.log(source_default.dim(` [\u6FC0\u6D3B Skill: ${activeNonPerm.join(" \xB7 ")}]`));
19406
19390
  }
19407
19391
  } catch (err) {
19408
19392
  currentAbortController = null;
package/dist/bio.js CHANGED
@@ -17200,7 +17200,7 @@ function clearCheckpoints(sessionId) {
17200
17200
 
17201
17201
  // src/index.ts
17202
17202
  var import_fs7 = require("fs");
17203
- var VERSION2 = "2.7.0";
17203
+ var VERSION2 = "2.7.2";
17204
17204
  var BRAND2 = "bio".toLowerCase();
17205
17205
  var SKILLHUB_HUBS = {
17206
17206
  bgi: { label: "BGI\u5185\u7F51", apiBase: "https://clawhub.ai", backend: "clawhub" },
@@ -17404,32 +17404,8 @@ function installBundledData() {
17404
17404
  }
17405
17405
  }
17406
17406
  function printBanner() {
17407
- if (BRAND2 === "bio") {
17408
- console.log(source_default.cyan.bold(`
17409
- \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
17410
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551
17411
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17412
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17413
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551
17414
- \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D v${VERSION2}`));
17415
- } else if (BRAND2 === "mbp") {
17416
- console.log(source_default.cyan.bold(`
17417
- \u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
17418
- \u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551
17419
- \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17420
- \u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17421
- \u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551
17422
- \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D v${VERSION2}`));
17423
- } else {
17424
- console.log(source_default.cyan.bold(`
17425
- \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
17426
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551
17427
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17428
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17429
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551
17430
- \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D v${VERSION2}`));
17431
- }
17432
- console.log(source_default.dim(" \u751F\u7269\u4FE1\u606F\u5B66 AI \u7EC8\u7AEF\u52A9\u624B \u2014 Bioinformatics AI Terminal"));
17407
+ console.log(source_default.cyan.bold(`
17408
+ ${BRAND2}`) + source_default.dim(` v${VERSION2} \u751F\u7269\u4FE1\u606F\u5B66 AI \u7EC8\u7AEF\u52A9\u624B`));
17433
17409
  console.log();
17434
17410
  }
17435
17411
  function printHelp() {
@@ -19371,20 +19347,29 @@ ${expanded}` : expanded;
19371
19347
  try {
19372
19348
  const currentCfg = loadConfig();
19373
19349
  currentAbortController = new AbortController();
19374
- const debugT0 = debugMode ? Date.now() : 0;
19375
- const debugTokensBefore = debugMode ? { in: sessionStats.inputTokens, out: sessionStats.outputTokens } : null;
19350
+ const roundT0 = Date.now();
19351
+ const tokensBefore = { in: sessionStats.inputTokens, out: sessionStats.outputTokens };
19376
19352
  const reply = await chat(history, currentCfg, systemPrompt, sessionStats, currentAbortController.signal);
19377
19353
  currentAbortController = null;
19378
- if (debugMode && debugTokensBefore && reply) {
19379
- const elapsedMs = Date.now() - debugT0;
19380
- const dIn = sessionStats.inputTokens - debugTokensBefore.in;
19381
- const dOut = sessionStats.outputTokens - debugTokensBefore.out;
19354
+ if (reply) {
19355
+ const elapsedMs = Date.now() - roundT0;
19356
+ const dIn = sessionStats.inputTokens - tokensBefore.in;
19357
+ const dOut = sessionStats.outputTokens - tokensBefore.out;
19358
+ const elapsed = (elapsedMs / 1e3).toFixed(2);
19359
+ console.log(
19360
+ source_default.dim(`
19361
+ \u23F1 ${elapsed}s`) + source_default.dim(" \xB7 ") + source_default.dim(`\u2191 ${dIn}`) + source_default.dim(" ") + source_default.dim(`\u2193 ${dOut} tokens`)
19362
+ );
19363
+ }
19364
+ if (debugMode && reply) {
19365
+ const elapsedMs = Date.now() - roundT0;
19366
+ const dIn = sessionStats.inputTokens - tokensBefore.in;
19367
+ const dOut = sessionStats.outputTokens - tokensBefore.out;
19382
19368
  try {
19383
19369
  appendDebugRound(systemPrompt, history, reply, elapsedMs, dIn, dOut);
19384
19370
  } catch {
19385
19371
  }
19386
- console.log(source_default.bold.yellow(`
19387
- [DEBUG] \u5DF2\u8BB0\u5F55 \u2192 ${debugFilePath}`));
19372
+ console.log(source_default.bold.yellow(` [DEBUG] \u5DF2\u8BB0\u5F55 \u2192 ${debugFilePath}`));
19388
19373
  }
19389
19374
  if (!reply && history[history.length - 1]?.role === "user") {
19390
19375
  history.pop();
@@ -19399,10 +19384,9 @@ ${expanded}` : expanded;
19399
19384
  saveCheckpoint(sessionId, label, history, Array.from(injectedSkills.keys()));
19400
19385
  lastCheckpointMsgCount = history.length;
19401
19386
  }
19402
- if (injectedSkills.size > 0) {
19403
- const ids = Array.from(injectedSkills.keys()).join(" \xB7 ");
19404
- console.log(source_default.dim(`
19405
- [\u6FC0\u6D3B Skill: ${ids}]`));
19387
+ const activeNonPerm = Array.from(injectedSkills.keys()).filter((id) => !permanentSkillIds.has(id));
19388
+ if (activeNonPerm.length > 0) {
19389
+ console.log(source_default.dim(` [\u6FC0\u6D3B Skill: ${activeNonPerm.join(" \xB7 ")}]`));
19406
19390
  }
19407
19391
  } catch (err) {
19408
19392
  currentAbortController = null;
package/dist/mbp.js CHANGED
@@ -17200,7 +17200,7 @@ function clearCheckpoints(sessionId) {
17200
17200
 
17201
17201
  // src/index.ts
17202
17202
  var import_fs7 = require("fs");
17203
- var VERSION2 = "2.7.0";
17203
+ var VERSION2 = "2.7.2";
17204
17204
  var BRAND2 = "mbp".toLowerCase();
17205
17205
  var SKILLHUB_HUBS = {
17206
17206
  bgi: { label: "BGI\u5185\u7F51", apiBase: "https://clawhub.ai", backend: "clawhub" },
@@ -17404,32 +17404,8 @@ function installBundledData() {
17404
17404
  }
17405
17405
  }
17406
17406
  function printBanner() {
17407
- if (BRAND2 === "bio") {
17408
- console.log(source_default.cyan.bold(`
17409
- \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
17410
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551
17411
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17412
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17413
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551
17414
- \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D v${VERSION2}`));
17415
- } else if (BRAND2 === "mbp") {
17416
- console.log(source_default.cyan.bold(`
17417
- \u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
17418
- \u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551
17419
- \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17420
- \u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17421
- \u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551
17422
- \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D v${VERSION2}`));
17423
- } else {
17424
- console.log(source_default.cyan.bold(`
17425
- \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
17426
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551
17427
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17428
- \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551
17429
- \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551
17430
- \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D v${VERSION2}`));
17431
- }
17432
- console.log(source_default.dim(" \u751F\u7269\u4FE1\u606F\u5B66 AI \u7EC8\u7AEF\u52A9\u624B \u2014 Bioinformatics AI Terminal"));
17407
+ console.log(source_default.cyan.bold(`
17408
+ ${BRAND2}`) + source_default.dim(` v${VERSION2} \u751F\u7269\u4FE1\u606F\u5B66 AI \u7EC8\u7AEF\u52A9\u624B`));
17433
17409
  console.log();
17434
17410
  }
17435
17411
  function printHelp() {
@@ -19371,20 +19347,29 @@ ${expanded}` : expanded;
19371
19347
  try {
19372
19348
  const currentCfg = loadConfig();
19373
19349
  currentAbortController = new AbortController();
19374
- const debugT0 = debugMode ? Date.now() : 0;
19375
- const debugTokensBefore = debugMode ? { in: sessionStats.inputTokens, out: sessionStats.outputTokens } : null;
19350
+ const roundT0 = Date.now();
19351
+ const tokensBefore = { in: sessionStats.inputTokens, out: sessionStats.outputTokens };
19376
19352
  const reply = await chat(history, currentCfg, systemPrompt, sessionStats, currentAbortController.signal);
19377
19353
  currentAbortController = null;
19378
- if (debugMode && debugTokensBefore && reply) {
19379
- const elapsedMs = Date.now() - debugT0;
19380
- const dIn = sessionStats.inputTokens - debugTokensBefore.in;
19381
- const dOut = sessionStats.outputTokens - debugTokensBefore.out;
19354
+ if (reply) {
19355
+ const elapsedMs = Date.now() - roundT0;
19356
+ const dIn = sessionStats.inputTokens - tokensBefore.in;
19357
+ const dOut = sessionStats.outputTokens - tokensBefore.out;
19358
+ const elapsed = (elapsedMs / 1e3).toFixed(2);
19359
+ console.log(
19360
+ source_default.dim(`
19361
+ \u23F1 ${elapsed}s`) + source_default.dim(" \xB7 ") + source_default.dim(`\u2191 ${dIn}`) + source_default.dim(" ") + source_default.dim(`\u2193 ${dOut} tokens`)
19362
+ );
19363
+ }
19364
+ if (debugMode && reply) {
19365
+ const elapsedMs = Date.now() - roundT0;
19366
+ const dIn = sessionStats.inputTokens - tokensBefore.in;
19367
+ const dOut = sessionStats.outputTokens - tokensBefore.out;
19382
19368
  try {
19383
19369
  appendDebugRound(systemPrompt, history, reply, elapsedMs, dIn, dOut);
19384
19370
  } catch {
19385
19371
  }
19386
- console.log(source_default.bold.yellow(`
19387
- [DEBUG] \u5DF2\u8BB0\u5F55 \u2192 ${debugFilePath}`));
19372
+ console.log(source_default.bold.yellow(` [DEBUG] \u5DF2\u8BB0\u5F55 \u2192 ${debugFilePath}`));
19388
19373
  }
19389
19374
  if (!reply && history[history.length - 1]?.role === "user") {
19390
19375
  history.pop();
@@ -19399,10 +19384,9 @@ ${expanded}` : expanded;
19399
19384
  saveCheckpoint(sessionId, label, history, Array.from(injectedSkills.keys()));
19400
19385
  lastCheckpointMsgCount = history.length;
19401
19386
  }
19402
- if (injectedSkills.size > 0) {
19403
- const ids = Array.from(injectedSkills.keys()).join(" \xB7 ");
19404
- console.log(source_default.dim(`
19405
- [\u6FC0\u6D3B Skill: ${ids}]`));
19387
+ const activeNonPerm = Array.from(injectedSkills.keys()).filter((id) => !permanentSkillIds.has(id));
19388
+ if (activeNonPerm.length > 0) {
19389
+ console.log(source_default.dim(` [\u6FC0\u6D3B Skill: ${activeNonPerm.join(" \xB7 ")}]`));
19406
19390
  }
19407
19391
  } catch (err) {
19408
19392
  currentAbortController = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgicli/bgicli",
3
- "version": "2.7.0",
3
+ "version": "2.7.2",
4
4
  "description": "BGI CLI — Bioinformatics AI terminal for Chinese researchers (百炼/DeepSeek/Kimi/Qwen)",
5
5
  "bin": {
6
6
  "bgi": "dist/bgi.js",