From 25b946cceda5907871147b2730ef97ab60e414f8 Mon Sep 17 00:00:00 2001 From: jiangrenhang <492917571@qq.com> Date: Mon, 15 Jun 2026 18:36:53 +0800 Subject: [PATCH 1/2] fix(agent): add active-goal to transient user block regex (#4464) The StripTransientUserBlocks regex stripped reasoning-language, memory-update, and background-jobs XML blocks from persisted user messages before display, but missed active-goal blocks injected by goal/collaboration mode. This caused the goal-mode injection prompt to leak into the chat transcript as visible user-bubble text. Add active-goal to both alternation groups in the regex so the block is stripped alongside the other three transient blocks. --- internal/agent/preview.go | 2 +- internal/agent/preview_test.go | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 internal/agent/preview_test.go diff --git a/internal/agent/preview.go b/internal/agent/preview.go index 67f69894a..d89ece1a7 100644 --- a/internal/agent/preview.go +++ b/internal/agent/preview.go @@ -5,7 +5,7 @@ import ( "strings" ) -var reTransientUserBlock = regexp.MustCompile(`(?s)^\s*<(?:reasoning-language|memory-update|background-jobs)>.*?\s*\n?`) +var reTransientUserBlock = regexp.MustCompile(`(?s)^\s*<(?:reasoning-language|memory-update|background-jobs|active-goal)>.*?\s*\n?`) // StripTransientUserBlocks removes controller-injected transient XML blocks // from persisted user messages before deriving display text, previews, or diff --git a/internal/agent/preview_test.go b/internal/agent/preview_test.go new file mode 100644 index 000000000..b3a8958a2 --- /dev/null +++ b/internal/agent/preview_test.go @@ -0,0 +1,23 @@ +package agent_test + +import ( + "testing" + "reasonix/internal/agent" +) + +func TestStripTransientBlocksActiveGoal(t *testing.T) { + tests := []struct { + in, want string + }{ + {"\nFix all bugs\n\n\nfix the auth bug", "fix the auth bug"}, + {"\nuse Chinese\n\n\n\nDo X\n\n\nhelp me", "help me"}, + {"\n- note\n\n\n\nGoal text\n\n\ndo it", "do it"}, + {"\n\nmulti-line\ngoal\n\n\nuser text", "user text"}, + } + for _, tt := range tests { + got := agent.StripTransientUserBlocks(tt.in) + if got != tt.want { + t.Errorf("StripTransientUserBlocks(%q) = %q, want %q", tt.in, got, tt.want) + } + } +} From c0babc38d71ad082620d7baf6cac768816482f5d Mon Sep 17 00:00:00 2001 From: jiangrenhang <492917571@qq.com> Date: Mon, 15 Jun 2026 18:40:06 +0800 Subject: [PATCH 2/2] chore: gofmt preview_test.go --- internal/agent/preview_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/agent/preview_test.go b/internal/agent/preview_test.go index b3a8958a2..f0b8a30e5 100644 --- a/internal/agent/preview_test.go +++ b/internal/agent/preview_test.go @@ -1,8 +1,8 @@ package agent_test import ( - "testing" "reasonix/internal/agent" + "testing" ) func TestStripTransientBlocksActiveGoal(t *testing.T) {