fix(cli): resolve duplicate assistant text printing after 'Done' in non-compact text mode
評価
調査の方向性
rust/crates/rusty-claude-cli/src/main.rs の LiveCli::run_turn 内から始め、非コンパクトテキストモードで streamed text、final_assistant_text、spinner.finish がどのように相互作用するかを調べます。そのモードで応答を指定して claw を実行し、アシスタントのテキストが一度だけ表示されること、最後の行が保持されること、Done ステータスも引き続き表示されることを確認します。
索引モデルが issue の本文から書いたものです。
説明
Description
When running claw in non-compact text mode, the entire assistant response is printed twice.
- First, the text chunks are streamed and printed in real-time during the API call.
- Second, after
✔ ✨ Doneis printed, the full assistant text (final_text) is printed again.
This causes a large amount of redundant output in the console, especially for long responses.
Cause
In LiveCli::run_turn (inside main.rs), spinner.finish("✨ Done") is called right after the conversation stream finishes.
Because spinner.finish moves the cursor to column 0 and clears the current line, it would erase the last line of the streamed text if we do not print a newline first.
To prevent this, the previous commit introduced a secondary full-text reprint:
let final_text = final_assistant_text(&summary);
if !final_text.is_empty() {
let renderer = TerminalRenderer::new();
println!("{}", renderer.markdown_to_ansi(&final_text));
}
However, this reprints the entire assistant message instead of just protecting the last line, causing the duplicate response.
Solution
- Print a newline before
spinner.finishif thefinal_textis not empty. This moves the cursor to a new line, ensuring the line-clearing operation inspinner.finishonly clears the empty line and does not corrupt the last line of the streamed text. - Remove the redundant
final_textreprint logic inrun_turn.
Here is the proposed diff in rust/crates/rusty-claude-cli/src/main.rs:
@@ -7763,15 +7763,15 @@
match result {
Ok(summary) => {
self.replace_runtime(runtime)?;
- spinner.finish(
- "✨ Done",
- TerminalRenderer::new().color_theme(),
- &mut stdout,
- )?;
let final_text = final_assistant_text(&summary);
if !final_text.is_empty() {
- let renderer = TerminalRenderer::new();
- println!("{}", renderer.markdown_to_ansi(&final_text));
- }
+ println!();
+ }
+ spinner.finish(
+ "✨ Done",
+ TerminalRenderer::new().color_theme(),
+ &mut stdout,
+ )?;
println!();
if let Some(event) = summary.auto_compaction {
- 主要言語
- Rust
- スター
- 195k
- フォーク
- 108k
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
ultraworkers/claw-code のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
ultraworkers/claw-code#3259 · コメント 7 件 ·
-
bug: Missing newlines before paragraphs and code blocks in streamed Markdown rendering対応中かも @nankingjing が 88 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
ultraworkers/claw-code#3257 · コメント 2 件 ·
-
[CRITICAL][SECURITY] Untrusted project hooks bypass read-only mode for arbitrary command executionオープン
難易度 4/5 3〜5日 初心者へのやさしさ 68/100
ultraworkers/claw-code#3301 · コメント 4 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 20/100
ultraworkers/claw-code#3300 · コメント 2 件 ·
-
Pin all third-party GitHub Actions to immutable commit SHAs across CI workflows再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 72/100
ultraworkers/claw-code#3287 · コメント 6 件 · リアクション 1 件 ·
ultraworkers/claw-code の issue をすべて見る
似ている issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 95/100
メンテナーはふだん 1 日以内に返信
-
Markdown Preview Fonts Don't Show Selected Option対応中かも @RadhiRasho が今日担当しました。 オープンstate:needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 61/100
zed-industries/zed#65300 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信