mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-29 01:31:41 +00:00
fix(tui): dedupe inline diffs, strip CLI review-diff header
After the prior inline-diff fix, the gateway still prepends a literal " ┊ review diff" line to inline_diff (it's terminal chrome written by `_emit_inline_diff`). Wrapping that in a ```diff fence left that header inside the code block. The agent also often narrates its own edit in a second fenced diff, so the assistant message ended up stacking two diff blocks for the same change. - Strip the leading "┊ review diff" header from queued inline diffs before fencing. - Skip appending the fenced diff entirely when the assistant already wrote its own ```diff (or ```patch) fence. Keeps the single-surface diff UX even when the agent is chatty.
This commit is contained in:
parent
e684afa151
commit
a8eb13e828
2 changed files with 53 additions and 2 deletions
|
|
@ -185,7 +185,13 @@ class TurnController {
|
|||
}
|
||||
|
||||
queueInlineDiff(diffText: string) {
|
||||
const text = diffText.trim()
|
||||
// Strip CLI chrome the gateway emits before the unified diff (e.g. a
|
||||
// leading "┊ review diff" header written by `_emit_inline_diff` for the
|
||||
// terminal printer). That header only makes sense as stdout dressing,
|
||||
// not inside a markdown ```diff block.
|
||||
const text = diffText
|
||||
.replace(/^\s*┊[^\n]*\n?/, '')
|
||||
.trim()
|
||||
|
||||
if (!text || this.pendingInlineDiffs.includes(text)) {
|
||||
return
|
||||
|
|
@ -239,7 +245,13 @@ class TurnController {
|
|||
const rawText = (payload.rendered ?? payload.text ?? this.bufRef).trimStart()
|
||||
const split = splitReasoning(rawText)
|
||||
const finalText = split.text
|
||||
const remainingInlineDiffs = this.pendingInlineDiffs.filter(diff => !finalText.includes(diff))
|
||||
// Skip appending if the assistant already narrated the diff inside a
|
||||
// markdown fence of its own — otherwise we render two stacked diff
|
||||
// blocks for the same edit.
|
||||
const assistantAlreadyHasDiff = /```(?:diff|patch)\b/i.test(finalText)
|
||||
const remainingInlineDiffs = assistantAlreadyHasDiff
|
||||
? []
|
||||
: this.pendingInlineDiffs.filter(diff => !finalText.includes(diff))
|
||||
const inlineDiffBlock = remainingInlineDiffs.length
|
||||
? `\`\`\`diff\n${remainingInlineDiffs.join('\n\n')}\n\`\`\``
|
||||
: ''
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue