@noobdemon/noob-cli 1.7.0 → 1.7.1

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/repl.js +35 -17
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noobdemon/noob-cli",
3
- "version": "1.7.0",
3
+ "version": "1.7.1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
package/src/repl.js CHANGED
@@ -383,24 +383,39 @@ Tự đánh giá: còn THIẾU gì để đạt mục tiêu? Chọn 1 nhiệm v
383
383
  state.mode = "chat"; // tự hành chỉ chạy ở chế độ agent
384
384
  state.ultra = true;
385
385
  console.log(c.accent(" 🚀 " + t.ultraOn));
386
- let answer = await handle(ultraStart(goal));
387
- persist();
388
- let i = 0;
389
- // Lượt đầu = lập kế hoạch → KHÔNG xét hoàn thành. Mỗi vòng sau là một lượt
390
- // "tiếp tục" có cổng kiểm chứng; chỉ dừng khi token nằm ở CUỐI câu trả lời.
391
- while (state.ultra && i < MAX_QUESTS) {
392
- if (!answer) break; // lượt bị ngắt/ lỗi → dừng tự hành, đừng quay vô ích
393
- i++;
394
- console.log(c.accent(" ↻ " + t.ultraQuest(i)));
395
- answer = await handle(ultraContinue(goal));
386
+ // Mốc history TRƯỚC khi ULTRA bơm prompt — kết thúc thì cắt về để các lượt sau không bị "dính" mục tiêu cũ.
387
+ const baseLen = state.history.length;
388
+ try {
389
+ let answer = await handle(ultraStart(goal));
396
390
  persist();
397
- if (answer && ultraIsDone(answer)) {
398
- console.log(c.ok(" ✓ " + t.ultraDone));
399
- break;
391
+ let i = 0;
392
+ // Lượt đầu = lập kế hoạch → KHÔNG xét hoàn thành. Mỗi vòng sau là một lượt
393
+ // "tiếp tục" có cổng kiểm chứng; chỉ dừng khi token nằm ở CUỐI câu trả lời.
394
+ while (state.ultra && i < MAX_QUESTS) {
395
+ if (!answer) break; // lượt bị ngắt/ lỗi → dừng tự hành, đừng quay vô ích
396
+ i++;
397
+ console.log(c.accent(" ↻ " + t.ultraQuest(i)));
398
+ answer = await handle(ultraContinue(goal));
399
+ persist();
400
+ if (answer && ultraIsDone(answer)) {
401
+ console.log(c.ok(" ✓ " + t.ultraDone));
402
+ break;
403
+ }
400
404
  }
405
+ if (state.ultra && i >= MAX_QUESTS) console.log(c.tool(" " + t.ultraMax));
406
+ } finally {
407
+ // Dọn dấu vết ULTRA khỏi history (prompt khởi động, các lượt "tiếp tục",
408
+ // token <<ULTRA_DONE>>…) để các yêu cầu SAU đó không bị model coi như vẫn
409
+ // đang tự hành / vẫn theo đuổi mục tiêu cũ.
410
+ state.ultra = false;
411
+ if (state.history.length > baseLen) state.history.length = baseLen;
412
+ state.history.push({
413
+ role: "user",
414
+ content: "[Phiên ULTRA đã KẾT THÚC — mục tiêu cũ: " + goal + ". Bỏ qua mọi chỉ dẫn ULTRA trước đó, KHÔNG tự hành tiếp, KHÔNG phát token " + ULTRA_DONE + ". Chờ yêu cầu mới.]",
415
+ });
416
+ state.history.push({ role: "assistant", content: "OK, đã thoát chế độ ULTRA." });
417
+ persist();
401
418
  }
402
- if (state.ultra && i >= MAX_QUESTS) console.log(c.tool(" " + t.ultraMax));
403
- state.ultra = false;
404
419
  }
405
420
 
406
421
  // /init — quét dự án & sinh noob.md tổng quan (giống `/init` của Claude Code).
@@ -588,7 +603,9 @@ NGUYÊN TẮC:
588
603
  let timer = null;
589
604
  const tick = (label) => {
590
605
  const elapsed = ((Date.now() - t0) / 1000).toFixed(0);
591
- tui.status(c.dim(`${label}… ${elapsed}s`));
606
+ // Chèn token usage realtime (↑input ↓output) ngay cạnh spinner để người
607
+ // dùng thấy được số token đang cộng dồn trong khi model stream.
608
+ tui.status(c.dim(`${label}… ${elapsed}s · ${tokenMeter.format()}`));
592
609
  };
593
610
  const stopSpin = () => {
594
611
  if (timer) {
@@ -613,7 +630,8 @@ NGUYÊN TẮC:
613
630
  message: text,
614
631
  signal: abort.signal,
615
632
  onStatus: (s) => {
616
- if (!printer.started) tui.status(c.dim(" " + s));
633
+ // Kèm token meter để nhánh merge/search cũng thấy ↑input ↓output realtime.
634
+ if (!printer.started) tui.status(c.dim(` ${s} · ${tokenMeter.format()}`));
617
635
  },
618
636
  onDelta: (d) => {
619
637
  stopSpin();