llama.cpp
84746c5c - ui: Add "Show tool call in progress" setting (#30681)

Commit
1 day ago
ui: Add "Show tool call in progress" setting (#30681) * feat(ui): add Show tool call in progress display setting Add the showToolCallInProgress key and its checkbox to Settings > Display, right next to its "always show" counterpart. Upstream dropped a setting of this exact name in 43b5e63589, folding it into alwaysShowToolCallContent because the old name promised expansion that outlives the call; this brings back the narrower, in-progress-only meaning. The entry is registry-driven, so SETTING_CONFIG_DEFAULT, the dialog field and the ui_settings admin baseline pick it up without extra wiring. It ships enabled, mirroring Show thought in progress, and the always-show help text is reworded so the two toggles read as a pair rather than contradicting each other. Assisted by: llama-ui (ggml-org/Qwen3.8-Flash-Next:Q8_0) * feat(ui): expand tool call blocks while they are in progress Drive the default expansion of TOOL_CALL_STREAMING and TOOL_CALL_PENDING from showToolCallInProgress and leave TOOL_CALL, the terminal state, to alwaysShowToolCallContent. A finished call now folds back on its own once its result lands, which is exactly how the reasoning block behaves when the thought completes. Manual toggling keeps precedence over both defaults in either direction: isExpanded() only consults the settings while expandedStates holds no entry for the section. Client tests pin the truth table for the two toggles, including the automatic fold-back and both manual overrides. Assisted by: llama-ui (ggml-org/Qwen3.8-Flash-Next:Q8_0) * fix(ui): keep running tool calls expanded A call the agentic loop reports as running now outranks its section type. exec_shell_command persists an empty result before reading any output, so a live call is already TOOL_CALL and folded back, which hid the streaming output the setting is meant to show. Move the expansion default to isSectionExpandedByDefault so the running-id rule is covered by a truth table, and test the pending -> finished transition instead of only the finished state: a block that only ever got mounted finished cannot prove it folds back on its own. Assisted by: llama-ui (ggml-org/Qwen3.8-Flash-Next:Q8_0) * feat(ui): stream the exec command from the first character The exec parser read its args strictly, so while the model was still typing the call the block title stayed empty and the body claimed "Running...". Parse the args partially (the read_file / edit_file / write_file pattern), keep a terminal cursor while the args JSON is incomplete, and stand the conversation cwd in for the x-tool-cwd that only arrives with the result message, so the prompt is there from the first character. The body stays empty while the args stream, shows "Executing command..." once the call is executing, and the wrapper drops its padding for empty phases so the title sits flush with the frame. Assisted by: Delta (zai-org/GLM-5.3) * fix(ui): stream file tool bodies even before a path arrives write_file and edit_file refused to render until their args carried a path, so a call that streams its body first (or a same-named tool with other arg names) showed an empty block. Meta now carries optional fileName/filePath, path alias reading moves to shared helpers, and the blocks fall back to the raw args JSON when no known content key is present. Assisted by: Delta (zai-org/GLM-5.3) * fix(ui): keep an empty write_file body instead of the raw args A call carrying {"content":""} fell through to the raw-args fallback, so a finished write of an empty file showed the args JSON. The parser now leaves content undefined when the key is missing and the block tests !== undefined, so an empty write renders as an empty code block with its byte count. Assisted by: DeepSeek-V4.1-Flash (deepseek-ai)
Author
Parents
Loading