mocode-ai 1.2.9 → 1.2.10

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.
@@ -255,7 +255,11 @@ onContextUpdate) {
255
255
  // 经 setStatus 注入状态行(spinnerFrame + statusText),composeStatus 把帧 + 文字放 lead 位;
256
256
  // 不画内容区续写位——内容区在等待期间保持干净,首 token 到达即从续写位开始写正文。
257
257
  const spinner = new Spinner((msg, frame) => {
258
- layout.setStatus(frame ? `${msg}…` : '', frame ?? undefined);
258
+ // frame 在转:msg + + 帧字符;stop() 时 frame=null,去帧,保留 msg 作为状态文字
259
+ // (spinner.ts line 71 注释:"状态行去帧,保留状态文字")。旧版用 '' 会把 statusText 清空,
260
+ // 导致流式期间(spinner 已停、走时由 turnTimer 兜底)状态行只剩心跳帧字符,
261
+ // 再叠加 composeSpinnerLine scrolled 分支无 fallback,滚动态左侧像"蒸发"了。
262
+ layout.setStatus(frame ? `${msg}…` : msg, frame ?? undefined);
259
263
  });
260
264
  // lastChar 镜像:core 跟踪流式末字符决定补换行,但 TUI hooks 需读它决定 layout.contentWrite('\n')。
261
265
  // core 的 onTextEnd hook 只在 lastChar !== '\n' 时才调,调后置 '\n';镜像与此同步。
package/dist/ui/layout.js CHANGED
@@ -1357,13 +1357,18 @@ function composeSpinnerLine(status, cols) {
1357
1357
  let lead;
1358
1358
  let leadW;
1359
1359
  if (scrolled) {
1360
- // 滚动回看:左段 = 符号(● 或 心跳帧) + 状态名(灰,无走时);右段 = 历史指示。
1361
- // 跟非回看的 INPUT/RUNNING 态保持一致——避免「● 留下、状态字蒸发」的视觉错觉。
1360
+ // 滚动回看:左段 = 符号(● 或 心跳帧) + 状态名 + (运行态)走时;右段 = 历史指示。
1361
+ // 跟非回看态严格对齐——RUNNING 态显示走时,INPUT 态不显示,避免滚动时信息降级。
1362
1362
  const symbol = spinning
1363
1363
  ? `${ui.bold}${ui.accent}${RUNNING_FRAMES[runningFrame]}${ui.reset}`
1364
1364
  : `${ui.accent}●${ui.reset}`;
1365
- lead = `${symbol} ${ui.dim}${status.status}${ui.reset}`;
1366
- leadW = 1 + 1 + displayWidth(status.status);
1365
+ // spinning(运行态流式中 spinner 已停,靠 turnTimer 心跳):同非滚动 spinning 分支加
1366
+ // || '生成中' fallback——流式首 token 到即 spinner.stop(),若 stop() 回调未留状态字,
1367
+ // 此处兜底不再让 lead 只剩心跳帧字符(用户误读为"左侧蒸发了")。
1368
+ const label = spinning ? (status.status || '生成中') : status.status;
1369
+ const ePart = elapsed ? ` ${ui.dim}${elapsed}${ui.reset}` : '';
1370
+ lead = `${symbol} ${ui.dim}${label}${ui.reset}${ePart}`;
1371
+ leadW = 1 + 1 + displayWidth(label) + (elapsed ? 1 + displayWidth(elapsed) : 0);
1367
1372
  }
1368
1373
  else if (hasSpinner) {
1369
1374
  // spinner 激活(思考中/执行工具…):帧 + 状态 + 走时
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mocode-ai",
3
- "version": "1.2.9",
3
+ "version": "1.2.10",
4
4
  "description": "终端编码 agent:LLM + tool-call 循环 + 流式输出(含思考)+ 16 个工具,接任意 OpenAI 兼容后端。",
5
5
  "type": "module",
6
6
  "bin": {