fix(tests): regenerate tests

kujtimiihoxha created

Change summary

go.mod                                                                             | 10 
go.sum                                                                             | 18 
internal/agent/common_test.go                                                      | 10 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/bash_tool.yaml             | 29 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/download_tool.yaml         | 29 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/fetch_tool.yaml            | 32 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/glob_tool.yaml             | 24 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/grep_tool.yaml             | 35 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/ls_tool.yaml               | 24 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/multiedit_tool.yaml        | 27 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/parallel_tool_calls.yaml   | 26 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/read_a_file.yaml           | 26 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/simple_test.yaml           | 24 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/sourcegraph_tool.yaml      | 31 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/update_a_file.yaml         | 27 
internal/agent/testdata/TestCoderAgent/anthropic-sonnet/write_tool.yaml            | 26 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/bash_tool.yaml                 | 26 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/download_tool.yaml             | 28 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/fetch_tool.yaml                | 42 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/glob_tool.yaml                 | 32 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/grep_tool.yaml                 | 34 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/ls_tool.yaml                   | 28 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/multiedit_tool.yaml            | 34 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/parallel_tool_calls.yaml       | 28 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/read_a_file.yaml               | 22 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/simple_test.yaml               | 18 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/sourcegraph_tool.yaml          | 38 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/update_a_file.yaml             | 34 
internal/agent/testdata/TestCoderAgent/openai-gpt-5/write_tool.yaml                | 30 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/bash_tool.yaml           | 26 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/download_tool.yaml       | 22 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/fetch_tool.yaml          | 26 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/glob_tool.yaml           |  2 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/grep_tool.yaml           | 30 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/ls_tool.yaml             | 30 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/multiedit_tool.yaml      | 40 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/parallel_tool_calls.yaml |  2 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/read_a_file.yaml         |  2 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/simple_test.yaml         |  2 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/sourcegraph_tool.yaml    | 34 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/update_a_file.yaml       | 24 
internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/write_tool.yaml          |  2 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/bash_tool.yaml                   | 38 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/download_tool.yaml               | 88 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/fetch_tool.yaml                  | 88 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/glob_tool.yaml                   | 88 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/grep_tool.yaml                   | 86 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/ls_tool.yaml                     | 34 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/multiedit_tool.yaml              |  3 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/parallel_tool_calls.yaml         | 88 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/read_a_file.yaml                 | 88 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/simple_test.yaml                 | 28 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/sourcegraph_tool.yaml            |  3 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/update_a_file.yaml               | 88 
internal/agent/testdata/TestCoderAgent/zai-glm4.6/write_tool.yaml                  |  3 
internal/config/load.go                                                            | 19 
internal/config/provider.go                                                        |  6 
internal/config/provider_empty_test.go                                             |  2 
internal/config/provider_test.go                                                   |  2 
59 files changed, 712 insertions(+), 1,074 deletions(-)

Detailed changes

go.mod 🔗

@@ -13,7 +13,7 @@ require (
 	github.com/charlievieth/fastwalk v1.0.14
 	github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1.0.20250820203609-601216f68ee2
 	github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.4.0.20250910155747-997384b0b35e
-	github.com/charmbracelet/catwalk v0.6.5-0.20251010111259-a1bafd2530bb
+	github.com/charmbracelet/catwalk v0.6.5-0.20251013041345-e6202aaa8c46
 	github.com/charmbracelet/fang v0.4.2
 	github.com/charmbracelet/fantasy v0.0.0-20251010114724-801d5df11cef
 	github.com/charmbracelet/glamour/v2 v2.0.0-20250811143442-a27abb32f018
@@ -50,6 +50,14 @@ require (
 require (
 	github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect
 	github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
+	github.com/beorn7/perks v1.0.1 // indirect
+	github.com/cespare/xxhash/v2 v2.3.0 // indirect
+	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
+	github.com/prometheus/client_golang v1.23.2 // indirect
+	github.com/prometheus/client_model v0.6.2 // indirect
+	github.com/prometheus/common v0.66.1 // indirect
+	github.com/prometheus/procfs v0.16.1 // indirect
+	go.yaml.in/yaml/v2 v2.4.2 // indirect
 )
 
 require (

go.sum 🔗

@@ -42,11 +42,15 @@ github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuP
 github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
 github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
 github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/bmatcuk/doublestar/v4 v4.9.1 h1:X8jg9rRZmJd4yRy7ZeNDRnM+T3ZfHv15JiBJ/avrEXE=
 github.com/bmatcuk/doublestar/v4 v4.9.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
 github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
 github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/charlievieth/fastwalk v1.0.14 h1:3Eh5uaFGwHZd8EGwTjJnSpBkfwfsak9h6ICgnWlhAyg=
 github.com/charlievieth/fastwalk v1.0.14/go.mod h1:diVcUreiU1aQ4/Wu3NbxxH4/KYdKpLDojrQ1Bb2KgNY=
 github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1.0.20250820203609-601216f68ee2 h1:973OHYuq2Jx9deyuPwe/6lsuQrDCatOsjP8uCd02URE=
@@ -55,6 +59,8 @@ github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.4.0.20250910155747-997384b0b35
 github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.4.0.20250910155747-997384b0b35e/go.mod h1:F7AfLKYQqpM3NNBVs7ctW417tavhvoh9SBjsgtwpzbY=
 github.com/charmbracelet/catwalk v0.6.5-0.20251010111259-a1bafd2530bb h1:1dANrQJF+y+irksWTqd4dvN91JP7e/gdYZscef3PxkY=
 github.com/charmbracelet/catwalk v0.6.5-0.20251010111259-a1bafd2530bb/go.mod h1:ReU4SdrLfe63jkEjWMdX2wlZMV3k9r11oQAmzN0m+KY=
+github.com/charmbracelet/catwalk v0.6.5-0.20251013041345-e6202aaa8c46 h1:Uo9eLh7tblCfVnuKmF48MFpk27j2whgnLyDUYyylucg=
+github.com/charmbracelet/catwalk v0.6.5-0.20251013041345-e6202aaa8c46/go.mod h1:ReU4SdrLfe63jkEjWMdX2wlZMV3k9r11oQAmzN0m+KY=
 github.com/charmbracelet/colorprofile v0.3.2 h1:9J27WdztfJQVAQKX2WOlSSRB+5gaKqqITmrvb1uTIiI=
 github.com/charmbracelet/colorprofile v0.3.2/go.mod h1:mTD5XzNeWHj8oqHb+S1bssQb7vIHbepiebQ2kPKVKbI=
 github.com/charmbracelet/fang v0.4.2 h1:nWr7Tb82/TTNNGMGG35aTZ1X68loAOQmpb0qxkKXjas=
@@ -213,6 +219,8 @@ github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8=
 github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
 github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
 github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/ncruces/go-sqlite3 v0.29.0 h1:1tsLiagCoqZEfcHDeKsNSv5jvrY/Iu393pAnw2wLNJU=
 github.com/ncruces/go-sqlite3 v0.29.0/go.mod h1:r1hSvYKPNJ+OlUA1O3r8o9LAawzPAlqeZiIdxTBBBJ0=
 github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
@@ -236,7 +244,15 @@ github.com/posthog/posthog-go v1.6.10 h1:OA6bkiUg89rI7f5cSXbcrH5+wLinyS6hHplnD92
 github.com/posthog/posthog-go v1.6.10/go.mod h1:LcC1Nu4AgvV22EndTtrMXTy+7RGVC0MhChSw7Qk5XkY=
 github.com/pressly/goose/v3 v3.25.0 h1:6WeYhMWGRCzpyd89SpODFnCBCKz41KrVbRT58nVjGng=
 github.com/pressly/goose/v3 v3.25.0/go.mod h1:4hC1KrritdCxtuFsqgs1R4AU5bWtTAf+cnWvfhf2DNY=
+github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
+github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
+github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
+github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs=
+github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA=
+github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
+github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
 github.com/qjebbs/go-jsons v1.0.0-alpha.4 h1:Qsb4ohRUHQODIUAsJKdKJ/SIDbsO7oGOzsfy+h1yQZs=
 github.com/qjebbs/go-jsons v1.0.0-alpha.4/go.mod h1:wNJrtinHyC3YSf6giEh4FJN8+yZV7nXBjvmfjhBIcw4=
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
@@ -318,6 +334,8 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
 go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
 go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
 go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
+go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
 go.yaml.in/yaml/v4 v4.0.0-rc.2 h1:/FrI8D64VSr4HtGIlUtlFMGsm7H7pWTbj6vOLVZcA6s=
 go.yaml.in/yaml/v4 v4.0.0-rc.2/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=

internal/agent/common_test.go 🔗

@@ -116,15 +116,17 @@ func testEnv(t *testing.T) env {
 
 func testSessionAgent(env env, large, small ai.LanguageModel, systemPrompt string, tools ...ai.AgentTool) SessionAgent {
 	largeModel := Model{
-		Model:      large,
+		Model: large,
 		CatwalkCfg: catwalk.Model{
-			// todo: add values
+			ContextWindow:    200000,
+			DefaultMaxTokens: 10000,
 		},
 	}
 	smallModel := Model{
-		Model:      small,
+		Model: small,
 		CatwalkCfg: catwalk.Model{
-			// todo: add values
+			ContextWindow:    200000,
+			DefaultMaxTokens: 10000,
 		},
 	}
 	agent := NewSessionAgent(SessionAgentOptions{largeModel, smallModel, systemPrompt, false, env.sessions, env.messages, tools})

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/bash_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 681
+    content_length: 774
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse bash to create a file named test.txt with content ''hello bash''","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse bash to create a file named test.txt with content ''hello bash''\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,52 +25,49 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_01LqaQeaFnWb1d24ZpBd3GDz","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":124,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard"}}    }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_0134NcQsuCWiH9G2f1pFdbjd","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":147,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":3,"service_tier":"standard"}}       }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}              }
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}             }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Bash"}   }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Bash File"}       }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" File"}          }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Creation"}             }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Creation"}  }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" with"}            }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Comman"}        }
-
-      event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d"}      }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Hello Message"} }
 
       event: content_block_stop
-      data: {"type":"content_block_stop","index":0           }
+      data: {"type":"content_block_stop","index":0  }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":124,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":8}              }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":147,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":10}           }
 
       event: message_stop
-      data: {"type":"message_stop"     }
+      data: {"type":"message_stop"   }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 565.49875ms
+    duration: 580.862ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 32034
+    content_length: 32080
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/download_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 694
+    content_length: 787
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\ndownload the file from https://httpbin.org/robots.txt and save it as robots.txt","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\ndownload the file from https://httpbin.org/robots.txt and save it as robots.txt\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,52 +25,49 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_01TY7oeeeBKZx8Q3z4Tido4x","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":128,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}               }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_01HgEdLNNxYjaZP4qdjC1kgA","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":151,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}            }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}             }
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}       }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Downloa"}        }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Downloa"}}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d robots"}              }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d robots"}             }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":".txt from"}          }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":".txt from http"}   }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" http"}}
-
-      event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"bin.org"}  }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"bin.org"}         }
 
       event: content_block_stop
-      data: {"type":"content_block_stop","index":0             }
+      data: {"type":"content_block_stop","index":0 }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":128,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":12}       }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":151,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":12}     }
 
       event: message_stop
-      data: {"type":"message_stop"               }
+      data: {"type":"message_stop"       }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 600.751416ms
+    duration: 538.064375ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 32051
+    content_length: 32097
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/fetch_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 707
+    content_length: 800
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nfetch the content from https://httpbin.org/html and tell me if it contains the word ''Herman''","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nfetch the content from https://httpbin.org/html and tell me if it contains the word ''Herman''\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,49 +25,55 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_01CJaBVohy3QnSt6fTTq13Ye","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":131,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":3,"service_tier":"standard"}} }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_01FxSVzNELCauTsk6fSTg87j","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":154,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}              }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}   }
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}    }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Fetch HTML"}           }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Web"}       }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" an"} }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Scraping Content"}       }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d Search"}           }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" for"}               }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" for Herman"}      }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Specific"}               }
+
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Wor"}  }
+
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d"}}
 
       event: content_block_stop
-      data: {"type":"content_block_stop","index":0        }
+      data: {"type":"content_block_stop","index":0              }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":131,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":10}          }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":154,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":12}          }
 
       event: message_stop
-      data: {"type":"message_stop"     }
+      data: {"type":"message_stop"           }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 613.788916ms
+    duration: 555.344458ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 32061
+    content_length: 32107
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/glob_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 670
+    content_length: 763
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse glob to find all .go files in the current directory","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse glob to find all .go files in the current directory\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,49 +25,49 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_01DfEsKzksKF1iW3v1d8Uz14","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":119,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}   }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_01FXonqh4CRaskWcSFpTBVeC","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":142,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}               }
 
       event: content_block_start
       data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}   }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Fin"}         }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Finding"}          }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d Go"}              }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Go"}         }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Files"}           }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Files with"}}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" in Current Directory"}           }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Glob"}         }
 
       event: content_block_stop
-      data: {"type":"content_block_stop","index":0   }
+      data: {"type":"content_block_stop","index":0      }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":119,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":9}          }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":142,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":9}             }
 
       event: message_stop
-      data: {"type":"message_stop"           }
+      data: {"type":"message_stop"              }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 642.710375ms
+    duration: 550.481417ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 32023
+    content_length: 32069
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/grep_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 668
+    content_length: 761
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse grep to search for the word ''package'' in go files","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse grep to search for the word ''package'' in go files\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,49 +25,52 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_01P5KzdPQFQJt2KXiM1sE2LA","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":121,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":6,"service_tier":"standard"}}      }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_012JHSdafaYGKa7doAmoqq17","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":144,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard"}}          }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}      }
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}       }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Searching for 'package"}             }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Searching"}        }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"' in Go Files"}         }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" for "}   }
 
       event: ping
       data: {"type": "ping"}
 
-      event: content_block_stop
-      data: {"type":"content_block_stop","index":0       }
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"'package' in Go"}             }
 
-      event: ping
-      data: {"type": "ping"}
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" files with"}         }
 
-      event: ping
-      data: {"type": "ping"}
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" grep"}            }
+
+      event: content_block_stop
+      data: {"type":"content_block_stop","index":0       }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":121,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":13}        }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":144,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":15}    }
 
       event: message_stop
-      data: {"type":"message_stop"  }
+      data: {"type":"message_stop"              }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 576.391708ms
+    duration: 592.433333ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 32021
+    content_length: 32067
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/ls_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 664
+    content_length: 757
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse ls to list the files in the current directory","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse ls to list the files in the current directory\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,49 +25,49 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_01QH5MdoAQhjFKPFQT1CiZtv","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":117,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}  }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_01WsuD73Q7FNCwhY6r9yesAF","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":140,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}         }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}            }
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"List"} }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"List"}             }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Files"}               }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Files"}          }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" in"}             }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" in"}         }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Current Directory"}   }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Current Directory"} }
 
       event: content_block_stop
       data: {"type":"content_block_stop","index":0  }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":117,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":8}}
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":140,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":8}      }
 
       event: message_stop
-      data: {"type":"message_stop"       }
+      data: {"type":"message_stop"  }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 525.075666ms
+    duration: 508.105833ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 32015
+    content_length: 32061
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/multiedit_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 743
+    content_length: 836
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse multiedit to change ''Hello, World!'' to ''Hello, Crush!'' and add a comment ''// Greeting'' above the fmt.Println line in main.go","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse multiedit to change ''Hello, World!'' to ''Hello, Crush!'' and add a comment ''// Greeting'' above the fmt.Println line in main.go\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,49 +25,46 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_01CGqRQiPFCQQTcuhN8FBz5T","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":147,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}       }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_012wZCQZFhzqRTZZ7xbNXT9P","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":170,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard"}}             }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}           }
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}               }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Edit"}     }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Modify"}      }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Greeting in"}           }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Greeting in"}       }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Go"}      }
-
-      event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Program"}   }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" main.go File"}     }
 
       event: content_block_stop
-      data: {"type":"content_block_stop","index":0          }
+      data: {"type":"content_block_stop","index":0     }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":147,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":9}    }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":170,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":12}       }
 
       event: message_stop
-      data: {"type":"message_stop"     }
+      data: {"type":"message_stop"           }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 586.474166ms
+    duration: 593.423917ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 32101
+    content_length: 32147
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/parallel_tool_calls.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 749
+    content_length: 842
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse glob to find all .go files and use ls to list the current directory, it is very important that you run both tool calls in parallel","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse glob to find all .go files and use ls to list the current directory, it is very important that you run both tool calls in parallel\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,49 +25,49 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_01AH9XB691MCVFTi88d4ddjW","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":136,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard"}}        }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_01QG9K82nFdNjFtQk7NoK5QB","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":159,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard"}}  }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}             }
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}          }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Parallel"}   }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Parallel"}      }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Go File"}        }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Go File"}      }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Discovery"}    }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Search and Directory"}     }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" and Listing"}}
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Listing"}               }
 
       event: content_block_stop
-      data: {"type":"content_block_stop","index":0   }
+      data: {"type":"content_block_stop","index":0           }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":136,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":11}        }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":159,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":12}         }
 
       event: message_stop
-      data: {"type":"message_stop"         }
+      data: {"type":"message_stop"        }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 671.9185ms
+    duration: 514.665167ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 32112
+    content_length: 32158
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/read_a_file.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 630
+    content_length: 723
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nRead the go mod","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nRead the go mod\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,49 +25,49 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_012FWBStQwEKSVhBhq9juncH","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":111,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}              }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_01AosjrFVVXCqAidJohxn6E7","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":134,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}        }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""} }
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}  }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Review"}               }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Rea"}       }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Go"}          }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d Go"}    }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Module"}               }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Module"}            }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Configuration"}             }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Details"}}
 
       event: content_block_stop
-      data: {"type":"content_block_stop","index":0      }
+      data: {"type":"content_block_stop","index":0           }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":111,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":7}}
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":134,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":7}}
 
       event: message_stop
-      data: {"type":"message_stop"             }
+      data: {"type":"message_stop"         }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 1.198261875s
+    duration: 550.275666ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 31985
+    content_length: 32031
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/simple_test.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 620
+    content_length: 713
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nHello","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nHello\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,46 +25,46 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_01CXaxQ4hxLAZTrDjUQFvr14","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":108,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}               }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_01FAWvBoccVMmLTBJwcdyBep","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":131,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}             }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}              }
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}    }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Getting"} }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Quick"}         }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Starte"}      }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Chat"}      }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d"}    }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Start"}         }
 
       event: content_block_stop
-      data: {"type":"content_block_stop","index":0       }
+      data: {"type":"content_block_stop","index":0    }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":108,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":5}         }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":131,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":6}         }
 
       event: message_stop
-      data: {"type":"message_stop"}
+      data: {"type":"message_stop"        }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 808.0945ms
+    duration: 733.150917ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 31975
+    content_length: 32021
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/sourcegraph_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 675
+    content_length: 768
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse sourcegraph to search for ''func main'' in Go repositories","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse sourcegraph to search for ''func main'' in Go repositories\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,55 +25,52 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_01NNQSo6XdvUrm9KVjF253LP","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":122,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}        }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_0137phYsnpb3ZLZ6xWV4o1qc","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":145,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard"}}           }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}            }
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}         }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Search"}             }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Searching"}               }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Go"}             }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Go"}       }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Repos"}               }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Repos"}   }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" for"}      }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" for Main"}   }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Main"}       }
-
-      event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Function"}       }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Functions"}            }
 
       event: content_block_stop
-      data: {"type":"content_block_stop","index":0           }
+      data: {"type":"content_block_stop","index":0}
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":122,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":10}   }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":145,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":11}               }
 
       event: message_stop
-      data: {"type":"message_stop"       }
+      data: {"type":"message_stop"      }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 549.390667ms
+    duration: 561.671875ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 32035
+    content_length: 32081
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/update_a_file.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 684
+    content_length: 777
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nupdate the main.go file by changing the print to say hello from crush","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nupdate the main.go file by changing the print to say hello from crush\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,46 +25,49 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_017ojmccd78pbpdMdsMBsi1Q","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":122,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard"}}            }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_0124XpcSuB61ZBx1SPUnu1Qb","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":145,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}        }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}       }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Update main"}              }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Update"}     }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":".go print"}       }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" main"}  }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" statement"}    }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":".go Hello"}}
+
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Print"} }
 
       event: content_block_stop
-      data: {"type":"content_block_stop","index":0              }
+      data: {"type":"content_block_stop","index":0               }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":122,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":9}       }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":145,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":9}  }
 
       event: message_stop
-      data: {"type":"message_stop"    }
+      data: {"type":"message_stop"  }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 645.703916ms
+    duration: 648.821083ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 32041
+    content_length: 32087
     host: ""

internal/agent/testdata/TestCoderAgent/anthropic-sonnet/write_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 724
+    content_length: 817
     host: ""
-    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse write to create a new file called config.json with content ''{\"name\": \"test\", \"version\": \"1.0.0\"}''","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","type":"text"}],"stream":true}'
+    body: '{"max_tokens":40,"messages":[{"content":[{"text":"Generate a concise title for the following content:\n\nuse write to create a new file called config.json with content ''{\"name\": \"test\", \"version\": \"1.0.0\"}''\n \u003cthink\u003e\n\n\u003c/think\u003e","type":"text"}],"role":"user"}],"model":"claude-3-5-haiku-20241022","system":[{"text":"you will generate a short title based on the first message a user begins a conversation with\n\n\u003crules\u003e\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n\u003c/rules\u003e\n\n /no_think","type":"text"}],"stream":true}'
     headers:
       Accept:
       - application/json
@@ -25,49 +25,49 @@ interactions:
     content_length: -1
     body: |+
       event: message_start
-      data: {"type":"message_start","message":{"id":"msg_01WCZLh4HmYZpaDXUTzZPzKN","type":"message","role":"assistant","model":"claude-3-5-haiku-20241022","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":138,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}        }
+      data: {"type":"message_start","message":{"model":"claude-3-5-haiku-20241022","id":"msg_01JMWchmGYjGvwhk1QHW8zM2","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":161,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard"}}     }
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}  }
+      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}      }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Create"}    }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Create"}         }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" config"}       }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" JSON"}           }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":".json file with JSON"}           }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Configuration"}      }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" content"}     }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" File"}            }
 
       event: content_block_stop
-      data: {"type":"content_block_stop","index":0              }
+      data: {"type":"content_block_stop","index":0     }
 
       event: message_delta
-      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":138,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":11}            }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":161,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":7}     }
 
       event: message_stop
-      data: {"type":"message_stop"    }
+      data: {"type":"message_stop"              }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 539.216416ms
+    duration: 525.572291ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 32078
+    content_length: 32124
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/bash_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 671
+    content_length: 724
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse bash to create a file named test.txt with content ''hello bash''","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse bash to create a file named test.txt with content ''hello bash''\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,23 +24,21 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuSgiKkXhyOjDorCUlST2AUWFtQX","object":"chat.completion.chunk","created":1759337962,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"IqF1t260jyfkmS"}
+      data: {"id":"chatcmpl-CQ4QjZPsahyhwu5jZlu72OhkUmAUd","object":"chat.completion.chunk","created":1760329593,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"ZpHu07mjyHpmu9"}
 
-      data: {"id":"chatcmpl-CLuSgiKkXhyOjDorCUlST2AUWFtQX","object":"chat.completion.chunk","created":1759337962,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":"Creating"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"UTmSyAyK"}
+      data: {"id":"chatcmpl-CQ4QjZPsahyhwu5jZlu72OhkUmAUd","object":"chat.completion.chunk","created":1760329593,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Create"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"h9r9mxks3R"}
 
-      data: {"id":"chatcmpl-CLuSgiKkXhyOjDorCUlST2AUWFtQX","object":"chat.completion.chunk","created":1759337962,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" a"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"7bFe3Val0yi424"}
+      data: {"id":"chatcmpl-CQ4QjZPsahyhwu5jZlu72OhkUmAUd","object":"chat.completion.chunk","created":1760329593,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" File"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"NTcfKnqOQlN"}
 
-      data: {"id":"chatcmpl-CLuSgiKkXhyOjDorCUlST2AUWFtQX","object":"chat.completion.chunk","created":1759337962,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" File"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"Pa8Dkpe7h0f"}
+      data: {"id":"chatcmpl-CQ4QjZPsahyhwu5jZlu72OhkUmAUd","object":"chat.completion.chunk","created":1760329593,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" with"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"qAkWebioRfq"}
 
-      data: {"id":"chatcmpl-CLuSgiKkXhyOjDorCUlST2AUWFtQX","object":"chat.completion.chunk","created":1759337962,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" with"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"2MaFDarCPOr"}
+      data: {"id":"chatcmpl-CQ4QjZPsahyhwu5jZlu72OhkUmAUd","object":"chat.completion.chunk","created":1760329593,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Bash"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"qXC3rYFLeO0"}
 
-      data: {"id":"chatcmpl-CLuSgiKkXhyOjDorCUlST2AUWFtQX","object":"chat.completion.chunk","created":1759337962,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Bash"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"jmzcGHDwoBz"}
+      data: {"id":"chatcmpl-CQ4QjZPsahyhwu5jZlu72OhkUmAUd","object":"chat.completion.chunk","created":1760329593,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Command"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"nTQFNfGG"}
 
-      data: {"id":"chatcmpl-CLuSgiKkXhyOjDorCUlST2AUWFtQX","object":"chat.completion.chunk","created":1759337962,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Command"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"QGA5LMno"}
+      data: {"id":"chatcmpl-CQ4QjZPsahyhwu5jZlu72OhkUmAUd","object":"chat.completion.chunk","created":1760329593,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"Rwwmcw2d0q"}
 
-      data: {"id":"chatcmpl-CLuSgiKkXhyOjDorCUlST2AUWFtQX","object":"chat.completion.chunk","created":1759337962,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"x8QZ3ohcfn"}
-
-      data: {"id":"chatcmpl-CLuSgiKkXhyOjDorCUlST2AUWFtQX","object":"chat.completion.chunk","created":1759337962,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[],"usage":{"prompt_tokens":123,"completion_tokens":6,"total_tokens":129,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"p0sEbLTxMZ0e2b"}
+      data: {"id":"chatcmpl-CQ4QjZPsahyhwu5jZlu72OhkUmAUd","object":"chat.completion.chunk","created":1760329593,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":139,"completion_tokens":5,"total_tokens":144,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"ZXCURxqgWFFyvP"}
 
       data: [DONE]
 
@@ -49,92 +47,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 1.414818625s
+    duration: 564.410458ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30654
-    host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/download_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 684
+    content_length: 737
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\ndownload the file from https://httpbin.org/robots.txt and save it as robots.txt","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\ndownload the file from https://httpbin.org/robots.txt and save it as robots.txt\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,25 +24,23 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuTQdlXjkMiYRWMf7AHC2GVmn5vg","object":"chat.completion.chunk","created":1759338008,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"3pINgDb7EjG7Bu"}
+      data: {"id":"chatcmpl-CQ4IaUeAzZkWX2DdA3Bu8WLhI5gfN","object":"chat.completion.chunk","created":1760329088,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"FZb9soJ8NRHFZa"}
 
-      data: {"id":"chatcmpl-CLuTQdlXjkMiYRWMf7AHC2GVmn5vg","object":"chat.completion.chunk","created":1759338008,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Download"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"IVG3y00i"}
+      data: {"id":"chatcmpl-CQ4IaUeAzZkWX2DdA3Bu8WLhI5gfN","object":"chat.completion.chunk","created":1760329088,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{"content":"Download"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"toz5o3Ok"}
 
-      data: {"id":"chatcmpl-CLuTQdlXjkMiYRWMf7AHC2GVmn5vg","object":"chat.completion.chunk","created":1759338008,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" and"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"mLi9mcvlihsS"}
+      data: {"id":"chatcmpl-CQ4IaUeAzZkWX2DdA3Bu8WLhI5gfN","object":"chat.completion.chunk","created":1760329088,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{"content":" and"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"kOwbGVxCB3Pp"}
 
-      data: {"id":"chatcmpl-CLuTQdlXjkMiYRWMf7AHC2GVmn5vg","object":"chat.completion.chunk","created":1759338008,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Save"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"gGiUqwTqKFt"}
+      data: {"id":"chatcmpl-CQ4IaUeAzZkWX2DdA3Bu8WLhI5gfN","object":"chat.completion.chunk","created":1760329088,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{"content":" Save"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"C6FeX7Clw6b"}
 
-      data: {"id":"chatcmpl-CLuTQdlXjkMiYRWMf7AHC2GVmn5vg","object":"chat.completion.chunk","created":1759338008,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" robots"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"JQdi4ipuU"}
+      data: {"id":"chatcmpl-CQ4IaUeAzZkWX2DdA3Bu8WLhI5gfN","object":"chat.completion.chunk","created":1760329088,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{"content":" robots"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"AmJDhYhje"}
 
-      data: {"id":"chatcmpl-CLuTQdlXjkMiYRWMf7AHC2GVmn5vg","object":"chat.completion.chunk","created":1759338008,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":".txt"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"VJDAu0it7YNp"}
+      data: {"id":"chatcmpl-CQ4IaUeAzZkWX2DdA3Bu8WLhI5gfN","object":"chat.completion.chunk","created":1760329088,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{"content":".txt"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"FuJqPcbAsvoY"}
 
-      data: {"id":"chatcmpl-CLuTQdlXjkMiYRWMf7AHC2GVmn5vg","object":"chat.completion.chunk","created":1759338008,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" from"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"hfhMOapEM5w"}
+      data: {"id":"chatcmpl-CQ4IaUeAzZkWX2DdA3Bu8WLhI5gfN","object":"chat.completion.chunk","created":1760329088,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{"content":" File"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"wh9PRPM8zRY"}
 
-      data: {"id":"chatcmpl-CLuTQdlXjkMiYRWMf7AHC2GVmn5vg","object":"chat.completion.chunk","created":1759338008,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" URL"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"SE7K0yBXk0ng"}
+      data: {"id":"chatcmpl-CQ4IaUeAzZkWX2DdA3Bu8WLhI5gfN","object":"chat.completion.chunk","created":1760329088,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"nGXnjnOD7U"}
 
-      data: {"id":"chatcmpl-CLuTQdlXjkMiYRWMf7AHC2GVmn5vg","object":"chat.completion.chunk","created":1759338008,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"cM9ZqBhMeE"}
-
-      data: {"id":"chatcmpl-CLuTQdlXjkMiYRWMf7AHC2GVmn5vg","object":"chat.completion.chunk","created":1759338008,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":126,"completion_tokens":7,"total_tokens":133,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"NcZiVzFNt8fXIn"}
+      data: {"id":"chatcmpl-CQ4IaUeAzZkWX2DdA3Bu8WLhI5gfN","object":"chat.completion.chunk","created":1760329088,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[],"usage":{"prompt_tokens":143,"completion_tokens":6,"total_tokens":149,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"q9M50b5nz64Oa4"}
 
       data: [DONE]
 
@@ -51,15 +49,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 1.219465584s
+    duration: 466.777167ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30671
+    content_length: 30737
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/fetch_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 697
+    content_length: 750
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nfetch the content from https://httpbin.org/html and tell me if it contains the word ''Herman''","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nfetch the content from https://httpbin.org/html and tell me if it contains the word ''Herman''\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,27 +24,39 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuTcBUMssq5FPVAZL1TdzXvUBOlO","object":"chat.completion.chunk","created":1759338020,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"kLKSTcGwqTcCvX"}
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"ixlQJhRwDsHgur"}
 
-      data: {"id":"chatcmpl-CLuTcBUMssq5FPVAZL1TdzXvUBOlO","object":"chat.completion.chunk","created":1759338020,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":"Check"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"uWaar4YZjWt"}
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Check"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"ke9PoMCYMCc"}
 
-      data: {"id":"chatcmpl-CLuTcBUMssq5FPVAZL1TdzXvUBOlO","object":"chat.completion.chunk","created":1759338020,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" Word"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"4AdfsQk5ymW"}
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" if"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"HFdBW3iWkuQRa"}
 
-      data: {"id":"chatcmpl-CLuTcBUMssq5FPVAZL1TdzXvUBOlO","object":"chat.completion.chunk","created":1759338020,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" in"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"mp2KaahzdBvK2"}
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" '"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"fAofQi3S2EoBwd"}
 
-      data: {"id":"chatcmpl-CLuTcBUMssq5FPVAZL1TdzXvUBOlO","object":"chat.completion.chunk","created":1759338020,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" F"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"a8lVkTYoCCfs2g"}
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"H"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"IiT2W6e3QNdu4kk"}
 
-      data: {"id":"chatcmpl-CLuTcBUMssq5FPVAZL1TdzXvUBOlO","object":"chat.completion.chunk","created":1759338020,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":"etched"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"AgPASxboOi"}
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"erman"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"20AcNU0Lrl2"}
 
-      data: {"id":"chatcmpl-CLuTcBUMssq5FPVAZL1TdzXvUBOlO","object":"chat.completion.chunk","created":1759338020,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" Content"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"bCb0DU5Q"}
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"'"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"gT1NUSipAY0nNuI"}
 
-      data: {"id":"chatcmpl-CLuTcBUMssq5FPVAZL1TdzXvUBOlO","object":"chat.completion.chunk","created":1759338020,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" from"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"XdFcY6DyYsB"}
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" is"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"Elhl74rYyGjVe"}
 
-      data: {"id":"chatcmpl-CLuTcBUMssq5FPVAZL1TdzXvUBOlO","object":"chat.completion.chunk","created":1759338020,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" URL"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"xbSgclbIAQW7"}
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" in"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"vKFS4hkAqDZpX"}
 
-      data: {"id":"chatcmpl-CLuTcBUMssq5FPVAZL1TdzXvUBOlO","object":"chat.completion.chunk","created":1759338020,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"W55zgKyCBG"}
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" http"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"avBf3JAqQkc"}
 
-      data: {"id":"chatcmpl-CLuTcBUMssq5FPVAZL1TdzXvUBOlO","object":"chat.completion.chunk","created":1759338020,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[],"usage":{"prompt_tokens":130,"completion_tokens":8,"total_tokens":138,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"ylBGqLCKIKpPuw"}
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"bin"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"UBsXgM8V6YNbx"}
+
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":".org"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"LRsWu2W1LWAv"}
+
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"'s"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"QE9ulzbufK884p"}
+
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" HTML"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"Pg0c9NfoyTi"}
+
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" content"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"0ZQ9Scw0"}
+
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"9sTOTdFnLm"}
+
+      data: {"id":"chatcmpl-CQ4IlFarADb0t82LgVh4dFz9E05Wu","object":"chat.completion.chunk","created":1760329099,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":146,"completion_tokens":14,"total_tokens":160,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"XxqVf6PhbnstX"}
 
       data: [DONE]
 
@@ -53,15 +65,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 872.376125ms
+    duration: 400.20325ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30681
+    content_length: 30747
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/glob_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 660
+    content_length: 713
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse glob to find all .go files in the current directory","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse glob to find all .go files in the current directory\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,29 +24,29 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"rUXw1FEMu6ZOsN"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"TF5ceTsirQMLnM"}
 
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":"Finding"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"tI4UF9LtL"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Using"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"BDVIn6kj4ZW"}
 
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" ."},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"KGBg4SYncyyPYu"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Glob"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"Fha5C9aADdg"}
 
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":"go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"nO25eF9hlIdNHL"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" to"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"MwvXGBvTDtxmx"}
 
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Files"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"TZi0Xf9tHS"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Locate"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"RVpvwdU9s"}
 
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" with"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"PPNjDHfUHfu"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" ."},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"sjYOZnT34A9Nho"}
 
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Glob"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"kh05SzrGkJO"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"sT6s8EQHKNnYX1"}
 
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" in"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"C5wECDjxA7vzy"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Files"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"4jrHEBsTFP"}
 
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Current"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"pHSOeDci"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" in"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"0Wwp7DAmGVsvh"}
 
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Directory"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"vWU5aK"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Directory"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"rQ9leB"}
 
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"1NpNdqJ7nf"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"HqplP0jlZZ"}
 
-      data: {"id":"chatcmpl-CLuTqBHUnM1vkhnO9OrX8h1ZLEFus","object":"chat.completion.chunk","created":1759338034,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[],"usage":{"prompt_tokens":120,"completion_tokens":9,"total_tokens":129,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"Bf8ozc44y43SCk"}
+      data: {"id":"chatcmpl-CQ4Ix4tsNjgZ3Oc1NpQoTTUiItlTv","object":"chat.completion.chunk","created":1760329111,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":137,"completion_tokens":9,"total_tokens":146,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"i9NJdEkT0ojwhm"}
 
       data: [DONE]
 
@@ -55,15 +55,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 456.047458ms
+    duration: 409.249583ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30643
+    content_length: 30709
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/grep_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 658
+    content_length: 711
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse grep to search for the word ''package'' in go files","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse grep to search for the word ''package'' in go files\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,29 +24,31 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"zdeB5oEXLzK1UG"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"3QtS6v53BDQRNQ"}
 
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Search"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"v4rLzfK8xb"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Search"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"yGtIqFl95j"}
 
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" '"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"sv4O4Ie2eWwaPQ"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" for"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"oerTsE8JdpW5"}
 
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"package"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"hgiI921Pg"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" '"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"56olYEI2jTXQST"}
 
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"'"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"SQn7S1KcKAJRJQ6"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"package"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"1XfnZq6tj"}
 
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" in"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"2DdiIvmHHmpoP"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"'"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"WEEyJekBLcgc9Qu"}
 
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"UhTQWmsGvnweR"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" in"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"2aq44icp6wXNW"}
 
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Files"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"UGbnSmIbkh"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"Lcq4GVG32Gsu0"}
 
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Using"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"s2ZsUP4iGu"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Files"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"NEm2D7sPcj"}
 
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" grep"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"B5V2nhz7NiX"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Using"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"fhdLR8XP5b"}
 
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"4hvVroXutX"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" grep"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"u19mmwRjJHC"}
 
-      data: {"id":"chatcmpl-CLuTy3SIocldqGpbWNTW498BvZetk","object":"chat.completion.chunk","created":1759338042,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":121,"completion_tokens":9,"total_tokens":130,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"GoHS5k9qdSoPae"}
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"WcAyB7ZjMl"}
+
+      data: {"id":"chatcmpl-CQ4J3aJkaQm2RImRdrZb5hjpbl3pc","object":"chat.completion.chunk","created":1760329117,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":138,"completion_tokens":10,"total_tokens":148,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"diKCOl2YLfeN5"}
 
       data: [DONE]
 
@@ -55,15 +57,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 688.485208ms
+    duration: 434.856834ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30641
+    content_length: 30707
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/ls_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 654
+    content_length: 707
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse ls to list the files in the current directory","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse ls to list the files in the current directory\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,25 +24,21 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuU8eMrWn3aPVUyPxIsyqpVXTNq0","object":"chat.completion.chunk","created":1759338052,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"byeH7w5TFEQa4S"}
+      data: {"id":"chatcmpl-CQ4J9TiP7Gph5Pi9OAwItZMTqHAPy","object":"chat.completion.chunk","created":1760329123,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"ss0zUm01vjI8Ix"}
 
-      data: {"id":"chatcmpl-CLuU8eMrWn3aPVUyPxIsyqpVXTNq0","object":"chat.completion.chunk","created":1759338052,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Listing"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"GW3h1aC0o"}
+      data: {"id":"chatcmpl-CQ4J9TiP7Gph5Pi9OAwItZMTqHAPy","object":"chat.completion.chunk","created":1760329123,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Listing"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"CgEOnF5lq"}
 
-      data: {"id":"chatcmpl-CLuU8eMrWn3aPVUyPxIsyqpVXTNq0","object":"chat.completion.chunk","created":1759338052,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Files"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"hvf3ebLYGF"}
+      data: {"id":"chatcmpl-CQ4J9TiP7Gph5Pi9OAwItZMTqHAPy","object":"chat.completion.chunk","created":1760329123,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Files"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"C4NDSH9ws1"}
 
-      data: {"id":"chatcmpl-CLuU8eMrWn3aPVUyPxIsyqpVXTNq0","object":"chat.completion.chunk","created":1759338052,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" in"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"AjTKvIL4UedFa"}
+      data: {"id":"chatcmpl-CQ4J9TiP7Gph5Pi9OAwItZMTqHAPy","object":"chat.completion.chunk","created":1760329123,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" with"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"NXiqBqvhQiA"}
 
-      data: {"id":"chatcmpl-CLuU8eMrWn3aPVUyPxIsyqpVXTNq0","object":"chat.completion.chunk","created":1759338052,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Current"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"OZC77OuP"}
+      data: {"id":"chatcmpl-CQ4J9TiP7Gph5Pi9OAwItZMTqHAPy","object":"chat.completion.chunk","created":1760329123,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" ls"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"GvB4fuj5XhcWg"}
 
-      data: {"id":"chatcmpl-CLuU8eMrWn3aPVUyPxIsyqpVXTNq0","object":"chat.completion.chunk","created":1759338052,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Directory"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"4E7n5C"}
+      data: {"id":"chatcmpl-CQ4J9TiP7Gph5Pi9OAwItZMTqHAPy","object":"chat.completion.chunk","created":1760329123,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Command"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"0aXg8jsg"}
 
-      data: {"id":"chatcmpl-CLuU8eMrWn3aPVUyPxIsyqpVXTNq0","object":"chat.completion.chunk","created":1759338052,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Using"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"0tw6Kby3Ym"}
+      data: {"id":"chatcmpl-CQ4J9TiP7Gph5Pi9OAwItZMTqHAPy","object":"chat.completion.chunk","created":1760329123,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"phPtRUYRaa"}
 
-      data: {"id":"chatcmpl-CLuU8eMrWn3aPVUyPxIsyqpVXTNq0","object":"chat.completion.chunk","created":1759338052,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" LS"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"Uz07pVICfrUqt"}
-
-      data: {"id":"chatcmpl-CLuU8eMrWn3aPVUyPxIsyqpVXTNq0","object":"chat.completion.chunk","created":1759338052,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"IAYWI5hiN8"}
-
-      data: {"id":"chatcmpl-CLuU8eMrWn3aPVUyPxIsyqpVXTNq0","object":"chat.completion.chunk","created":1759338052,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":118,"completion_tokens":7,"total_tokens":125,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"dxQRmtoc2C3OeM"}
+      data: {"id":"chatcmpl-CQ4J9TiP7Gph5Pi9OAwItZMTqHAPy","object":"chat.completion.chunk","created":1760329123,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":135,"completion_tokens":5,"total_tokens":140,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"fB6myFRWJxpIJH"}
 
       data: [DONE]
 
@@ -51,15 +47,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 400.379666ms
+    duration: 526.905584ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30635
+    content_length: 30701
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/multiedit_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 733
+    content_length: 786
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse multiedit to change ''Hello, World!'' to ''Hello, Crush!'' and add a comment ''// Greeting'' above the fmt.Println line in main.go","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse multiedit to change ''Hello, World!'' to ''Hello, Crush!'' and add a comment ''// Greeting'' above the fmt.Println line in main.go\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,31 +24,29 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"iVeuhl5Ejb6nB0"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"HRyvw6HF603W2p"}
 
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":"Autom"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"cCJV9zXuCSB"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Modify"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"Im99UEtqsk"}
 
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":"ate"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"nDIRvhsc2wZrS"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Greeting"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"I1Qilv1"}
 
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Code"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"tRmmYg77PHU"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Text"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"nc2WYiSAHa4"}
 
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Update"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"YorSURDDn"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" and"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"T9lMveFuBpOi"}
 
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" and"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"yNGrdX13Ab27"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Add"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"QkKwqKxEvxu4"}
 
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Add"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"dkZjI7cm10Lp"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Comment"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"2MK1jAdh"}
 
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Comment"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"HmNSoDua"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" in"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"e1VsQhHkvNaVu"}
 
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" in"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"FjAT6tv94K2VM"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" main"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"m3z52chYs5e"}
 
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" main"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"JX8EpbVOHbZ"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":".go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"EXKWupnwwEn5h"}
 
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":".go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"dpgiHsAN8Hwk5"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"o4Chrs6lUT"}
 
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"VR194jkOpa"}
-
-      data: {"id":"chatcmpl-CLuUGnQ3olyd8W01dcr6WOixEKWWh","object":"chat.completion.chunk","created":1759338060,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[],"usage":{"prompt_tokens":140,"completion_tokens":10,"total_tokens":150,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"IsoU7m51ax049"}
+      data: {"id":"chatcmpl-CQ4JIzmq20xYtHRivxxGjnzXA3uj7","object":"chat.completion.chunk","created":1760329132,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":157,"completion_tokens":9,"total_tokens":166,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"44gGnjfrcvYfqg"}
 
       data: [DONE]
 
@@ -57,15 +55,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 462.968291ms
+    duration: 447.762542ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30721
+    content_length: 30787
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/parallel_tool_calls.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 739
+    content_length: 792
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse glob to find all .go files and use ls to list the current directory, it is very important that you run both tool calls in parallel","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse glob to find all .go files and use ls to list the current directory, it is very important that you run both tool calls in parallel\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,23 +24,25 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuVN1BnkQk7pG0LTgjQP78Mzw3cZ","object":"chat.completion.chunk","created":1759338129,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"2Es81CTWNDo6i8"}
+      data: {"id":"chatcmpl-CQ4KMHdk4u1UJ2k9dlt9dRBUBAXUe","object":"chat.completion.chunk","created":1760329198,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"IBKji8eBlG5W0L"}
 
-      data: {"id":"chatcmpl-CLuVN1BnkQk7pG0LTgjQP78Mzw3cZ","object":"chat.completion.chunk","created":1759338129,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Parallel"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"WXLBNdHE"}
+      data: {"id":"chatcmpl-CQ4KMHdk4u1UJ2k9dlt9dRBUBAXUe","object":"chat.completion.chunk","created":1760329198,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Parallel"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"OjCAnMWm"}
 
-      data: {"id":"chatcmpl-CLuVN1BnkQk7pG0LTgjQP78Mzw3cZ","object":"chat.completion.chunk","created":1759338129,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" File"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"gJPxymarI2r"}
+      data: {"id":"chatcmpl-CQ4KMHdk4u1UJ2k9dlt9dRBUBAXUe","object":"chat.completion.chunk","created":1760329198,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Execution"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"LxVLUu"}
 
-      data: {"id":"chatcmpl-CLuVN1BnkQk7pG0LTgjQP78Mzw3cZ","object":"chat.completion.chunk","created":1759338129,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Search"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"NV7q4FbxZ"}
+      data: {"id":"chatcmpl-CQ4KMHdk4u1UJ2k9dlt9dRBUBAXUe","object":"chat.completion.chunk","created":1760329198,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" of"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"LWv7ie6rzpoDX"}
 
-      data: {"id":"chatcmpl-CLuVN1BnkQk7pG0LTgjQP78Mzw3cZ","object":"chat.completion.chunk","created":1759338129,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" and"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"mJauQsngNoHD"}
+      data: {"id":"chatcmpl-CQ4KMHdk4u1UJ2k9dlt9dRBUBAXUe","object":"chat.completion.chunk","created":1760329198,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" glob"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"XPdu5LcMssX"}
 
-      data: {"id":"chatcmpl-CLuVN1BnkQk7pG0LTgjQP78Mzw3cZ","object":"chat.completion.chunk","created":1759338129,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Directory"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"zvfLMC"}
+      data: {"id":"chatcmpl-CQ4KMHdk4u1UJ2k9dlt9dRBUBAXUe","object":"chat.completion.chunk","created":1760329198,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" and"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"n9UqHhUcF4f4"}
 
-      data: {"id":"chatcmpl-CLuVN1BnkQk7pG0LTgjQP78Mzw3cZ","object":"chat.completion.chunk","created":1759338129,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Listing"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"4tYnN3wZ"}
+      data: {"id":"chatcmpl-CQ4KMHdk4u1UJ2k9dlt9dRBUBAXUe","object":"chat.completion.chunk","created":1760329198,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" ls"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"sMccMq9B4h3E4"}
 
-      data: {"id":"chatcmpl-CLuVN1BnkQk7pG0LTgjQP78Mzw3cZ","object":"chat.completion.chunk","created":1759338129,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"qYZMsar46a"}
+      data: {"id":"chatcmpl-CQ4KMHdk4u1UJ2k9dlt9dRBUBAXUe","object":"chat.completion.chunk","created":1760329198,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Commands"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"m41DPSw"}
 
-      data: {"id":"chatcmpl-CLuVN1BnkQk7pG0LTgjQP78Mzw3cZ","object":"chat.completion.chunk","created":1759338129,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":137,"completion_tokens":6,"total_tokens":143,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"fHV8lExaB14K50"}
+      data: {"id":"chatcmpl-CQ4KMHdk4u1UJ2k9dlt9dRBUBAXUe","object":"chat.completion.chunk","created":1760329198,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"Iy1hciUjHV"}
+
+      data: {"id":"chatcmpl-CQ4KMHdk4u1UJ2k9dlt9dRBUBAXUe","object":"chat.completion.chunk","created":1760329198,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":154,"completion_tokens":7,"total_tokens":161,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"10eJs0aPV8q4FH"}
 
       data: [DONE]
 
@@ -49,15 +51,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 536.555209ms
+    duration: 484.404375ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30732
+    content_length: 30798
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/read_a_file.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 620
+    content_length: 673
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nRead the go mod","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nRead the go mod\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,19 +24,19 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuS7VvmRXYoPcVz8RvwAsNjQfe2a","object":"chat.completion.chunk","created":1759337927,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"36S2DJyxeLNcA3"}
+      data: {"id":"chatcmpl-CQ4HNEOUviqowtv5WmMEkM9QNXa7D","object":"chat.completion.chunk","created":1760329013,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"3L5ZUjxDTQefz3"}
 
-      data: {"id":"chatcmpl-CLuS7VvmRXYoPcVz8RvwAsNjQfe2a","object":"chat.completion.chunk","created":1759337927,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":"Understanding"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"8tC"}
+      data: {"id":"chatcmpl-CQ4HNEOUviqowtv5WmMEkM9QNXa7D","object":"chat.completion.chunk","created":1760329013,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"35TlzXA01rHVQt"}
 
-      data: {"id":"chatcmpl-CLuS7VvmRXYoPcVz8RvwAsNjQfe2a","object":"chat.completion.chunk","created":1759337927,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" Go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"Odf2U6ZoJz49x"}
+      data: {"id":"chatcmpl-CQ4HNEOUviqowtv5WmMEkM9QNXa7D","object":"chat.completion.chunk","created":1760329013,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Mod"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"bratQdQU9oOM"}
 
-      data: {"id":"chatcmpl-CLuS7VvmRXYoPcVz8RvwAsNjQfe2a","object":"chat.completion.chunk","created":1759337927,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" Mod"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"GX6p8ektbKDh"}
+      data: {"id":"chatcmpl-CQ4HNEOUviqowtv5WmMEkM9QNXa7D","object":"chat.completion.chunk","created":1760329013,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Read"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"9YtAhDpKXUO"}
 
-      data: {"id":"chatcmpl-CLuS7VvmRXYoPcVz8RvwAsNjQfe2a","object":"chat.completion.chunk","created":1759337927,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" Files"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"npnjqmCpYc"}
+      data: {"id":"chatcmpl-CQ4HNEOUviqowtv5WmMEkM9QNXa7D","object":"chat.completion.chunk","created":1760329013,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Instruction"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"uvbe"}
 
-      data: {"id":"chatcmpl-CLuS7VvmRXYoPcVz8RvwAsNjQfe2a","object":"chat.completion.chunk","created":1759337927,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"XvzP9vS6EL"}
+      data: {"id":"chatcmpl-CQ4HNEOUviqowtv5WmMEkM9QNXa7D","object":"chat.completion.chunk","created":1760329013,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"Q3I6sjrptX"}
 
-      data: {"id":"chatcmpl-CLuS7VvmRXYoPcVz8RvwAsNjQfe2a","object":"chat.completion.chunk","created":1759337927,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[],"usage":{"prompt_tokens":112,"completion_tokens":4,"total_tokens":116,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"9mzjBxgOZQFxkk"}
+      data: {"id":"chatcmpl-CQ4HNEOUviqowtv5WmMEkM9QNXa7D","object":"chat.completion.chunk","created":1760329013,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":129,"completion_tokens":4,"total_tokens":133,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"8Czkjx94tA13YY"}
 
       data: [DONE]
 
@@ -45,15 +45,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 716.34375ms
+    duration: 1.368187875s
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30605
+    content_length: 30671
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/simple_test.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 610
+    content_length: 663
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nHello","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nHello\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,15 +24,15 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuS4afB0SlAAOlopNkopx3sMvN5Z","object":"chat.completion.chunk","created":1759337924,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"PHKFxWqtOPkKuE"}
+      data: {"id":"chatcmpl-CQ4HJDRXTRBbIWdJgGxI2eN7HgLMo","object":"chat.completion.chunk","created":1760329009,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"xFGewoulgnen9l"}
 
-      data: {"id":"chatcmpl-CLuS4afB0SlAAOlopNkopx3sMvN5Z","object":"chat.completion.chunk","created":1759337924,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Greeting"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"xLEq8RFJ"}
+      data: {"id":"chatcmpl-CQ4HJDRXTRBbIWdJgGxI2eN7HgLMo","object":"chat.completion.chunk","created":1760329009,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{"content":"Greeting"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"VEgWrw6a"}
 
-      data: {"id":"chatcmpl-CLuS4afB0SlAAOlopNkopx3sMvN5Z","object":"chat.completion.chunk","created":1759337924,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Message"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"NWa1e0e5"}
+      data: {"id":"chatcmpl-CQ4HJDRXTRBbIWdJgGxI2eN7HgLMo","object":"chat.completion.chunk","created":1760329009,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{"content":" Message"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"PeHw29gC"}
 
-      data: {"id":"chatcmpl-CLuS4afB0SlAAOlopNkopx3sMvN5Z","object":"chat.completion.chunk","created":1759337924,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"8r7PsOEws3"}
+      data: {"id":"chatcmpl-CQ4HJDRXTRBbIWdJgGxI2eN7HgLMo","object":"chat.completion.chunk","created":1760329009,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"ydBOd29BPU"}
 
-      data: {"id":"chatcmpl-CLuS4afB0SlAAOlopNkopx3sMvN5Z","object":"chat.completion.chunk","created":1759337924,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":109,"completion_tokens":2,"total_tokens":111,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"WUEtTLOIl6oDVS"}
+      data: {"id":"chatcmpl-CQ4HJDRXTRBbIWdJgGxI2eN7HgLMo","object":"chat.completion.chunk","created":1760329009,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f64f290af2","choices":[],"usage":{"prompt_tokens":126,"completion_tokens":2,"total_tokens":128,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"w3oWFN1yHa2XIn"}
 
       data: [DONE]
 
@@ -41,15 +41,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 873.67075ms
+    duration: 1.519493875s
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30595
+    content_length: 30661
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/sourcegraph_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 665
+    content_length: 718
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse sourcegraph to search for ''func main'' in Go repositories","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse sourcegraph to search for ''func main'' in Go repositories\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,35 +24,35 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"im6NCWyq50riyo"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"iJwvMpfZfzB5bk"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":"Searching"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"ZdYgPOX"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Searching"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"y7o1uQY"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" '"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"9Y2OXllnrK8pyO"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" '"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"PM47cMBcjGLEKT"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":"func"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"hAYvtC1XnFwQ"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"func"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"6EtlYyuGmMld"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" main"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"bYbRi1ylH31"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" main"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"514JAqsNKLH"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":"'"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"JojQOMoP5ZswCW3"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"'"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"JBBPg9XoQi39VxM"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" in"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"nuxsDO5B9ewAb"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" in"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"TMQwPsCtUcNYZ"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" Go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"KgYm89u0kbEVb"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"0Xl3vRumPnbIS"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" Re"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"qarOV6uf5jpr0"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Re"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"LXqj6NsXBQ7Go"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":"positories"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"f5Hj8I"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"positories"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"tTGpW2"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" with"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"QarxldhD9i5"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" with"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"fgCaBPcP4PZ"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":" Source"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"zrNOGWiGX"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Source"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"ydVcdMZBn"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{"content":"graph"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"MI6fb9krpyJ"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"graph"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"EG14PUcnoi1"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"rkO4fMIlH7"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"AMYUYsnGYO"}
 
-      data: {"id":"chatcmpl-CLuUk66HwZGrIlaH24d8JVqb4J4GH","object":"chat.completion.chunk","created":1759338090,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_1827dd0c55","choices":[],"usage":{"prompt_tokens":121,"completion_tokens":12,"total_tokens":133,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"3KpnvLPqXmNwc"}
+      data: {"id":"chatcmpl-CQ4JmoqU1CR5huBIh7RplQ9VlfzoZ","object":"chat.completion.chunk","created":1760329162,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":138,"completion_tokens":12,"total_tokens":150,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"xwYf2fZNUoxZo"}
 
       data: [DONE]
 
@@ -61,15 +61,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 546.357ms
+    duration: 435.95325ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30655
+    content_length: 30721
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/update_a_file.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 674
+    content_length: 727
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nupdate the main.go file by changing the print to say hello from crush","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nupdate the main.go file by changing the print to say hello from crush\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,25 +24,31 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuSIABs2T781fy3TB5oxKKq1rp7R","object":"chat.completion.chunk","created":1759337938,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"ik4ONex1kYkXvD"}
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"6s2EGgvG7pJgIF"}
 
-      data: {"id":"chatcmpl-CLuSIABs2T781fy3TB5oxKKq1rp7R","object":"chat.completion.chunk","created":1759337938,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Update"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"FcPhRIjBE2"}
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Update"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"9ZrflYTwGO"}
 
-      data: {"id":"chatcmpl-CLuSIABs2T781fy3TB5oxKKq1rp7R","object":"chat.completion.chunk","created":1759337938,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" main"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"UGUa348zEJV"}
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" main"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"yJScQMfGgph"}
 
-      data: {"id":"chatcmpl-CLuSIABs2T781fy3TB5oxKKq1rp7R","object":"chat.completion.chunk","created":1759337938,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":".go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"RxmOnRcqO2SHa"}
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":".go"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"8MLQ7WuxnRsVO"}
 
-      data: {"id":"chatcmpl-CLuSIABs2T781fy3TB5oxKKq1rp7R","object":"chat.completion.chunk","created":1759337938,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":":"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"OFfCbzKVKZXAmj2"}
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" to"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"0QVYy6QeCXHnH"}
 
-      data: {"id":"chatcmpl-CLuSIABs2T781fy3TB5oxKKq1rp7R","object":"chat.completion.chunk","created":1759337938,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Change"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"bEQ7drkAq"}
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Print"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"7faLDwrKJz"}
 
-      data: {"id":"chatcmpl-CLuSIABs2T781fy3TB5oxKKq1rp7R","object":"chat.completion.chunk","created":1759337938,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Print"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"mku27xpqAg"}
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" \""},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"pgtE6s791r04J"}
 
-      data: {"id":"chatcmpl-CLuSIABs2T781fy3TB5oxKKq1rp7R","object":"chat.completion.chunk","created":1759337938,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Message"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"DaN2NEkg"}
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Hello"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"rj303joO5ch"}
 
-      data: {"id":"chatcmpl-CLuSIABs2T781fy3TB5oxKKq1rp7R","object":"chat.completion.chunk","created":1759337938,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"bEaKtby0w2"}
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" from"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"1MRlnKdkfZ8"}
 
-      data: {"id":"chatcmpl-CLuSIABs2T781fy3TB5oxKKq1rp7R","object":"chat.completion.chunk","created":1759337938,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":122,"completion_tokens":7,"total_tokens":129,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"QRkc7kvcLB2QQ8"}
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Crush"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"Dx79nM3uDa"}
+
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"\""},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"IzsD4gA0cYsBHp"}
+
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"q1KLYQX7ZN"}
+
+      data: {"id":"chatcmpl-CQ4Hgzo3VYMs8Kyhu29ceXBTBABlj","object":"chat.completion.chunk","created":1760329032,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":139,"completion_tokens":10,"total_tokens":149,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"LzZ7G56PhpZMn"}
 
       data: [DONE]
 
@@ -51,15 +57,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 516.295ms
+    duration: 981.594041ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30661
+    content_length: 30727
     host: ""

internal/agent/testdata/TestCoderAgent/openai-gpt-5/write_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 714
+    content_length: 767
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse write to create a new file called config.json with content ''{\"name\": \"test\", \"version\": \"1.0.0\"}''","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse write to create a new file called config.json with content ''{\"name\": \"test\", \"version\": \"1.0.0\"}''\n <think>\n\n</think>","role":"user"}],"model":"gpt-4o","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,27 +24,23 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"chatcmpl-CLuVDj86LO7uoa1CdG2mfD3JVwbzF","object":"chat.completion.chunk","created":1759338119,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"n0hU8uavVOkbSZ"}
+      data: {"id":"chatcmpl-CQ4KCByqlwrziZqA97J5dsPSdvwfk","object":"chat.completion.chunk","created":1760329188,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"4xZXmUB6djAMqD"}
 
-      data: {"id":"chatcmpl-CLuVDj86LO7uoa1CdG2mfD3JVwbzF","object":"chat.completion.chunk","created":1759338119,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":"Creating"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"yB2tVfbL"}
+      data: {"id":"chatcmpl-CQ4KCByqlwrziZqA97J5dsPSdvwfk","object":"chat.completion.chunk","created":1760329188,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":"Create"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"9QSNGFDrL7"}
 
-      data: {"id":"chatcmpl-CLuVDj86LO7uoa1CdG2mfD3JVwbzF","object":"chat.completion.chunk","created":1759338119,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" a"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"fAGfXdgPdq1bTp"}
+      data: {"id":"chatcmpl-CQ4KCByqlwrziZqA97J5dsPSdvwfk","object":"chat.completion.chunk","created":1760329188,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" config"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"NdlP6eQQX"}
 
-      data: {"id":"chatcmpl-CLuVDj86LO7uoa1CdG2mfD3JVwbzF","object":"chat.completion.chunk","created":1759338119,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" JSON"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"1e0rbDm5JBK"}
+      data: {"id":"chatcmpl-CQ4KCByqlwrziZqA97J5dsPSdvwfk","object":"chat.completion.chunk","created":1760329188,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":".json"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"1rWY29BUHR5"}
 
-      data: {"id":"chatcmpl-CLuVDj86LO7uoa1CdG2mfD3JVwbzF","object":"chat.completion.chunk","created":1759338119,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Config"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"9K9gPZ6dr"}
+      data: {"id":"chatcmpl-CQ4KCByqlwrziZqA97J5dsPSdvwfk","object":"chat.completion.chunk","created":1760329188,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" with"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"MbaOOx8zvV2"}
 
-      data: {"id":"chatcmpl-CLuVDj86LO7uoa1CdG2mfD3JVwbzF","object":"chat.completion.chunk","created":1759338119,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" File"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"Sewxok0B5hH"}
+      data: {"id":"chatcmpl-CQ4KCByqlwrziZqA97J5dsPSdvwfk","object":"chat.completion.chunk","created":1760329188,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" JSON"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"WGnVnir3iun"}
 
-      data: {"id":"chatcmpl-CLuVDj86LO7uoa1CdG2mfD3JVwbzF","object":"chat.completion.chunk","created":1759338119,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" with"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"LVZfga5gIAT"}
+      data: {"id":"chatcmpl-CQ4KCByqlwrziZqA97J5dsPSdvwfk","object":"chat.completion.chunk","created":1760329188,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{"content":" Content"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"07K3sZf8"}
 
-      data: {"id":"chatcmpl-CLuVDj86LO7uoa1CdG2mfD3JVwbzF","object":"chat.completion.chunk","created":1759338119,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Version"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"7FYI6qjD"}
+      data: {"id":"chatcmpl-CQ4KCByqlwrziZqA97J5dsPSdvwfk","object":"chat.completion.chunk","created":1760329188,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"3fs9T1uMOb"}
 
-      data: {"id":"chatcmpl-CLuVDj86LO7uoa1CdG2mfD3JVwbzF","object":"chat.completion.chunk","created":1759338119,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{"content":" Info"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"dWSAttdAR9J"}
-
-      data: {"id":"chatcmpl-CLuVDj86LO7uoa1CdG2mfD3JVwbzF","object":"chat.completion.chunk","created":1759338119,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"yEK5tZLeR2"}
-
-      data: {"id":"chatcmpl-CLuVDj86LO7uoa1CdG2mfD3JVwbzF","object":"chat.completion.chunk","created":1759338119,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_f33640a400","choices":[],"usage":{"prompt_tokens":137,"completion_tokens":8,"total_tokens":145,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"36VYWrnOo8PuzR"}
+      data: {"id":"chatcmpl-CQ4KCByqlwrziZqA97J5dsPSdvwfk","object":"chat.completion.chunk","created":1760329188,"model":"gpt-4o-2024-08-06","service_tier":"default","system_fingerprint":"fp_cbf1785567","choices":[],"usage":{"prompt_tokens":153,"completion_tokens":6,"total_tokens":159,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"MjBcaUIEL96vKD"}
 
       data: [DONE]
 
@@ -53,15 +49,15 @@ interactions:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 615.102334ms
+    duration: 444.867417ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30698
+    content_length: 30764
     host: ""

internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/bash_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 722
+    content_length: 775
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse bash to create a file named test.txt with content ''hello bash''","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse bash to create a file named test.txt with content ''hello bash''\n <think>\n\n</think>","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,21 +24,23 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"gen-1759338160-lia6XT1140YVD1V8HPPw","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338160,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329238-Bh1pHVDXl5tEH7EHb8pa","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329238,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338160-lia6XT1140YVD1V8HPPw","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338160,"choices":[{"index":0,"delta":{"role":"assistant","content":"Create"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329238-Bh1pHVDXl5tEH7EHb8pa","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329238,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338160-lia6XT1140YVD1V8HPPw","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338160,"choices":[{"index":0,"delta":{"role":"assistant","content":" test"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329238-Bh1pHVDXl5tEH7EHb8pa","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329238,"choices":[{"index":0,"delta":{"role":"assistant","content":"Create"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338160-lia6XT1140YVD1V8HPPw","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338160,"choices":[{"index":0,"delta":{"role":"assistant","content":".txt with"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329238-Bh1pHVDXl5tEH7EHb8pa","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329238,"choices":[{"index":0,"delta":{"role":"assistant","content":" test"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338160-lia6XT1140YVD1V8HPPw","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338160,"choices":[{"index":0,"delta":{"role":"assistant","content":" hello bash using"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329238-Bh1pHVDXl5tEH7EHb8pa","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329238,"choices":[{"index":0,"delta":{"role":"assistant","content":".txt with"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338160-lia6XT1140YVD1V8HPPw","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338160,"choices":[{"index":0,"delta":{"role":"assistant","content":" bash"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329238-Bh1pHVDXl5tEH7EHb8pa","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329238,"choices":[{"index":0,"delta":{"role":"assistant","content":" hello bash using"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338160-lia6XT1140YVD1V8HPPw","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338160,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}]}
+      data: {"id":"gen-1760329238-Bh1pHVDXl5tEH7EHb8pa","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329238,"choices":[{"index":0,"delta":{"role":"assistant","content":" bash"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338160-lia6XT1140YVD1V8HPPw","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338160,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":127,"completion_tokens":9,"total_tokens":136,"cost":0.00002985,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.00001905,"upstream_inference_completions_cost":0.0000108},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
+      data: {"id":"gen-1760329238-Bh1pHVDXl5tEH7EHb8pa","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329238,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}]}
+
+      data: {"id":"gen-1760329238-Bh1pHVDXl5tEH7EHb8pa","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329238,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":141,"completion_tokens":9,"total_tokens":150,"cost":0.00002964,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.00001974,"upstream_inference_completions_cost":0.0000099},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
 
       data: [DONE]
 
@@ -47,15 +49,15 @@ interactions:
       - text/event-stream
     status: 200 OK
     code: 200
-    duration: 685.759709ms
+    duration: 776.034042ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30692
+    content_length: 30758
     host: ""

internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/download_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 735
+    content_length: 788
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\ndownload the file from https://httpbin.org/robots.txt and save it as robots.txt","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\ndownload the file from https://httpbin.org/robots.txt and save it as robots.txt\n <think>\n\n</think>","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,19 +24,19 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"gen-1759338169-VQuyzuINOaDHVo3ymv6R","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338170,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329245-1zuYtVSpTCWXPD07DxKF","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329245,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338169-VQuyzuINOaDHVo3ymv6R","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338170,"choices":[{"index":0,"delta":{"role":"assistant","content":"Download"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329245-1zuYtVSpTCWXPD07DxKF","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329245,"choices":[{"index":0,"delta":{"role":"assistant","content":"Download"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338169-VQuyzuINOaDHVo3ymv6R","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338170,"choices":[{"index":0,"delta":{"role":"assistant","content":" robots"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329245-1zuYtVSpTCWXPD07DxKF","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329245,"choices":[{"index":0,"delta":{"role":"assistant","content":" robots"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338169-VQuyzuINOaDHVo3ymv6R","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338170,"choices":[{"index":0,"delta":{"role":"assistant","content":".txt from httpbin"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329245-1zuYtVSpTCWXPD07DxKF","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329245,"choices":[{"index":0,"delta":{"role":"assistant","content":".txt from httpbin"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338169-VQuyzuINOaDHVo3ymv6R","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338170,"choices":[{"index":0,"delta":{"role":"assistant","content":".org"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329245-1zuYtVSpTCWXPD07DxKF","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329245,"choices":[{"index":0,"delta":{"role":"assistant","content":".org"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338169-VQuyzuINOaDHVo3ymv6R","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338170,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}]}
+      data: {"id":"gen-1760329245-1zuYtVSpTCWXPD07DxKF","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329245,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}]}
 
-      data: {"id":"gen-1759338169-VQuyzuINOaDHVo3ymv6R","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338170,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":130,"completion_tokens":8,"total_tokens":138,"cost":0.0000291,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.0000195,"upstream_inference_completions_cost":0.0000096},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
+      data: {"id":"gen-1760329245-1zuYtVSpTCWXPD07DxKF","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329245,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":145,"completion_tokens":8,"total_tokens":153,"cost":0.00003135,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.00002175,"upstream_inference_completions_cost":0.0000096},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
 
       data: [DONE]
 
@@ -45,15 +45,15 @@ interactions:
       - text/event-stream
     status: 200 OK
     code: 200
-    duration: 941.629583ms
+    duration: 816.702209ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30709
+    content_length: 30775
     host: ""

internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/fetch_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 748
+    content_length: 801
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nfetch the content from https://httpbin.org/html and tell me if it contains the word ''Herman''","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nfetch the content from https://httpbin.org/html and tell me if it contains the word ''Herman''\n <think>\n\n</think>","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,21 +24,23 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"gen-1759338178-uuvKjRZnuSX9gTRQC5zo","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338178,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329262-gXcDcJIJdCaivVwtSLyj","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329262,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338178-uuvKjRZnuSX9gTRQC5zo","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338178,"choices":[{"index":0,"delta":{"role":"assistant","content":"Check"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329262-gXcDcJIJdCaivVwtSLyj","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329262,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338178-uuvKjRZnuSX9gTRQC5zo","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338178,"choices":[{"index":0,"delta":{"role":"assistant","content":" if https"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329262-gXcDcJIJdCaivVwtSLyj","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329262,"choices":[{"index":0,"delta":{"role":"assistant","content":"Check"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338178-uuvKjRZnuSX9gTRQC5zo","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338178,"choices":[{"index":0,"delta":{"role":"assistant","content":"://httpbin.org"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329262-gXcDcJIJdCaivVwtSLyj","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329262,"choices":[{"index":0,"delta":{"role":"assistant","content":" if https"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338178-uuvKjRZnuSX9gTRQC5zo","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338178,"choices":[{"index":0,"delta":{"role":"assistant","content":"/html contains the word"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329262-gXcDcJIJdCaivVwtSLyj","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329262,"choices":[{"index":0,"delta":{"role":"assistant","content":"://httpbin.org"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338178-uuvKjRZnuSX9gTRQC5zo","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338178,"choices":[{"index":0,"delta":{"role":"assistant","content":" Herman"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329262-gXcDcJIJdCaivVwtSLyj","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329262,"choices":[{"index":0,"delta":{"role":"assistant","content":"/html contains the word"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338178-uuvKjRZnuSX9gTRQC5zo","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338178,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}]}
+      data: {"id":"gen-1760329262-gXcDcJIJdCaivVwtSLyj","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329262,"choices":[{"index":0,"delta":{"role":"assistant","content":" Herman"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338178-uuvKjRZnuSX9gTRQC5zo","provider":"Google","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338178,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":134,"completion_tokens":13,"total_tokens":147,"cost":0.0000357,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.0000201,"upstream_inference_completions_cost":0.0000156},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
+      data: {"id":"gen-1760329262-gXcDcJIJdCaivVwtSLyj","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329262,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}]}
+
+      data: {"id":"gen-1760329262-gXcDcJIJdCaivVwtSLyj","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329262,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":148,"completion_tokens":13,"total_tokens":161,"cost":0.00003502,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.00002072,"upstream_inference_completions_cost":0.0000143},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
 
       data: [DONE]
 
@@ -47,15 +49,15 @@ interactions:
       - text/event-stream
     status: 200 OK
     code: 200
-    duration: 795.606292ms
+    duration: 812.382041ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30719
+    content_length: 30785
     host: ""

internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/grep_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 709
+    content_length: 762
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse grep to search for the word ''package'' in go files","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse grep to search for the word ''package'' in go files\n <think>\n\n</think>","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -23,21 +23,35 @@ interactions:
     proto_major: 2
     proto_minor: 0
     content_length: -1
-    body: '{"error":{"message":"Provider returned error","code":429,"metadata":{"raw":"qwen/qwen3-next-80b-a3b-instruct is temporarily rate-limited upstream. Please retry shortly, or add your own key to accumulate your rate limits: https://openrouter.ai/settings/integrations","provider_name":"GMICloud"}},"user_id":"user_2zMGmKqlf4zmAvL9snVImB1Z1ZQ"}'
+    body: |+
+      data: {"id":"gen-1760329569-6a0Jj1oG8w5pgboWCl1E","provider":"GMICloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329569,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+
+      data: {"id":"gen-1760329569-6a0Jj1oG8w5pgboWCl1E","provider":"GMICloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329569,"choices":[{"index":0,"delta":{"role":"assistant","content":"Search"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+
+      data: {"id":"gen-1760329569-6a0Jj1oG8w5pgboWCl1E","provider":"GMICloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329569,"choices":[{"index":0,"delta":{"role":"assistant","content":" for package in Go"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+
+      data: {"id":"gen-1760329569-6a0Jj1oG8w5pgboWCl1E","provider":"GMICloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329569,"choices":[{"index":0,"delta":{"role":"assistant","content":" files using grep"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+
+      data: {"id":"gen-1760329569-6a0Jj1oG8w5pgboWCl1E","provider":"GMICloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329569,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}]}
+
+      data: {"id":"gen-1760329569-6a0Jj1oG8w5pgboWCl1E","provider":"GMICloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329569,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":140,"completion_tokens":9,"total_tokens":149,"cost":0.0000345,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.000021,"upstream_inference_completions_cost":0.0000135},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
+
+      data: [DONE]
+
     headers:
       Content-Type:
-      - application/json
-    status: 429 Too Many Requests
-    code: 429
-    duration: 880.966417ms
+      - text/event-stream
+    status: 200 OK
+    code: 200
+    duration: 908.604334ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30679
+    content_length: 30745
     host: ""

internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/ls_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 705
+    content_length: 758
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse ls to list the files in the current directory","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse ls to list the files in the current directory\n <think>\n\n</think>","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -23,21 +23,35 @@ interactions:
     proto_major: 2
     proto_minor: 0
     content_length: -1
-    body: '{"error":{"message":"Provider returned error","code":429,"metadata":{"raw":"qwen/qwen3-next-80b-a3b-instruct is temporarily rate-limited upstream. Please retry shortly, or add your own key to accumulate your rate limits: https://openrouter.ai/settings/integrations","provider_name":"GMICloud"}},"user_id":"user_2zMGmKqlf4zmAvL9snVImB1Z1ZQ"}'
+    body: |+
+      data: {"id":"gen-1760329311-uB6hzbvaeNOL4hazdZZ9","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329311,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
+
+      data: {"id":"gen-1760329311-uB6hzbvaeNOL4hazdZZ9","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329311,"choices":[{"index":0,"delta":{"role":"assistant","content":"List"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
+
+      data: {"id":"gen-1760329311-uB6hzbvaeNOL4hazdZZ9","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329311,"choices":[{"index":0,"delta":{"role":"assistant","content":" files in current directory"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
+
+      data: {"id":"gen-1760329311-uB6hzbvaeNOL4hazdZZ9","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329311,"choices":[{"index":0,"delta":{"role":"assistant","content":" using ls"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
+
+      data: {"id":"gen-1760329311-uB6hzbvaeNOL4hazdZZ9","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329311,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}],"system_fingerprint":""}
+
+      data: {"id":"gen-1760329311-uB6hzbvaeNOL4hazdZZ9","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329311,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":137,"completion_tokens":8,"total_tokens":145,"cost":0.00003038,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.00001918,"upstream_inference_completions_cost":0.0000112},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
+
+      data: [DONE]
+
     headers:
       Content-Type:
-      - application/json
-    status: 429 Too Many Requests
-    code: 429
-    duration: 1.266272291s
+      - text/event-stream
+    status: 200 OK
+    code: 200
+    duration: 811.323291ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30673
+    content_length: 30739
     host: ""

internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/multiedit_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 784
+    content_length: 837
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse multiedit to change ''Hello, World!'' to ''Hello, Crush!'' and add a comment ''// Greeting'' above the fmt.Println line in main.go","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse multiedit to change ''Hello, World!'' to ''Hello, Crush!'' and add a comment ''// Greeting'' above the fmt.Println line in main.go\n <think>\n\n</think>","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,37 +24,23 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329327-WR0ufjE3lWtTXlrGOndS","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329327,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":"Use"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329327-WR0ufjE3lWtTXlrGOndS","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329327,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":" mult"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329327-WR0ufjE3lWtTXlrGOndS","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329327,"choices":[{"index":0,"delta":{"role":"assistant","content":"Use"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":"ied"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329327-WR0ufjE3lWtTXlrGOndS","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329327,"choices":[{"index":0,"delta":{"role":"assistant","content":" multiedit to"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":"it"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329327-WR0ufjE3lWtTXlrGOndS","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329327,"choices":[{"index":0,"delta":{"role":"assistant","content":" update greeting"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":" to"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329327-WR0ufjE3lWtTXlrGOndS","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329327,"choices":[{"index":0,"delta":{"role":"assistant","content":" and add comment in"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":" update"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329327-WR0ufjE3lWtTXlrGOndS","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329327,"choices":[{"index":0,"delta":{"role":"assistant","content":" main.go"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":" greeting"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329327-WR0ufjE3lWtTXlrGOndS","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329327,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}]}
 
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":" and"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
-
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":" add"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
-
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":" comment"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
-
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":" in"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
-
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":" main"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
-
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":".go"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
-
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}]}
-
-      data: {"id":"gen-1759378400-0QortBKI7SIAJtFnqJF4","provider":"AtlasCloud","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759378400,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":145,"completion_tokens":14,"total_tokens":159,"cost":0.00004275,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.00002175,"upstream_inference_completions_cost":0.000021},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
+      data: {"id":"gen-1760329327-WR0ufjE3lWtTXlrGOndS","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329327,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":160,"completion_tokens":14,"total_tokens":174,"cost":0.0000378,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.0000224,"upstream_inference_completions_cost":0.0000154},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
 
       data: [DONE]
 
@@ -63,15 +49,15 @@ interactions:
       - text/event-stream
     status: 200 OK
     code: 200
-    duration: 1.548603375s
+    duration: 883.212125ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30759
+    content_length: 30825
     host: ""

internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/sourcegraph_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 716
+    content_length: 769
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse sourcegraph to search for ''func main'' in Go repositories","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse sourcegraph to search for ''func main'' in Go repositories\n <think>\n\n</think>","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,31 +24,21 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329336-7qhCEEQC5O5Y3Bc2x9W7","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329336,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
 
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":"Search"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329336-7qhCEEQC5O5Y3Bc2x9W7","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329336,"choices":[{"index":0,"delta":{"role":"assistant","content":"Search"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
 
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":" for"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329336-7qhCEEQC5O5Y3Bc2x9W7","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329336,"choices":[{"index":0,"delta":{"role":"assistant","content":" for func"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
 
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":" func"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329336-7qhCEEQC5O5Y3Bc2x9W7","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329336,"choices":[{"index":0,"delta":{"role":"assistant","content":" main in Go repositories"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
 
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":" main"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329336-7qhCEEQC5O5Y3Bc2x9W7","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329336,"choices":[{"index":0,"delta":{"role":"assistant","content":" using Source"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
 
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":" in"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329336-7qhCEEQC5O5Y3Bc2x9W7","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329336,"choices":[{"index":0,"delta":{"role":"assistant","content":"graph"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
 
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":" Go"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
+      data: {"id":"gen-1760329336-7qhCEEQC5O5Y3Bc2x9W7","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329336,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}],"system_fingerprint":""}
 
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":" repositories"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
-
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":" using"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
-
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":" Source"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
-
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":"graph"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
-
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}]}
-
-      data: {"id":"gen-1759338211-LicY2wSfLozNiTvKbilm","provider":"Chutes","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338211,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":125,"completion_tokens":11,"total_tokens":136,"cost":0.0000213,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.0000125,"upstream_inference_completions_cost":0.0000088},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
+      data: {"id":"gen-1760329336-7qhCEEQC5O5Y3Bc2x9W7","provider":"SiliconFlow","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329336,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":140,"completion_tokens":11,"total_tokens":151,"cost":0.000035,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.0000196,"upstream_inference_completions_cost":0.0000154},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
 
       data: [DONE]
 
@@ -57,15 +47,15 @@ interactions:
       - text/event-stream
     status: 200 OK
     code: 200
-    duration: 1.445218375s
+    duration: 1.835886417s
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30693
+    content_length: 30759
     host: ""

internal/agent/testdata/TestCoderAgent/openrouter-kimi-k2/update_a_file.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 725
+    content_length: 778
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nupdate the main.go file by changing the print to say hello from crush","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nupdate the main.go file by changing the print to say hello from crush\n <think>\n\n</think>","role":"user"}],"model":"qwen/qwen3-next-80b-a3b-instruct","max_tokens":40,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,19 +24,21 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"gen-1759338148-cW7pABU0qeaLg0NwSX1d","provider":"Novita","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338149,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
+      data: {"id":"gen-1760329217-DTBtITEhBYmpCYMM5hNt","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329217,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338148-cW7pABU0qeaLg0NwSX1d","provider":"Novita","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338149,"choices":[{"index":0,"delta":{"role":"assistant","content":"Update"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
+      data: {"id":"gen-1760329217-DTBtITEhBYmpCYMM5hNt","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329217,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338148-cW7pABU0qeaLg0NwSX1d","provider":"Novita","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338149,"choices":[{"index":0,"delta":{"role":"assistant","content":" main.go to print"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
+      data: {"id":"gen-1760329217-DTBtITEhBYmpCYMM5hNt","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329217,"choices":[{"index":0,"delta":{"role":"assistant","content":"Update"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338148-cW7pABU0qeaLg0NwSX1d","provider":"Novita","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338149,"choices":[{"index":0,"delta":{"role":"assistant","content":" hello"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
+      data: {"id":"gen-1760329217-DTBtITEhBYmpCYMM5hNt","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329217,"choices":[{"index":0,"delta":{"role":"assistant","content":" main.go to print"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338148-cW7pABU0qeaLg0NwSX1d","provider":"Novita","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338149,"choices":[{"index":0,"delta":{"role":"assistant","content":" from crush"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"system_fingerprint":""}
+      data: {"id":"gen-1760329217-DTBtITEhBYmpCYMM5hNt","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329217,"choices":[{"index":0,"delta":{"role":"assistant","content":" hello"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338148-cW7pABU0qeaLg0NwSX1d","provider":"Novita","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338149,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}],"system_fingerprint":""}
+      data: {"id":"gen-1760329217-DTBtITEhBYmpCYMM5hNt","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329217,"choices":[{"index":0,"delta":{"role":"assistant","content":" from crush"},"finish_reason":null,"native_finish_reason":null,"logprobs":null}]}
 
-      data: {"id":"gen-1759338148-cW7pABU0qeaLg0NwSX1d","provider":"Novita","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1759338149,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":126,"completion_tokens":8,"total_tokens":134,"cost":0.0000309,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.0000189,"upstream_inference_completions_cost":0.000012},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
+      data: {"id":"gen-1760329217-DTBtITEhBYmpCYMM5hNt","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329217,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop","native_finish_reason":"stop","logprobs":null}]}
+
+      data: {"id":"gen-1760329217-DTBtITEhBYmpCYMM5hNt","provider":"DeepInfra","model":"qwen/qwen3-next-80b-a3b-instruct","object":"chat.completion.chunk","created":1760329217,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"native_finish_reason":null,"logprobs":null}],"usage":{"prompt_tokens":141,"completion_tokens":9,"total_tokens":150,"cost":0.00002964,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0.00001974,"upstream_inference_completions_cost":0.0000099},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0}}}
 
       data: [DONE]
 
@@ -45,15 +47,15 @@ interactions:
       - text/event-stream
     status: 200 OK
     code: 200
-    duration: 1.320866667s
+    duration: 891.718ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30699
+    content_length: 30765
     host: ""

internal/agent/testdata/TestCoderAgent/zai-glm4.6/bash_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 676
+    content_length: 729
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse bash to create a file named test.txt with content ''hello bash''","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse bash to create a file named test.txt with content ''hello bash''\n <think>\n\n</think>","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,163 +24,222 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"20251002201331c33af8c317314d35","created":1759407211,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
+      data: {"id":"20251013122314c2cc95c9e7ad4f75","created":1760329394,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
 
-      data: {"id":"20251002201331c33af8c317314d35","created":1759407211,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"I"}}]}
+      data: {"id":"20251013122314c2cc95c9e7ad4f75","created":1760329394,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"B"}}]}
 
-      data: {"id":"20251002201331c33af8c317314d35","created":1759407211,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" need"}}]}
+      data: {"id":"20251013122314c2cc95c9e7ad4f75","created":1760329394,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"ash"}}]}
 
-      data: {"id":"20251002201331c33af8c317314d35","created":1759407211,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
+      data: {"id":"20251013122314c2cc95c9e7ad4f75","created":1760329394,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" file"}}]}
 
-      data: {"id":"20251002201331c33af8c317314d35","created":1759407211,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" generate"}}]}
+      data: {"id":"20251013122314c2cc95c9e7ad4f75","created":1760329394,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" creation"}}]}
 
-      data: {"id":"20251002201331c33af8c317314d35","created":1759407211,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
+      data: {"id":"20251013122314c2cc95c9e7ad4f75","created":1760329394,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" with"}}]}
 
-      data: {"id":"20251002201331c33af8c317314d35","created":1759407211,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" concise"}}]}
+      data: {"id":"20251013122314c2cc95c9e7ad4f75","created":1760329394,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" hello"}}]}
 
-      data: {"id":"20251002201331c33af8c317314d35","created":1759407211,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" title"}}]}
+      data: {"id":"20251013122314c2cc95c9e7ad4f75","created":1760329394,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" content"}}]}
 
-      data: {"id":"20251002201331c33af8c317314d35","created":1759407211,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" for"}}]}
+      data: {"id":"20251013122314c2cc95c9e7ad4f75","created":1760329394,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":134,"completion_tokens":11,"total_tokens":145,"prompt_tokens_details":{"cached_tokens":114}}}
 
-      data: {"id":"20251002201331c33af8c317314d35","created":1759407211,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
+      data: [DONE]
 
-      data: {"id":"20251002201331c33af8c317314d35","created":1759407211,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
+    headers:
+      Content-Type:
+      - text/event-stream;charset=UTF-8
+    status: 200 OK
+    code: 200
+    duration: 793.546792ms
+- id: 1
+  request:
+    proto: HTTP/1.1
+    proto_major: 1
+    proto_minor: 1
+    content_length: 30709
+    host: ""

internal/agent/testdata/TestCoderAgent/zai-glm4.6/download_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 689
+    content_length: 742
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\ndownload the file from https://httpbin.org/robots.txt and save it as robots.txt","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\ndownload the file from https://httpbin.org/robots.txt and save it as robots.txt\n <think>\n\n</think>","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,85 +24,21 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
+      data: {"id":"202510131223205d605bb28a98404d","created":1760329400,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
 
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"I"}}]}
+      data: {"id":"202510131223205d605bb28a98404d","created":1760329400,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"download"}}]}
 
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" need"}}]}
+      data: {"id":"202510131223205d605bb28a98404d","created":1760329400,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" robots"}}]}
 
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
+      data: {"id":"202510131223205d605bb28a98404d","created":1760329400,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":".txt"}}]}
 
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" generate"}}]}
+      data: {"id":"202510131223205d605bb28a98404d","created":1760329400,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" from"}}]}
 
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
+      data: {"id":"202510131223205d605bb28a98404d","created":1760329400,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" http"}}]}
 
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" concise"}}]}
+      data: {"id":"202510131223205d605bb28a98404d","created":1760329400,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"bin"}}]}
 
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" title"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" for"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"'s"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" request"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"."}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" The"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" wants"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" me"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" generate"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" title"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" for"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" content"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" which"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" is"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" about"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" downloading"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" file"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" from"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" specific"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" URL"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" and"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" saving"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" it"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" with"}}]}
-
-      data: {"id":"202510022013394ef1adf44a26449e","created":1759407219,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"length","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":123,"completion_tokens":40,"total_tokens":163,"prompt_tokens_details":{"cached_tokens":4}}}
+      data: {"id":"202510131223205d605bb28a98404d","created":1760329400,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":138,"completion_tokens":10,"total_tokens":148,"prompt_tokens_details":{"cached_tokens":114}}}
 
       data: [DONE]
 
@@ -111,15 +47,15 @@ interactions:
       - text/event-stream;charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 608.569667ms
+    duration: 613.616291ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30660
+    content_length: 30726
     host: ""

internal/agent/testdata/TestCoderAgent/zai-glm4.6/fetch_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 702
+    content_length: 755
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nfetch the content from https://httpbin.org/html and tell me if it contains the word ''Herman''","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nfetch the content from https://httpbin.org/html and tell me if it contains the word ''Herman''\n <think>\n\n</think>","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,85 +24,19 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
+      data: {"id":"2025101312232309f300c59fda4ea3","created":1760329403,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
 
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"I"}}]}
+      data: {"id":"2025101312232309f300c59fda4ea3","created":1760329403,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"Check"}}]}
 
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" need"}}]}
+      data: {"id":"2025101312232309f300c59fda4ea3","created":1760329403,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" if"}}]}
 
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
+      data: {"id":"2025101312232309f300c59fda4ea3","created":1760329403,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" HTML"}}]}
 
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" create"}}]}
+      data: {"id":"2025101312232309f300c59fda4ea3","created":1760329403,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" contains"}}]}
 
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
+      data: {"id":"2025101312232309f300c59fda4ea3","created":1760329403,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" Herman"}}]}
 
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" short"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" title"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" for"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"'s"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" request"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"."}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" The"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" wants"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" me"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":":\n"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"1"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"."}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" Fetch"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" content"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" from"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" https"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"://"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"http"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"bin"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":".org"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"/html"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"","reasoning_content":"\n"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"2"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"."}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" Check"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" if"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" it"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" contains"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"20251002201405fd37716f1a814455","created":1759407245,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"length","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":127,"completion_tokens":40,"total_tokens":167,"prompt_tokens_details":{"cached_tokens":104}}}
+      data: {"id":"2025101312232309f300c59fda4ea3","created":1760329403,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":141,"completion_tokens":9,"total_tokens":150,"prompt_tokens_details":{"cached_tokens":114}}}
 
       data: [DONE]
 
@@ -111,15 +45,15 @@ interactions:
       - text/event-stream;charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 776.999875ms
+    duration: 599.429333ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30670
+    content_length: 30736
     host: ""

internal/agent/testdata/TestCoderAgent/zai-glm4.6/glob_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 665
+    content_length: 718
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse glob to find all .go files in the current directory","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse glob to find all .go files in the current directory\n <think>\n\n</think>","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,85 +24,19 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
+      data: {"id":"20251013122327725a3b36701d44ed","created":1760329407,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
 
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"I"}}]}
+      data: {"id":"20251013122327725a3b36701d44ed","created":1760329407,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"Find"}}]}
 
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" need"}}]}
+      data: {"id":"20251013122327725a3b36701d44ed","created":1760329407,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" Go"}}]}
 
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
+      data: {"id":"20251013122327725a3b36701d44ed","created":1760329407,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" files"}}]}
 
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" create"}}]}
+      data: {"id":"20251013122327725a3b36701d44ed","created":1760329407,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" with"}}]}
 
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
+      data: {"id":"20251013122327725a3b36701d44ed","created":1760329407,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" glob"}}]}
 
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" short"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" title"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" ("}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"under"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"","reasoning_content":" "}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"50"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" characters"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":")"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" that"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" summarizes"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"'s"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" message"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"."}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" The"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" is"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" asking"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" about"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" using"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" glob"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" find"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" all"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" ."}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"go"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" files"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" in"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" current"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" directory"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":".\n\n"}}]}
-
-      data: {"id":"20251002201416402fca746c29478e","created":1759407256,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"length","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":117,"completion_tokens":40,"total_tokens":157,"prompt_tokens_details":{"cached_tokens":105}}}
+      data: {"id":"20251013122327725a3b36701d44ed","created":1760329407,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":132,"completion_tokens":9,"total_tokens":141,"prompt_tokens_details":{"cached_tokens":115}}}
 
       data: [DONE]
 
@@ -111,15 +45,15 @@ interactions:
       - text/event-stream;charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 691.002625ms
+    duration: 633.133208ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30632
+    content_length: 30698
     host: ""

internal/agent/testdata/TestCoderAgent/zai-glm4.6/grep_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 663
+    content_length: 716
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse grep to search for the word ''package'' in go files","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse grep to search for the word ''package'' in go files\n <think>\n\n</think>","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,83 +24,19 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
+      data: {"id":"2025101312233179112968aef14156","created":1760329411,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
 
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"Let"}}]}
+      data: {"id":"2025101312233179112968aef14156","created":1760329411,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"grep"}}]}
 
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" me"}}]}
+      data: {"id":"2025101312233179112968aef14156","created":1760329411,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" package"}}]}
 
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" analyze"}}]}
+      data: {"id":"2025101312233179112968aef14156","created":1760329411,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" in"}}]}
 
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" this"}}]}
+      data: {"id":"2025101312233179112968aef14156","created":1760329411,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" go"}}]}
 
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" request"}}]}
+      data: {"id":"2025101312233179112968aef14156","created":1760329411,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" files"}}]}
 
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"."}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" The"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" wants"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" me"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" generate"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" concise"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" title"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" for"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" content"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" about"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" using"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" grep"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" search"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" for"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" word"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" '"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"package"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"'"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" in"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" Go"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" files"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":".\n\n"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"The"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" key"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" elements here"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" are"}}]}
-
-      data: {"id":"202510022014250e413c513a794e44","created":1759407265,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"length","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":118,"completion_tokens":40,"total_tokens":158,"prompt_tokens_details":{"cached_tokens":105}}}
+      data: {"id":"2025101312233179112968aef14156","created":1760329411,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":133,"completion_tokens":9,"total_tokens":142,"prompt_tokens_details":{"cached_tokens":4}}}
 
       data: [DONE]
 
@@ -109,15 +45,15 @@ interactions:
       - text/event-stream;charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 693.52975ms
+    duration: 616.141417ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30630
+    content_length: 30696
     host: ""

internal/agent/testdata/TestCoderAgent/zai-glm4.6/ls_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 659
+    content_length: 712
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse ls to list the files in the current directory","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse ls to list the files in the current directory\n <think>\n\n</think>","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,124 +24,142 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"20251002201445041809480c014e06","created":1759407285,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
+      data: {"id":"2025101312233588d65331cd61491d","created":1760329415,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
 
-      data: {"id":"20251002201445041809480c014e06","created":1759407285,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"I"}}]}
+      data: {"id":"2025101312233588d65331cd61491d","created":1760329415,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"List"}}]}
 
-      data: {"id":"20251002201445041809480c014e06","created":1759407285,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" need"}}]}
+      data: {"id":"2025101312233588d65331cd61491d","created":1760329415,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" files"}}]}
 
-      data: {"id":"20251002201445041809480c014e06","created":1759407285,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
+      data: {"id":"2025101312233588d65331cd61491d","created":1760329415,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" with"}}]}
 
-      data: {"id":"20251002201445041809480c014e06","created":1759407285,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" generate"}}]}
+      data: {"id":"2025101312233588d65331cd61491d","created":1760329415,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" ls"}}]}
 
-      data: {"id":"20251002201445041809480c014e06","created":1759407285,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
+      data: {"id":"2025101312233588d65331cd61491d","created":1760329415,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" command"}}]}
 
-      data: {"id":"20251002201445041809480c014e06","created":1759407285,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" short"}}]}
+      data: {"id":"2025101312233588d65331cd61491d","created":1760329415,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":130,"completion_tokens":9,"total_tokens":139,"prompt_tokens_details":{"cached_tokens":115}}}
 
-      data: {"id":"20251002201445041809480c014e06","created":1759407285,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" title"}}]}
+      data: [DONE]
 
-      data: {"id":"20251002201445041809480c014e06","created":1759407285,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" based"}}]}
+    headers:
+      Content-Type:
+      - text/event-stream;charset=UTF-8
+    status: 200 OK
+    code: 200
+    duration: 634.778709ms
+- id: 1
+  request:
+    proto: HTTP/1.1
+    proto_major: 1
+    proto_minor: 1
+    content_length: 30690
+    host: ""

internal/agent/testdata/TestCoderAgent/zai-glm4.6/multiedit_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 738
+    content_length: 30776
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse multiedit to change ''Hello, World!'' to ''Hello, Crush!'' and add a comment ''// Greeting'' above the fmt.Println line in main.go","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'

internal/agent/testdata/TestCoderAgent/zai-glm4.6/parallel_tool_calls.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 744
+    content_length: 797
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse glob to find all .go files and use ls to list the current directory, it is very important that you run both tool calls in parallel","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse glob to find all .go files and use ls to list the current directory, it is very important that you run both tool calls in parallel\n <think>\n\n</think>","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,85 +24,19 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
+      data: {"id":"20251013122452cec3d95157c64f18","created":1760329492,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
 
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"Let"}}]}
+      data: {"id":"20251013122452cec3d95157c64f18","created":1760329492,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"Parallel"}}]}
 
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" me"}}]}
+      data: {"id":"20251013122452cec3d95157c64f18","created":1760329492,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" glob"}}]}
 
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" analyze"}}]}
+      data: {"id":"20251013122452cec3d95157c64f18","created":1760329492,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" and"}}]}
 
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
+      data: {"id":"20251013122452cec3d95157c64f18","created":1760329492,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" ls"}}]}
 
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
+      data: {"id":"20251013122452cec3d95157c64f18","created":1760329492,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" commands"}}]}
 
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"'s"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" message"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" generate"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" concise"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" title"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":".\n\n"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"The"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" message"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" is"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" asking"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" me"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":":\n"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"1"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"."}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" Use"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" glob"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" find"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" all"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" ."}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"go"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" files"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"","reasoning_content":"\n"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"2"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"."}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" Use"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" ls"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" list"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"202510022015242e995145239b48a2","created":1759407324,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"length","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":134,"completion_tokens":40,"total_tokens":174,"prompt_tokens_details":{"cached_tokens":112}}}
+      data: {"id":"20251013122452cec3d95157c64f18","created":1760329492,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":149,"completion_tokens":9,"total_tokens":158,"prompt_tokens_details":{"cached_tokens":4}}}
 
       data: [DONE]
 
@@ -111,15 +45,15 @@ interactions:
       - text/event-stream;charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 715.508583ms
+    duration: 749.6785ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30721
+    content_length: 30787
     host: ""

internal/agent/testdata/TestCoderAgent/zai-glm4.6/read_a_file.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 625
+    content_length: 678
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nRead the go mod","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nRead the go mod\n <think>\n\n</think>","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,85 +24,15 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
+      data: {"id":"20251013122255161441410034401d","created":1760329375,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
 
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"We"}}]}
+      data: {"id":"20251013122255161441410034401d","created":1760329375,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"Go"}}]}
 
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" are"}}]}
+      data: {"id":"20251013122255161441410034401d","created":1760329375,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" mod"}}]}
 
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" generating"}}]}
+      data: {"id":"20251013122255161441410034401d","created":1760329375,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" content"}}]}
 
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" title"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" for"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"'s"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" message"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":":"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" \""}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"Read"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" go"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" mod"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"\"\n"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" The"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" title"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" should"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" be"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" summary"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" of"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" message"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":","}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" not"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" more"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" than"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"","reasoning_content":" "}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"50"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" characters"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":","}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" one"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" line"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" long"}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":","}}]}
-
-      data: {"id":"202510022012550421aa8f0b8545f4","created":1759407175,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"length","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":109,"completion_tokens":40,"total_tokens":149,"prompt_tokens_details":{"cached_tokens":104}}}
+      data: {"id":"20251013122255161441410034401d","created":1760329375,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":124,"completion_tokens":7,"total_tokens":131,"prompt_tokens_details":{"cached_tokens":4}}}
 
       data: [DONE]
 
@@ -111,15 +41,15 @@ interactions:
       - text/event-stream;charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 620.604541ms
+    duration: 586.880541ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30594
+    content_length: 30660
     host: ""

internal/agent/testdata/TestCoderAgent/zai-glm4.6/simple_test.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 615
+    content_length: 668
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nHello","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nHello\n <think>\n\n</think>","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,150 +24,160 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"20251002201254d74393f3a8974817","created":1759407174,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
+      data: {"id":"20251013122253f2fb9399bcb04764","created":1760329373,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
 
-      data: {"id":"20251002201254d74393f3a8974817","created":1759407174,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"The"}}]}
+      data: {"id":"20251013122253f2fb9399bcb04764","created":1760329373,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"Simple"}}]}
 
-      data: {"id":"20251002201254d74393f3a8974817","created":1759407174,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
+      data: {"id":"20251013122253f2fb9399bcb04764","created":1760329373,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" greeting"}}]}
 
-      data: {"id":"20251002201254d74393f3a8974817","created":1759407174,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" has"}}]}
+      data: {"id":"20251013122253f2fb9399bcb04764","created":1760329373,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":121,"completion_tokens":6,"total_tokens":127,"prompt_tokens_details":{"cached_tokens":4}}}
 
-      data: {"id":"20251002201254d74393f3a8974817","created":1759407174,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" asked"}}]}
+      data: [DONE]
 
-      data: {"id":"20251002201254d74393f3a8974817","created":1759407174,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" me"}}]}
+    headers:
+      Content-Type:
+      - text/event-stream;charset=UTF-8
+    status: 200 OK
+    code: 200
+    duration: 2.48478125s
+- id: 1
+  request:
+    proto: HTTP/1.1
+    proto_major: 1
+    proto_minor: 1
+    content_length: 30650
+    host: ""

internal/agent/testdata/TestCoderAgent/zai-glm4.6/sourcegraph_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 670
+    content_length: 30710
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse sourcegraph to search for ''func main'' in Go repositories","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'

internal/agent/testdata/TestCoderAgent/zai-glm4.6/update_a_file.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 679
+    content_length: 732
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nupdate the main.go file by changing the print to say hello from crush","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
+    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n<rules>\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nupdate the main.go file by changing the print to say hello from crush\n <think>\n\n</think>","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
     headers:
       Accept:
       - application/json
@@ -24,85 +24,25 @@ interactions:
     proto_minor: 0
     content_length: -1
     body: |+
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
+      data: {"id":"20251013122300ba8d144e087e4d83","created":1760329380,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"}}]}
 
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"Let"}}]}
+      data: {"id":"20251013122300ba8d144e087e4d83","created":1760329380,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":"Update"}}]}
 
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" me"}}]}
+      data: {"id":"20251013122300ba8d144e087e4d83","created":1760329380,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" main"}}]}
 
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" analyze"}}]}
+      data: {"id":"20251013122300ba8d144e087e4d83","created":1760329380,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":".go"}}]}
 
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
+      data: {"id":"20251013122300ba8d144e087e4d83","created":1760329380,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" to"}}]}
 
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
+      data: {"id":"20251013122300ba8d144e087e4d83","created":1760329380,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" print"}}]}
 
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"'s"}}]}
+      data: {"id":"20251013122300ba8d144e087e4d83","created":1760329380,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" hello"}}]}
 
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" message"}}]}
+      data: {"id":"20251013122300ba8d144e087e4d83","created":1760329380,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" from"}}]}
 
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":":\n\n"}}]}
+      data: {"id":"20251013122300ba8d144e087e4d83","created":1760329380,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","content":" crush"}}]}
 
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"\""}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"Generate"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" a"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" concise"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" title"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" for"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" following"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" content"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":":\n\n"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"update"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" main"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":".go"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" file"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" by"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" changing"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" the"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" print"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" to"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" say"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" hello"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" from"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" crush"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"\"\n\n"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"The"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" user"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" is"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" asking"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":" me"}}]}
-
-      data: {"id":"202510022012597af3a0eb31494726","created":1759407179,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"length","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":119,"completion_tokens":40,"total_tokens":159,"prompt_tokens_details":{"cached_tokens":104}}}
+      data: {"id":"20251013122300ba8d144e087e4d83","created":1760329380,"model":"glm-4.5-air","choices":[{"index":0,"finish_reason":"stop","delta":{"role":"assistant","content":""}}],"usage":{"prompt_tokens":134,"completion_tokens":12,"total_tokens":146,"prompt_tokens_details":{"cached_tokens":4}}}
 
       data: [DONE]
 
@@ -111,15 +51,15 @@ interactions:
       - text/event-stream;charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 684.753833ms
+    duration: 676.079417ms
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 30650
+    content_length: 30716
     host: ""

internal/agent/testdata/TestCoderAgent/zai-glm4.6/write_tool.yaml 🔗

@@ -6,9 +6,9 @@ interactions:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 719
+    content_length: 30753
     host: ""
-    body: '{"messages":[{"content":"you will generate a short title based on the first message a user begins a conversation with\n\n- ensure it is not more than 50 characters long\n- the title should be a summary of the user''s message\n- it should be one line long\n- do not use quotes or colons\n- the entire text you return will be used as the title\n- never return anything that is more than one sentence (one line) long\n","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse write to create a new file called config.json with content ''{\"name\": \"test\", \"version\": \"1.0.0\"}''","role":"user"}],"model":"glm-4.5-air","max_tokens":40,"stream_options":{"include_usage":true},"stream":true}'

internal/config/load.go 🔗

@@ -261,7 +261,12 @@ func (c *Config) configureProviders(env env.Env, resolver VariableResolver, know
 		}
 		// default to OpenAI if not set
 		if providerConfig.Type == "" {
-			providerConfig.Type = catwalk.TypeOpenAI
+			providerConfig.Type = catwalk.TypeOpenAICompat
+		}
+		if !slices.Contains(c.knownProviderTypes(), providerConfig.Type) {
+			slog.Warn("Skipping custom provider due to unsupported provider type", "provider", id)
+			c.Providers.Del(id)
+			continue
 		}
 
 		if providerConfig.Disable {
@@ -298,6 +303,18 @@ func (c *Config) configureProviders(env env.Env, resolver VariableResolver, know
 	return nil
 }
 
+func (c *Config) knownProviderTypes() []catwalk.Type {
+	return []catwalk.Type{
+		catwalk.TypeOpenAI,
+		catwalk.TypeAnthropic,
+		catwalk.TypeAzure,
+		catwalk.TypeBedrock,
+		catwalk.TypeGoogle,
+		catwalk.TypeVertexAI,
+		catwalk.TypeOpenAICompat,
+	}
+}
+
 func (c *Config) setDefaults(workingDir, dataDir string) {
 	c.workingDir = workingDir
 	if c.Options == nil {

internal/config/provider.go 🔗

@@ -18,7 +18,7 @@ import (
 )
 
 type ProviderClient interface {
-	GetProvidersV2() ([]catwalk.Provider, error)
+	GetProviders() ([]catwalk.Provider, error)
 }
 
 var (
@@ -129,7 +129,7 @@ func loadProviders(autoUpdateDisabled bool, client ProviderClient, path string)
 	cacheIsStale, cacheExists := isCacheStale(path)
 
 	catwalkGetAndSave := func() ([]catwalk.Provider, error) {
-		providers, err := client.GetProvidersV2()
+		providers, err := client.GetProviders()
 		if err != nil {
 			return nil, fmt.Errorf("failed to fetch providers from catwalk: %w", err)
 		}
@@ -146,7 +146,7 @@ func loadProviders(autoUpdateDisabled bool, client ProviderClient, path string)
 		go func() {
 			slog.Info("Updating providers cache in background", "path", path)
 
-			providers, err := client.GetProvidersV2()
+			providers, err := client.GetProviders()
 			if err != nil {
 				slog.Error("Failed to fetch providers in background from Catwalk", "error", err)
 				return

internal/config/provider_empty_test.go 🔗

@@ -11,7 +11,7 @@ import (
 
 type emptyProviderClient struct{}
 
-func (m *emptyProviderClient) GetProvidersV2() ([]catwalk.Provider, error) {
+func (m *emptyProviderClient) GetProviders() ([]catwalk.Provider, error) {
 	return []catwalk.Provider{}, nil
 }
 

internal/config/provider_test.go 🔗

@@ -14,7 +14,7 @@ type mockProviderClient struct {
 	shouldFail bool
 }
 
-func (m *mockProviderClient) GetProvidersV2() ([]catwalk.Provider, error) {
+func (m *mockProviderClient) GetProviders() ([]catwalk.Provider, error) {
 	if m.shouldFail {
 		return nil, errors.New("failed to load providers")
 	}