on 5ad8bee help sign in
8051 files changed+10653−5643674
since splitsnapshots
unifiedsplit
.github/cla-signatures.json−360 .github/workflows/build.yml+2−2 .github/workflows/labeler.yml+1−1 .github/workflows/lint.yml+1−1 .github/workflows/nightly.yml+1−1 .github/workflows/schema-update.yml+3−4 .github/workflows/security.yml+10−10 .github/workflows/snapshot.yml+3−3 .gitignore−1 .golangci.yml+4−16 AGENTS.md−40 README.md+19−133 docs/hooks/README.md−5 flake.lock+4−3 flake.nix+1−32 go.mod+69−70 go.sum+150−152 internal/agent/accepted_run_test.go−231 internal/agent/agent.go+130−976 internal/agent/agent_test.go−143 internal/agent/agent_tool.go+1−2 internal/agent/agentic_fetch_tool.go+3−5 internal/agent/agenttest/coordinator.go−80 internal/agent/common_test.go+1−2 internal/agent/coordinator.go+117−538 internal/agent/coordinator_test.go−169 internal/agent/dispatch_cancel_test.go−447 internal/agent/hyper/provider.go+3−25 internal/agent/hyper/provider.json+61−184 internal/agent/loop_detection.go+17−17 internal/agent/loop_detection_test.go+8−8 internal/agent/notify/notify.go−40 internal/agent/prompt/prompt.go+22−31 internal/agent/queued_runid_test.go−181 internal/agent/run_complete_test.go−322 internal/agent/run_marker.go−52 internal/agent/runid.go−33 internal/agent/templates/coder.md.tpl+5−20 internal/agent/testdata/TestCoderAgent/glm-5.1/bash_tool.yaml+303−179 internal/agent/testdata/TestCoderAgent/glm-5.1/download_tool.yaml+148−244 internal/agent/testdata/TestCoderAgent/glm-5.1/fetch_tool.yaml+319−328 internal/agent/testdata/TestCoderAgent/glm-5.1/glob_tool.yaml+169−595 internal/agent/testdata/TestCoderAgent/glm-5.1/grep_tool.yaml+182−288 internal/agent/testdata/TestCoderAgent/glm-5.1/ls_tool.yaml+165−291 internal/agent/testdata/TestCoderAgent/glm-5.1/multiedit_tool.yaml+511−807 internal/agent/testdata/TestCoderAgent/glm-5.1/parallel_tool_calls.yaml+203−453 internal/agent/testdata/TestCoderAgent/glm-5.1/read_a_file.yaml+218−166 internal/agent/testdata/TestCoderAgent/glm-5.1/simple_test.yaml+64−154 internal/agent/testdata/TestCoderAgent/glm-5.1/sourcegraph_tool.yaml+506−920 internal/agent/testdata/TestCoderAgent/glm-5.1/update_a_file.yaml+319−359 internal/agent/testdata/TestCoderAgent/glm-5.1/write_tool.yaml+147−315 internal/agent/tools/bash.go+27−16 internal/agent/tools/bash.md.tpl+33−61 internal/agent/tools/bash_test.go+3−113 internal/agent/tools/crush_info.go+1−2 internal/agent/tools/crush_logs.go+3−21 internal/agent/tools/crush_logs.md.tpl → internal/agent/tools/crush_logs.md+2−2 internal/agent/tools/diagnostics.go+1−2 internal/agent/tools/download.go+8−26 internal/agent/tools/download.md+1 internal/agent/tools/download.md.tpl−1 internal/agent/tools/edit.go+13−46 internal/agent/tools/fetch.go+15−29 internal/agent/tools/fetch.md.tpl+1−1 internal/agent/tools/glob.go+22−96 internal/agent/tools/glob.md+1 internal/agent/tools/glob.md.tpl−1 internal/agent/tools/glob_test.go−74 internal/agent/tools/grep.go+14−47 internal/agent/tools/grep.md+1 internal/agent/tools/grep.md.tpl−1 internal/agent/tools/job_kill.go+1−2 internal/agent/tools/job_output.go+1−2 internal/agent/tools/list_mcp_resources.go+1−2 internal/agent/tools/ls.go+6−24 internal/agent/tools/ls.md+1 internal/agent/tools/ls.md.tpl−1 internal/agent/tools/lsp_restart.go+1−2 internal/agent/tools/mcp-tools.go+3−4 internal/agent/tools/mcp/init.go+3−22 internal/agent/tools/mcp/init_test.go+5−4 internal/agent/tools/mcp/tools.go+11−38 internal/agent/tools/mcp/tools_test.go−48 internal/agent/tools/multiedit.go+6−26 internal/agent/tools/multiedit_test.go+3−5 internal/agent/tools/read_mcp_resource.go+1−2 internal/agent/tools/references.go+9−2 internal/agent/tools/rg.go+1−10 internal/agent/tools/safe.go+6−99 internal/agent/tools/safe_test.go−74 internal/agent/tools/sourcegraph.go+8−25 internal/agent/tools/sourcegraph.md.tpl → internal/agent/tools/sourcegraph.md+1−1 internal/agent/tools/todos.go+1−2 internal/agent/tools/tools.go−13 internal/agent/tools/view.go+72−78 internal/agent/tools/view.md+1 internal/agent/tools/view.md.tpl−1 internal/agent/tools/view_test.go+5−22 internal/agent/tools/web_fetch.go+5−6 internal/agent/tools/web_search.go+2−3 internal/agent/tools/write.go+18−28 internal/agent/usage_fallback.go−167 internal/agent/usage_fallback_test.go−339 internal/app/app.go+19−168 internal/app/testing.go−72 internal/backend/accepted_run_integration_test.go−131 internal/backend/agent.go+5−134 internal/backend/agent_runcomplete_test.go−163 internal/backend/agent_test.go−164 internal/backend/backend.go+39−627 internal/backend/backend_skills_test.go−167 internal/backend/backend_test.go−1241 internal/backend/config.go+9−102 internal/backend/config_test.go−205 internal/backend/permission.go+8−9 internal/backend/race_off_test.go−5 internal/backend/race_on_test.go−5 internal/backend/session.go−6 internal/backend/shell_command_test.go−54 internal/backend/testing.go−69 internal/client/client.go+4−21 internal/client/config.go+6−73 internal/client/config_test.go−101 internal/client/proto.go+36−147 internal/client/proto_test.go−178 internal/clipboard/clipboard.go−44 internal/clipboard/clipboard_not_supported.go−13 internal/clipboard/clipboard_supported.go−30 internal/cmd/clientserverrace/race_test.go−361 internal/cmd/dirs.go+37−62 internal/cmd/dirs_test.go+48 internal/cmd/login.go+15−34 internal/cmd/login_test.go−21 internal/cmd/logout.go−182 internal/cmd/logout_test.go−41 internal/cmd/logs.go+3−3 internal/cmd/models.go+29−74 internal/cmd/root.go+79−300 internal/cmd/run.go+36−167 internal/cmd/run_stream_test.go−417 internal/cmd/schema.go+1−35 internal/cmd/server.go+6−6 internal/cmd/session.go+1−1 internal/commands/commands.go−28 internal/commands/commands_test.go−61 internal/config/atomicwrite.go−38 internal/config/atomicwrite_test.go−43 internal/config/clone_test.go−46 internal/config/config.go+18−100 internal/config/docker_mcp.go+16−23 internal/config/docker_mcp_test.go+7−9 internal/config/hyper.go+1−1 internal/config/load.go+64−354 internal/config/load_test.go+101−293 internal/config/mcp_resolved_url_test.go+1−1 internal/config/provider.go+2−10 internal/config/recent_models_test.go+170−67 internal/config/refresh_singleflight_test.go−175 internal/config/resolve.go−11 internal/config/resolve_real_test.go+17−15 internal/config/scopeb_race_test.go−74 internal/config/store.go+155−493 internal/config/store_test.go+11−69 internal/config/update_model_bench_test.go−108 internal/csync/maps.go+5−20 internal/db/connect.go+13−154 internal/db/connect_test.go−210 internal/db/datadirlock.go−131 internal/db/db.go+4−24 internal/db/files.sql.go+5−21 internal/db/messages.sql.go+2−50 internal/db/migrations/20260701000000_add_composite_indexes.sql−12 internal/db/migrations/20260702000000_add_hot_path_indexes.sql−14 internal/db/models.go+1−1 internal/db/querier.go+3−5 internal/db/read_files.sql.go+1−1 internal/db/sessions.sql.go+9−39 internal/db/sql/files.sql+4−12 internal/db/sql/messages.sql−7 internal/db/sql/sessions.sql+4−6 internal/db/stats.sql.go+1−1 internal/discover/discover.go−145 internal/discover/discover_test.go−221 internal/discover/enricher.go−60 internal/discover/litellm.go−87 internal/discover/litellm_test.go−173 internal/discover/llamacpp.go−83 internal/discover/llamacpp_test.go−135 internal/discover/lmstudio.go−95 internal/discover/lmstudio_test.go−154 internal/discover/ollama.go−105 internal/discover/ollama_test.go−131 internal/discover/omlx.go−73 internal/discover/omlx_test.go−92 internal/dns/android.go−41 internal/event/event.go+2−15 internal/event/event_test.go+1−2 internal/filepathext/filepath.go−25 internal/filepathext/filepath_test.go−37 internal/filetracker/service.go+2−19 internal/fsext/fileutil.go+26−47 internal/fsext/fileutil_dirtrim_test.go−32 internal/fsext/lookup.go+7−2 internal/fsext/owner_others.go+5−8 internal/fsext/owner_windows.go−7 internal/herdr/client.go−405 internal/herdr/client_test.go−158 internal/herdr/translate.go−150 internal/herdr/translate_test.go−145 internal/history/file.go+15−20 internal/hooks/hooks.go+1−2 internal/hooks/hooks_test.go+3−37 internal/hooks/input.go+2−6 internal/hooks/runner.go+6−11 internal/lock/lock.go−75 internal/lock/lock_test.go−168 internal/lock/lock_unix.go−45 internal/lock/lock_windows.go−57 internal/lsp/client.go−5 internal/lsp/handlers.go+6−6 internal/lsp/manager.go+8−28 internal/lsp/util/edit.go+34−41 internal/message/attachment.go+2−3 internal/message/content.go+23−110 internal/message/message.go+61−425 internal/message/message_test.go−695 internal/oauth/copilot/client.go+7−22 internal/oauth/copilot/client_test.go−70 internal/oauth/token.go+4−33 internal/permission/permission.go+92−132 internal/permission/permission_test.go−286 internal/proto/agent.go+2−9 internal/proto/mcp.go+4−4 internal/proto/message.go+7−69 internal/proto/permission.go−6 internal/proto/permission_test.go−186 internal/proto/proto.go+13−122 internal/proto/requests.go+5−50 internal/proto/requests_test.go−106 internal/proto/session.go−22 internal/proto/skills.go−28 internal/proto/tools.go+38−22 internal/proto/version.go−1 internal/pubsub/broker.go+19−184 internal/pubsub/broker_test.go−117 internal/pubsub/events.go−10 internal/server/agent_cancel_test.go−227 internal/server/config.go+1−59 internal/server/e2e_agent_test.go−742 internal/server/e2e_test.go−612 internal/server/events.go+4−101 internal/server/events_test.go−182 internal/server/logging.go+2−4 internal/server/multiclient_test.go−230 internal/server/net_other.go+3−54 internal/server/net_windows.go+3−16 internal/server/proto.go+13−173 internal/server/recover.go−59 internal/server/recover_test.go−94 internal/server/server.go+7−59 internal/server/sessions_isbusy_test.go−334 internal/server/socket.go−10 internal/server/socket_classify.go−27 internal/server/socket_test.go−193 internal/session/session.go+9−63 internal/session/session_test.go−81 internal/shell/background.go+1−1 internal/shell/background_test.go+6−2 internal/shell/dispatch.go+1−2 internal/shell/exec_unix.go−108 internal/shell/exec_windows.go−23 internal/shell/expand.go+6−20 internal/shell/isolation_unix_test.go−143 internal/shell/jq_test.go+7−20 internal/shell/persist_message.go−44 internal/shell/persist_message_test.go−69 internal/shell/run.go+1−188 internal/shell/run_test.go−112 internal/shell/shell.go−5 internal/shell/stream.go−52 internal/skills/builtin/crush-config/SKILL.md+1−32 internal/skills/catalog.go−154 internal/skills/diagnostics_test.go−42 internal/skills/embed.go+1−1 internal/skills/manager.go−227 internal/skills/manager_test.go−249 internal/skills/skills.go+18−123 internal/skills/skills_test.go+27−23 internal/swagger/docs.go+3−131 internal/swagger/swagger.json+3−131 internal/swagger/swagger.yaml+6−98 internal/ui/anim/anim.go+27−76 internal/ui/attachments/attachments.go+5−10 internal/ui/chat/agent.go+27−118 internal/ui/chat/applyhighlight_callback_test.go−207 internal/ui/chat/assistant.go+74−695 internal/ui/chat/assistant_render_test.go−78 internal/ui/chat/assistant_section_cache_test.go−464 internal/ui/chat/assistant_test.go+12−100 internal/ui/chat/assistant_thinking_bench_test.go−69 internal/ui/chat/assistant_thinking_bound_test.go−105 internal/ui/chat/assistant_thinking_window_test.go−500 internal/ui/chat/bash.go+7−10 internal/ui/chat/diagnostics.go+2−2 internal/ui/chat/docker_mcp.go+6−6 internal/ui/chat/fetch.go+10−10 internal/ui/chat/file.go+34−59 internal/ui/chat/generic.go+4−4 internal/ui/chat/incremental_glamour_test.go−981 internal/ui/chat/lsp_restart.go+2−2 internal/ui/chat/mcp.go+5−5 internal/ui/chat/messages.go+9−107 internal/ui/chat/prefix_cache_test.go−197 internal/ui/chat/references.go+2−2 internal/ui/chat/search.go+12−12 internal/ui/chat/shell.go−358 internal/ui/chat/shell_test.go−59 internal/ui/chat/streaming_markdown.go−721 internal/ui/chat/todos.go+2−2 internal/ui/chat/tool_result_content.go+14−15 internal/ui/chat/tool_result_content_test.go+5−5 internal/ui/chat/tools.go+70−236 internal/ui/chat/unified_diff.go+14−13 internal/ui/chat/user.go+4−75 internal/ui/chat/version_bump_test.go−567 internal/ui/common/ansi16.go−128 internal/ui/common/ansi16_test.go−106 internal/ui/common/capabilities.go+13−10 internal/ui/common/common.go+2−2 internal/ui/common/diff.go+1−20 internal/ui/common/elements.go+7−18 internal/ui/common/elements_test.go−35 internal/ui/common/highlight.go+11−60 internal/ui/common/interface.go−9 internal/ui/common/markdown.go+4−70 internal/ui/common/scrollbar.go+2−4 internal/ui/completions/completions.go+4−6 internal/ui/completions/item.go+2−34 internal/ui/completions/version_bump_test.go−85 internal/ui/dialog/actions.go+8−22 internal/ui/dialog/api_key_input.go+7−54 internal/ui/dialog/arguments.go+14−23 internal/ui/dialog/commands.go+163−55 internal/ui/dialog/commands_item.go+21−69 internal/ui/dialog/dialog.go+9−92 internal/ui/dialog/filepicker.go+2−11 internal/ui/dialog/models.go+16−19 internal/ui/dialog/models_item.go+2−29 internal/ui/dialog/models_list.go+66−58 internal/ui/dialog/notifications.go−310 internal/ui/dialog/oauth.go+2 internal/ui/dialog/overlay_test.go−189 internal/ui/dialog/permissions.go+29−98 internal/ui/dialog/permissions_test.go−99 internal/ui/dialog/reasoning.go+2−20 internal/ui/dialog/sessions.go+12−24 internal/ui/dialog/sessions_item.go+6−52 internal/ui/dialog/version_bump_test.go−219 internal/ui/difftastic/difftastic.go−60 internal/ui/diffview/diffview.go+2−2 internal/ui/diffview/diffview_test.go+18 internal/ui/diffview/style.go+52−54 internal/ui/diffview/testdata/TestDiffView/Split/CustomContextLines/DarkMode.golden+15−15 internal/ui/diffview/testdata/TestDiffView/Split/CustomContextLines/LightMode.golden+15−15 internal/ui/diffview/testdata/TestDiffView/Split/Default/DarkMode.golden+6−6 internal/ui/diffview/testdata/TestDiffView/Split/Default/LightMode.golden+6−6 internal/ui/diffview/testdata/TestDiffView/Split/LargeWidth/DarkMode.golden+13−13 internal/ui/diffview/testdata/TestDiffView/Split/LargeWidth/LightMode.golden+13−13 internal/ui/diffview/testdata/TestDiffView/Split/MultipleHunks/DarkMode.golden+13−13 internal/ui/diffview/testdata/TestDiffView/Split/MultipleHunks/LightMode.golden+13−13 internal/ui/diffview/testdata/TestDiffView/Split/Narrow/DarkMode.golden+3−3 internal/ui/diffview/testdata/TestDiffView/Split/Narrow/LightMode.golden+3−3 internal/ui/diffview/testdata/TestDiffView/Split/NoLineNumbers/DarkMode.golden+6−6 internal/ui/diffview/testdata/TestDiffView/Split/NoLineNumbers/LightMode.golden+6−6 internal/ui/diffview/testdata/TestDiffView/Split/NoSyntaxHighlight/DarkMode.golden+13−13 internal/ui/diffview/testdata/TestDiffView/Split/NoSyntaxHighlight/LightMode.golden+13−13 internal/ui/diffview/testdata/TestDiffView/Split/SmallWidth/DarkMode.golden+13−13 internal/ui/diffview/testdata/TestDiffView/Split/SmallWidth/LightMode.golden+13−13 internal/ui/diffview/testdata/TestDiffView/Unified/CustomContextLines/DarkMode.golden+16−16 internal/ui/diffview/testdata/TestDiffView/Unified/CustomContextLines/LightMode.golden+16−16 internal/ui/diffview/testdata/TestDiffView/Unified/Default/DarkMode.golden+7−7 internal/ui/diffview/testdata/TestDiffView/Unified/Default/LightMode.golden+7−7 internal/ui/diffview/testdata/TestDiffView/Unified/LargeWidth/DarkMode.golden+14−14 internal/ui/diffview/testdata/TestDiffView/Unified/LargeWidth/LightMode.golden+14−14 internal/ui/diffview/testdata/TestDiffView/Unified/MultipleHunks/DarkMode.golden+14−14 internal/ui/diffview/testdata/TestDiffView/Unified/MultipleHunks/LightMode.golden+14−14 internal/ui/diffview/testdata/TestDiffView/Unified/Narrow/DarkMode.golden+6−6 internal/ui/diffview/testdata/TestDiffView/Unified/Narrow/LightMode.golden+6−6 internal/ui/diffview/testdata/TestDiffView/Unified/NoLineNumbers/DarkMode.golden+7−7 internal/ui/diffview/testdata/TestDiffView/Unified/NoLineNumbers/LightMode.golden+7−7 internal/ui/diffview/testdata/TestDiffView/Unified/NoSyntaxHighlight/DarkMode.golden+14−14 internal/ui/diffview/testdata/TestDiffView/Unified/NoSyntaxHighlight/LightMode.golden+14−14 internal/ui/diffview/testdata/TestDiffView/Unified/SmallWidth/DarkMode.golden+14−14 internal/ui/diffview/testdata/TestDiffView/Unified/SmallWidth/LightMode.golden+14−14 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf002.golden+1−1 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf003.golden+2−2 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf004.golden+3−3 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf005.golden+4−4 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf006.golden+5−5 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf007.golden+6−6 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf008.golden+7−7 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf009.golden+7−7 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf010.golden+8−8 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf011.golden+9−9 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf012.golden+10−10 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf013.golden+11−11 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf014.golden+12−12 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf015.golden+13−13 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf016.golden+13−13 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf017.golden+13−13 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf018.golden+13−13 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf019.golden+13−13 internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf020.golden+13−13 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf002.golden+1−1 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf003.golden+2−2 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf004.golden+3−3 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf005.golden+4−4 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf006.golden+5−5 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf007.golden+6−6 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf008.golden+7−7 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf009.golden+7−7 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf010.golden+8−8 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf011.golden+9−9 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf012.golden+10−10 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf013.golden+11−11 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf014.golden+12−12 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf015.golden+13−13 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf016.golden+14−14 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf017.golden+14−14 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf018.golden+14−14 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf019.golden+14−14 internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf020.golden+14−14 internal/ui/diffview/testdata/TestDiffViewLineBreakIssue/Split.golden+8−8 internal/ui/diffview/testdata/TestDiffViewLineBreakIssue/Unified.golden+11−11 internal/ui/diffview/testdata/TestDiffViewTabs/Split.golden+13−13 internal/ui/diffview/testdata/TestDiffViewTabs/Unified.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf001.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf002.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf003.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf004.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf005.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf006.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf007.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf008.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf009.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf010.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf011.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf012.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf013.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf014.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf015.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf016.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf017.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf018.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf019.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf020.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf021.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf022.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf023.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf024.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf025.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf026.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf027.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf028.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf029.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf030.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf031.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf032.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf033.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf034.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf035.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf036.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf037.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf038.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf039.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf040.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf041.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf042.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf043.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf044.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf045.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf046.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf047.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf048.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf049.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf050.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf051.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf052.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf053.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf054.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf055.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf056.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf057.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf058.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf059.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf060.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf061.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf062.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf063.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf064.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf065.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf066.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf067.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf068.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf069.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf070.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf071.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf072.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf073.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf074.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf075.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf076.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf077.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf078.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf079.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf080.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf081.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf082.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf083.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf084.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf085.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf086.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf087.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf088.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf089.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf090.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf091.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf092.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf093.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf094.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf095.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf096.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf097.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf098.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf099.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf100.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf101.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf102.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf103.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf104.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf105.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf106.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf107.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf108.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf109.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf110.golden+13−13 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf001.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf002.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf003.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf004.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf005.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf006.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf007.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf008.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf009.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf010.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf011.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf012.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf013.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf014.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf015.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf016.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf017.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf018.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf019.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf020.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf021.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf022.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf023.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf024.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf025.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf026.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf027.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf028.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf029.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf030.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf031.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf032.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf033.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf034.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf035.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf036.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf037.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf038.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf039.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf040.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf041.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf042.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf043.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf044.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf045.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf046.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf047.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf048.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf049.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf050.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf051.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf052.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf053.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf054.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf055.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf056.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf057.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf058.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf059.golden+14−14 internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf060.golden+14−14 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf00.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf01.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf02.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf03.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf04.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf05.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf06.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf07.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf08.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf09.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf10.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf11.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf12.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf13.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf14.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf15.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf16.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf17.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf18.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf19.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf20.golden+6−6 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf00.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf01.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf02.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf03.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf04.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf05.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf06.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf07.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf08.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf09.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf10.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf11.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf12.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf13.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf14.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf15.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf16.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf17.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf18.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf19.golden+7−7 internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf20.golden+7−7 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf00.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf01.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf02.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf03.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf04.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf05.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf06.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf07.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf08.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf09.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf10.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf11.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf12.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf13.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf14.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf15.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf16.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf00.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf01.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf02.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf03.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf04.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf05.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf06.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf07.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf08.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf09.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf10.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf11.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf12.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf13.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf14.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf15.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf16.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf00.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf01.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf02.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf03.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf04.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf05.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf06.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf07.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf08.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf09.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf10.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf11.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf12.golden+3−3 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf13.golden+2−2 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf14.golden+1−1 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf00.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf01.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf02.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf03.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf04.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf05.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf06.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf07.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf08.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf09.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf10.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf11.golden+5−5 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf12.golden+4−4 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf13.golden+3−3 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf14.golden+2−2 internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf15.golden+1−1 internal/ui/diffview/util.go+1−8 internal/ui/list/filterable.go+1−33 internal/ui/list/highlight.go+1−2 internal/ui/list/item.go+1−66 internal/ui/list/list.go+35−313 internal/ui/list/list_test.go−770 internal/ui/model/chat.go+27−270 internal/ui/model/chat_draw_cache_test.go−334 internal/ui/model/chat_expand_test.go+1−7 internal/ui/model/clipboard.go+15 internal/ui/model/clipboard_not_supported.go+7 internal/ui/model/clipboard_supported.go+15 internal/ui/model/filter.go+8−94 internal/ui/model/filter_test.go−162 internal/ui/model/header.go+11−99 internal/ui/model/history.go+2−29 internal/ui/model/keys.go+29−48 internal/ui/model/landing.go+9−78 internal/ui/model/layout_test.go+1−111 internal/ui/model/lsp.go+5−26 internal/ui/model/mcp.go+2−9 internal/ui/model/onboarding.go+2−1 internal/ui/model/permission_test.go−96 internal/ui/model/pills.go+9−92 internal/ui/model/session.go+7−31 internal/ui/model/session_test.go−142 internal/ui/model/sidebar.go+24−179 internal/ui/model/skills.go+5−15 internal/ui/model/ui.go+169−914 internal/ui/notification/bell.go−27 internal/ui/notification/icon_darwin.go+3−7 internal/ui/notification/icon_other.go+4−1 internal/ui/notification/native.go+13−16 internal/ui/notification/noop.go+1−3 internal/ui/notification/notification.go+3−23 internal/ui/notification/notification_test.go+4−174 internal/ui/notification/osc.go−135 internal/ui/styles/grad.go+2−51 internal/ui/styles/quickstyle.go+25−67 internal/ui/styles/styles.go+15−49 internal/ui/styles/themes.go+38−186 internal/ui/xchroma/chroma.go+19−37 internal/version/version.go+6−34 internal/workspace/app_workspace.go+8−83 internal/workspace/client_workspace.go+24−215 internal/workspace/client_workspace_test.go−213 internal/workspace/export_test.go−14 internal/workspace/multiclient_integration_test.go−176 internal/workspace/workspace.go+3−22 main.go−1 schema.json+3−87 vendor/charm.land/bubbles/v2/LICENSE−21 vendor/charm.land/bubbles/v2/cursor/cursor.go−241 vendor/charm.land/bubbles/v2/filepicker/filepicker.go−529 vendor/charm.land/bubbles/v2/filepicker/hidden_unix.go−11 vendor/charm.land/bubbles/v2/filepicker/hidden_windows.go−21 vendor/charm.land/bubbles/v2/help/help.go−253 vendor/charm.land/bubbles/v2/internal/memoization/memoization.go−125 vendor/charm.land/bubbles/v2/internal/runeutil/runeutil.go−102 vendor/charm.land/bubbles/v2/key/key.go−140 vendor/charm.land/bubbles/v2/spinner/spinner.go−211 vendor/charm.land/bubbles/v2/textarea/textarea.go−1897 vendor/charm.land/bubbles/v2/textinput/styles.go−96 vendor/charm.land/bubbles/v2/textinput/textinput.go−968 vendor/charm.land/bubbles/v2/viewport/highlight.go−141 vendor/charm.land/bubbles/v2/viewport/keymap.go−58 vendor/charm.land/bubbles/v2/viewport/viewport.go−765 vendor/charm.land/bubbletea/v2/.gitattributes−1 vendor/charm.land/bubbletea/v2/.gitignore−23 vendor/charm.land/bubbletea/v2/.golangci.yml−47 vendor/charm.land/bubbletea/v2/.goreleaser.yml−5 vendor/charm.land/bubbletea/v2/LICENSE−21 vendor/charm.land/bubbletea/v2/README.md−402 vendor/charm.land/bubbletea/v2/Taskfile.yaml−38 vendor/charm.land/bubbletea/v2/UPGRADE_GUIDE_V2.md−573 vendor/charm.land/bubbletea/v2/clipboard.go−70 vendor/charm.land/bubbletea/v2/color.go−91 vendor/charm.land/bubbletea/v2/commands.go−175 vendor/charm.land/bubbletea/v2/cursed_renderer.go−860 vendor/charm.land/bubbletea/v2/cursor.go−28 vendor/charm.land/bubbletea/v2/environ.go−34 vendor/charm.land/bubbletea/v2/exec.go−129 vendor/charm.land/bubbletea/v2/focus.go−9 vendor/charm.land/bubbletea/v2/input.go−54 vendor/charm.land/bubbletea/v2/key.go−371 vendor/charm.land/bubbletea/v2/keyboard.go−59 vendor/charm.land/bubbletea/v2/logging.go−53 vendor/charm.land/bubbletea/v2/mod.go−27 vendor/charm.land/bubbletea/v2/mouse.go−144 vendor/charm.land/bubbletea/v2/nil_renderer.go−53 vendor/charm.land/bubbletea/v2/options.go−168 vendor/charm.land/bubbletea/v2/paste.go−20 vendor/charm.land/bubbletea/v2/profile.go−15 vendor/charm.land/bubbletea/v2/raw.go−37 vendor/charm.land/bubbletea/v2/renderer.go−104 vendor/charm.land/bubbletea/v2/screen.go−68 vendor/charm.land/bubbletea/v2/signals_unix.go−33 vendor/charm.land/bubbletea/v2/signals_windows.go−10 vendor/charm.land/bubbletea/v2/tea.go−1439 vendor/charm.land/bubbletea/v2/termcap.go−48 vendor/charm.land/bubbletea/v2/termios_bsd.go−13 vendor/charm.land/bubbletea/v2/termios_other.go−8 vendor/charm.land/bubbletea/v2/termios_unix.go−14 vendor/charm.land/bubbletea/v2/termios_windows.go−11 vendor/charm.land/bubbletea/v2/tty.go−136 vendor/charm.land/bubbletea/v2/tty_unix.go−47 vendor/charm.land/bubbletea/v2/tty_windows.go−64 vendor/charm.land/bubbletea/v2/xterm.go−22 vendor/charm.land/catwalk/LICENSE−21 vendor/charm.land/catwalk/internal/providers/configs/aihubmix.json−3746 vendor/charm.land/catwalk/internal/providers/configs/alibaba-singapore.json−141 vendor/charm.land/catwalk/internal/providers/configs/alibaba-united-states.json−45 vendor/charm.land/catwalk/internal/providers/configs/anthropic.json−183 vendor/charm.land/catwalk/internal/providers/configs/avian.json−125 vendor/charm.land/catwalk/internal/providers/configs/azure.json−225 vendor/charm.land/catwalk/internal/providers/configs/baseten.json−187 vendor/charm.land/catwalk/internal/providers/configs/bedrock-europe.json−115 vendor/charm.land/catwalk/internal/providers/configs/bedrock-united-states.json−143 vendor/charm.land/catwalk/internal/providers/configs/cerebras.json−42 vendor/charm.land/catwalk/internal/providers/configs/chutes.json−227 vendor/charm.land/catwalk/internal/providers/configs/copilot.json−310 vendor/charm.land/catwalk/internal/providers/configs/cortecs.json−1697 vendor/charm.land/catwalk/internal/providers/configs/deepseek.json−45 vendor/charm.land/catwalk/internal/providers/configs/fireworks.json−171 vendor/charm.land/catwalk/internal/providers/configs/gemini.json−91 vendor/charm.land/catwalk/internal/providers/configs/groq.json−36 vendor/charm.land/catwalk/internal/providers/configs/huggingface.json−267 vendor/charm.land/catwalk/internal/providers/configs/ionet.json−335 vendor/charm.land/catwalk/internal/providers/configs/kimi.json−23 vendor/charm.land/catwalk/internal/providers/configs/minimax-china.json−91 vendor/charm.land/catwalk/internal/providers/configs/minimax.json−91 vendor/charm.land/catwalk/internal/providers/configs/moonshot.json−131 vendor/charm.land/catwalk/internal/providers/configs/nebius.json−419 vendor/charm.land/catwalk/internal/providers/configs/neuralwatt.json−155 vendor/charm.land/catwalk/internal/providers/configs/openai.json−352 vendor/charm.land/catwalk/internal/providers/configs/opencode-go.json−351 vendor/charm.land/catwalk/internal/providers/configs/opencode-zen.json−908 vendor/charm.land/catwalk/internal/providers/configs/openrouter.json−3831 vendor/charm.land/catwalk/internal/providers/configs/qiniucloud.json−179 vendor/charm.land/catwalk/internal/providers/configs/scaleway.json−141 vendor/charm.land/catwalk/internal/providers/configs/synthetic.json−197 vendor/charm.land/catwalk/internal/providers/configs/venice.json−1173 vendor/charm.land/catwalk/internal/providers/configs/vercel.json−3072 vendor/charm.land/catwalk/internal/providers/configs/vertexai.json−170 vendor/charm.land/catwalk/internal/providers/configs/xai.json−59 vendor/charm.land/catwalk/internal/providers/configs/zai.json−136 vendor/charm.land/catwalk/internal/providers/configs/zhipu-coding.json−136 vendor/charm.land/catwalk/internal/providers/configs/zhipu.json−120 vendor/charm.land/catwalk/internal/providers/providers.go−349 vendor/charm.land/catwalk/pkg/catwalk/client.go−79 vendor/charm.land/catwalk/pkg/catwalk/pkg.go−2 vendor/charm.land/catwalk/pkg/catwalk/provider.go−157 vendor/charm.land/catwalk/pkg/embedded/embedded.go−13 vendor/charm.land/fang/v2/.gitignore−3 vendor/charm.land/fang/v2/.golangci.yml−47 vendor/charm.land/fang/v2/.goreleaser.yml−5 vendor/charm.land/fang/v2/LICENSE.md−21 vendor/charm.land/fang/v2/README.md−92 vendor/charm.land/fang/v2/Taskfile.yml−7 vendor/charm.land/fang/v2/UPGRADE_GUIDE_V2.md−127 vendor/charm.land/fang/v2/fang.go−208 vendor/charm.land/fang/v2/fang_other.go−10 vendor/charm.land/fang/v2/fang_windows.go−30 vendor/charm.land/fang/v2/help.go−482 vendor/charm.land/fang/v2/theme.go−222 vendor/charm.land/fantasy/.editorconfig−18 vendor/charm.land/fantasy/.gitattributes−1 vendor/charm.land/fantasy/.gitignore−42 vendor/charm.land/fantasy/.golangci.yml−44 vendor/charm.land/fantasy/.goreleaser.yml−6 vendor/charm.land/fantasy/AGENTS.md−29 vendor/charm.land/fantasy/LICENSE−177 vendor/charm.land/fantasy/NOTICE−13 vendor/charm.land/fantasy/README.md−95 vendor/charm.land/fantasy/Taskfile.yaml−45 vendor/charm.land/fantasy/agent.go−1702 vendor/charm.land/fantasy/content.go−625 vendor/charm.land/fantasy/content_json.go−1046 vendor/charm.land/fantasy/crush.json−6 vendor/charm.land/fantasy/cspell.json−1 vendor/charm.land/fantasy/doc.go−2 vendor/charm.land/fantasy/errors.go−155 vendor/charm.land/fantasy/jsonrepair/jsonrepair.go−1648 vendor/charm.land/fantasy/model.go−261 vendor/charm.land/fantasy/model_json.go−156 vendor/charm.land/fantasy/object.go−236 vendor/charm.land/fantasy/object/object.go−620 vendor/charm.land/fantasy/provider.go−11 vendor/charm.land/fantasy/provider_registry.go−106 vendor/charm.land/fantasy/providers/anthropic/anthropic.go−1707 vendor/charm.land/fantasy/providers/anthropic/bedrock.go−15 vendor/charm.land/fantasy/providers/anthropic/call_useragent.go−14 vendor/charm.land/fantasy/providers/anthropic/computer_use.go−427 vendor/charm.land/fantasy/providers/anthropic/error.go−67 vendor/charm.land/fantasy/providers/anthropic/google.go−11 vendor/charm.land/fantasy/providers/anthropic/provider_options.go−283 vendor/charm.land/fantasy/providers/anthropic/sanitize.go−33 vendor/charm.land/fantasy/providers/azure/README.md−6 vendor/charm.land/fantasy/providers/azure/azure.go−125 vendor/charm.land/fantasy/providers/bedrock/README.md−10 vendor/charm.land/fantasy/providers/bedrock/bedrock.go−87 vendor/charm.land/fantasy/providers/google/README.md−63 vendor/charm.land/fantasy/providers/google/auth.go−15 vendor/charm.land/fantasy/providers/google/call_useragent.go−53 vendor/charm.land/fantasy/providers/google/error.go−51 vendor/charm.land/fantasy/providers/google/google.go−1488 vendor/charm.land/fantasy/providers/google/provider_options.go−146 vendor/charm.land/fantasy/providers/google/slice.go−11 vendor/charm.land/fantasy/providers/internal/httpheaders/httpheaders.go−60 vendor/charm.land/fantasy/providers/openai/call_useragent.go−31 vendor/charm.land/fantasy/providers/openai/error.go−92 vendor/charm.land/fantasy/providers/openai/language_model.go−990 vendor/charm.land/fantasy/providers/openai/language_model_hooks.go−668 vendor/charm.land/fantasy/providers/openai/openai.go−220 vendor/charm.land/fantasy/providers/openai/provider_options.go−217 vendor/charm.land/fantasy/providers/openai/responses_language_model.go−1678 vendor/charm.land/fantasy/providers/openai/responses_options.go−395 vendor/charm.land/fantasy/providers/openaicompat/language_model_hooks.go−516 vendor/charm.land/fantasy/providers/openaicompat/openaicompat.go−140 vendor/charm.land/fantasy/providers/openaicompat/provider_options.go−161 vendor/charm.land/fantasy/providers/openrouter/language_model_hooks.go−1063 vendor/charm.land/fantasy/providers/openrouter/openrouter.go−121 vendor/charm.land/fantasy/providers/openrouter/provider_options.go−218 vendor/charm.land/fantasy/providers/vercel/language_model_hooks.go−1074 vendor/charm.land/fantasy/providers/vercel/provider_options.go−195 vendor/charm.land/fantasy/providers/vercel/vercel.go−122 vendor/charm.land/fantasy/retry.go−155 vendor/charm.land/fantasy/schema/schema.go−442 vendor/charm.land/fantasy/tool.go−176 vendor/charm.land/fantasy/util.go−22 vendor/charm.land/fantasy/version.go−12 vendor/charm.land/fantasy/version.txt−1 vendor/charm.land/glamour/v2/.editorconfig−18 vendor/charm.land/glamour/v2/.gitattributes−2 vendor/charm.land/glamour/v2/.gitignore−2 vendor/charm.land/glamour/v2/.golangci.yml−44 vendor/charm.land/glamour/v2/.goreleaser.yml−6 vendor/charm.land/glamour/v2/CONTRIBUTING.md−23 vendor/charm.land/glamour/v2/LICENSE−21 vendor/charm.land/glamour/v2/README.md−129 vendor/charm.land/glamour/v2/Taskfile.yml−25 vendor/charm.land/glamour/v2/UPGRADE_GUIDE_V2.md−279 vendor/charm.land/glamour/v2/ansi/ansi.go−3 vendor/charm.land/glamour/v2/ansi/baseelement.go−157 vendor/charm.land/glamour/v2/ansi/blockelement.go−66 vendor/charm.land/glamour/v2/ansi/blockstack.go−95 vendor/charm.land/glamour/v2/ansi/codeblock.go−151 vendor/charm.land/glamour/v2/ansi/codespan.go−15 vendor/charm.land/glamour/v2/ansi/context.go−38 vendor/charm.land/glamour/v2/ansi/elements.go−481 vendor/charm.land/glamour/v2/ansi/emphasis.go−47 vendor/charm.land/glamour/v2/ansi/heading.go−80 vendor/charm.land/glamour/v2/ansi/image.go−57 vendor/charm.land/glamour/v2/ansi/link.go−112 vendor/charm.land/glamour/v2/ansi/listitem.go−29 vendor/charm.land/glamour/v2/ansi/margin.go−231 vendor/charm.land/glamour/v2/ansi/paragraph.go−63 vendor/charm.land/glamour/v2/ansi/renderer.go−166 vendor/charm.land/glamour/v2/ansi/style.go−252 vendor/charm.land/glamour/v2/ansi/table.go−206 vendor/charm.land/glamour/v2/ansi/table_links.go−234 vendor/charm.land/glamour/v2/ansi/task.go−27 vendor/charm.land/glamour/v2/ansi/templatehelper.go−86 vendor/charm.land/glamour/v2/examples.sh−19 vendor/charm.land/glamour/v2/gallery.sh−23 vendor/charm.land/glamour/v2/glamour.go−294 vendor/charm.land/glamour/v2/internal/autolink/autolink.go−55 vendor/charm.land/glamour/v2/styles/README.md−565 vendor/charm.land/glamour/v2/styles/ascii.json−87 vendor/charm.land/glamour/v2/styles/dark.json−191 vendor/charm.land/glamour/v2/styles/dracula.go−216 vendor/charm.land/glamour/v2/styles/dracula.json−188 vendor/charm.land/glamour/v2/styles/light.json−190 vendor/charm.land/glamour/v2/styles/notty.json−87 vendor/charm.land/glamour/v2/styles/pink.json−90 vendor/charm.land/glamour/v2/styles/styles.go−691 vendor/charm.land/glamour/v2/styles/tokyo-night.go−209 vendor/charm.land/glamour/v2/styles/tokyo-night.json−182 vendor/charm.land/glamour/v2/styles/tokyo_night.json−182 vendor/charm.land/lipgloss/v2/.editorconfig−18 vendor/charm.land/lipgloss/v2/.gitattributes−1 vendor/charm.land/lipgloss/v2/.gitignore−3 vendor/charm.land/lipgloss/v2/.golangci.yml−50 vendor/charm.land/lipgloss/v2/.goreleaser.yml−5 vendor/charm.land/lipgloss/v2/LICENSE−21 vendor/charm.land/lipgloss/v2/README.md−996 vendor/charm.land/lipgloss/v2/Taskfile.yaml−24 vendor/charm.land/lipgloss/v2/UPGRADE_GUIDE_V2.md−504 vendor/charm.land/lipgloss/v2/align.go−82 vendor/charm.land/lipgloss/v2/ansi_unix.go−8 vendor/charm.land/lipgloss/v2/ansi_windows.go−30 vendor/charm.land/lipgloss/v2/blending.go−196 vendor/charm.land/lipgloss/v2/borders.go−587 vendor/charm.land/lipgloss/v2/canvas.go−88 vendor/charm.land/lipgloss/v2/color.go−359 vendor/charm.land/lipgloss/v2/get.go−657 vendor/charm.land/lipgloss/v2/join.go−175 vendor/charm.land/lipgloss/v2/layer.go−327 vendor/charm.land/lipgloss/v2/lipgloss.go−3 vendor/charm.land/lipgloss/v2/position.go−134 vendor/charm.land/lipgloss/v2/query.go−92 vendor/charm.land/lipgloss/v2/ranges.go−48 vendor/charm.land/lipgloss/v2/runes.go−43 vendor/charm.land/lipgloss/v2/set.go−932 vendor/charm.land/lipgloss/v2/size.go−40 vendor/charm.land/lipgloss/v2/style.go−637 vendor/charm.land/lipgloss/v2/table/resizing.go−489 vendor/charm.land/lipgloss/v2/table/rows.go−130 vendor/charm.land/lipgloss/v2/table/table.go−568 vendor/charm.land/lipgloss/v2/table/util.go−44 vendor/charm.land/lipgloss/v2/terminal.go−124 vendor/charm.land/lipgloss/v2/tree/children.go−100 vendor/charm.land/lipgloss/v2/tree/enumerator.go−74 vendor/charm.land/lipgloss/v2/tree/renderer.go−165 vendor/charm.land/lipgloss/v2/tree/tree.go−407 vendor/charm.land/lipgloss/v2/unset.go−359 vendor/charm.land/lipgloss/v2/whitespace.go−76 vendor/charm.land/lipgloss/v2/wrap.go−113 vendor/charm.land/lipgloss/v2/writer.go−160 vendor/charm.land/log/v2/.gitignore−17 vendor/charm.land/log/v2/.golangci.yml−50 vendor/charm.land/log/v2/.goreleaser.yml−6 vendor/charm.land/log/v2/LICENSE−21 vendor/charm.land/log/v2/README.md−367 vendor/charm.land/log/v2/UPGRADE_GUIDE_V2.md−320 vendor/charm.land/log/v2/context.go−23 vendor/charm.land/log/v2/doc.go−3 vendor/charm.land/log/v2/formatter.go−27 vendor/charm.land/log/v2/json.go−157 vendor/charm.land/log/v2/level.go−65 vendor/charm.land/log/v2/logfmt.go−32 vendor/charm.land/log/v2/logger.go−413 vendor/charm.land/log/v2/logger_121.go−72 vendor/charm.land/log/v2/logger_no121.go−69 vendor/charm.land/log/v2/options.go−61 vendor/charm.land/log/v2/pkg.go−248 vendor/charm.land/log/v2/stdlog.go−67 vendor/charm.land/log/v2/styles.go−83 vendor/charm.land/log/v2/text.go−272 vendor/charm.land/x/vcr/LICENSE−21 vendor/charm.land/x/vcr/doc.go−3 vendor/charm.land/x/vcr/hooks.go−33 vendor/charm.land/x/vcr/marshaler.go−19 vendor/charm.land/x/vcr/matcher.go−70 vendor/charm.land/x/vcr/recorder.go−70 vendor/cloud.google.com/go/LICENSE−202 vendor/cloud.google.com/go/auth/CHANGES.md−483 vendor/cloud.google.com/go/auth/LICENSE−202 vendor/cloud.google.com/go/auth/README.md−40 vendor/cloud.google.com/go/auth/auth.go−618 vendor/cloud.google.com/go/auth/credentials/compute.go−102 vendor/cloud.google.com/go/auth/credentials/detect.go−471 vendor/cloud.google.com/go/auth/credentials/doc.go−45 vendor/cloud.google.com/go/auth/credentials/filetypes.go−329 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/aws_provider.go−531 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/executable_provider.go−284 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/externalaccount.go−431 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/file_provider.go−78 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/info.go−74 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/programmatic_provider.go−30 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/url_provider.go−93 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/x509_provider.go−220 vendor/cloud.google.com/go/auth/credentials/internal/externalaccountuser/externalaccountuser.go−115 vendor/cloud.google.com/go/auth/credentials/internal/gdch/gdch.go−198 vendor/cloud.google.com/go/auth/credentials/internal/impersonate/idtoken.go−105 vendor/cloud.google.com/go/auth/credentials/internal/impersonate/impersonate.go−168 vendor/cloud.google.com/go/auth/credentials/internal/stsexchange/sts_exchange.go−167 vendor/cloud.google.com/go/auth/credentials/selfsignedjwt.go−89 vendor/cloud.google.com/go/auth/grpctransport/dial_socketopt.go−62 vendor/cloud.google.com/go/auth/grpctransport/directpath.go−177 vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go−675 vendor/cloud.google.com/go/auth/grpctransport/pool.go−119 vendor/cloud.google.com/go/auth/httptransport/httptransport.go−254 vendor/cloud.google.com/go/auth/httptransport/transport.go−548 vendor/cloud.google.com/go/auth/internal/compute/compute.go−65 vendor/cloud.google.com/go/auth/internal/compute/manufacturer.go−22 vendor/cloud.google.com/go/auth/internal/compute/manufacturer_linux.go−23 vendor/cloud.google.com/go/auth/internal/compute/manufacturer_windows.go−46 vendor/cloud.google.com/go/auth/internal/credsfile/credsfile.go−63 vendor/cloud.google.com/go/auth/internal/credsfile/filetype.go−159 vendor/cloud.google.com/go/auth/internal/credsfile/parse.go−99 vendor/cloud.google.com/go/auth/internal/internal.go−285 vendor/cloud.google.com/go/auth/internal/jwt/jwt.go−208 vendor/cloud.google.com/go/auth/internal/retry/retry.go−117 vendor/cloud.google.com/go/auth/internal/transport/cba.go−361 vendor/cloud.google.com/go/auth/internal/transport/cert/default_cert.go−65 vendor/cloud.google.com/go/auth/internal/transport/cert/enterprise_cert.go−54 vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go−124 vendor/cloud.google.com/go/auth/internal/transport/cert/workload_cert.go−138 vendor/cloud.google.com/go/auth/internal/transport/headers/headers.go−61 vendor/cloud.google.com/go/auth/internal/transport/s2a.go−138 vendor/cloud.google.com/go/auth/internal/transport/transport.go−137 vendor/cloud.google.com/go/auth/internal/trustboundary/external_accounts_config_providers.go−100 vendor/cloud.google.com/go/auth/internal/trustboundary/trust_boundary.go−392 vendor/cloud.google.com/go/auth/internal/version.go−20 vendor/cloud.google.com/go/auth/oauth2adapt/CHANGES.md−82 vendor/cloud.google.com/go/auth/oauth2adapt/LICENSE−202 vendor/cloud.google.com/go/auth/oauth2adapt/oauth2adapt.go−200 vendor/cloud.google.com/go/auth/threelegged.go−382 vendor/cloud.google.com/go/civil/civil.go−500 vendor/cloud.google.com/go/compute/metadata/CHANGES.md−115 vendor/cloud.google.com/go/compute/metadata/LICENSE−202 vendor/cloud.google.com/go/compute/metadata/README.md−27 vendor/cloud.google.com/go/compute/metadata/log.go−149 vendor/cloud.google.com/go/compute/metadata/metadata.go−937 vendor/cloud.google.com/go/compute/metadata/retry.go−117 vendor/cloud.google.com/go/compute/metadata/retry_linux.go−31 vendor/cloud.google.com/go/compute/metadata/syscheck.go−28 vendor/cloud.google.com/go/compute/metadata/syscheck_linux.go−30 vendor/cloud.google.com/go/compute/metadata/syscheck_windows.go−39 vendor/git.sr.ht/~jackmordaunt/go-toast/.gitignore−1 vendor/git.sr.ht/~jackmordaunt/go-toast/ARCHITECTURE.md−244 vendor/git.sr.ht/~jackmordaunt/go-toast/LICENSE−61 vendor/git.sr.ht/~jackmordaunt/go-toast/README.md−86 vendor/git.sr.ht/~jackmordaunt/go-toast/constants.go−65 vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/data/xml/dom/xmldocument.go−73 vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotification.go−88 vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotificationmanager.go−53 vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotificationmanagerforuser.go−68 vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotifier.go−64 vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/powershell.go.tmpl−14 vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/tmpl.go−28 vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/xml.go.tmpl−34 vendor/git.sr.ht/~jackmordaunt/go-toast/toast.go−225 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind.go−86 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_noop.go−19 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_windows.go−174 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/impl.go−179 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/procs.go−37 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/registry.go−110 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md−849 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txt−21 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.md−39 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.yml−29 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.go−44 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.go−53 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.go−173 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.go−264 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.go−17 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.go−57 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.go−175 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.go−77 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.go−260 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.go−201 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.go−50 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.go−159 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.go−135 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.go−133 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.go−123 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.go−148 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.go−24 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.go−212 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go−44 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.go−149 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.go−10 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.go−55 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.go−10 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.go−198 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.go−10 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.go−27 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.go−138 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.go−94 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.go−75 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.go−236 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.go−72 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.go−40 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go−154 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.go−35 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.go−64 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.go−264 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.go−34 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go−276 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.go−55 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.go−83 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.go−396 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.go−281 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.go−109 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.go−15 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.go−15 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.go−48 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.go−9 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.go−89 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.go−41 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.go−191 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/LICENSE.txt−21 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/diag.go−51 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/doc.go−7 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/doc.go−7 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/errorinfo.go−46 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/exported/exported.go−129 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/doc.go−7 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/log.go−104 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/poller/util.go−155 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/temporal/resource.go−123 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/doc.go−7 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/uuid.go−76 vendor/github.com/JohannesKaufmann/html-to-markdown/.gitignore−14 vendor/github.com/JohannesKaufmann/html-to-markdown/CONTRIBUTING.md vendor/github.com/JohannesKaufmann/html-to-markdown/LICENSE−21 vendor/github.com/JohannesKaufmann/html-to-markdown/README.md−242 vendor/github.com/JohannesKaufmann/html-to-markdown/SECURITY.md−6 vendor/github.com/JohannesKaufmann/html-to-markdown/commonmark.go−393 vendor/github.com/JohannesKaufmann/html-to-markdown/escape/escape.go−65 vendor/github.com/JohannesKaufmann/html-to-markdown/from.go−464 vendor/github.com/JohannesKaufmann/html-to-markdown/logo_five_years.png vendor/github.com/JohannesKaufmann/html-to-markdown/markdown.go−212 vendor/github.com/JohannesKaufmann/html-to-markdown/utils.go−533 vendor/github.com/KyleBanks/depth/.gitignore−16 vendor/github.com/KyleBanks/depth/.travis.yml−9 vendor/github.com/KyleBanks/depth/LICENSE−21 vendor/github.com/KyleBanks/depth/Makefile−32 vendor/github.com/KyleBanks/depth/README.md−232 vendor/github.com/KyleBanks/depth/depth.go−129 vendor/github.com/KyleBanks/depth/pkg.go−184 vendor/github.com/MakeNowJust/heredoc/LICENSE−21 vendor/github.com/MakeNowJust/heredoc/README.md−52 vendor/github.com/MakeNowJust/heredoc/heredoc.go−105 vendor/github.com/Microsoft/go-winio/.gitattributes−1 vendor/github.com/Microsoft/go-winio/.gitignore−10 vendor/github.com/Microsoft/go-winio/.golangci.yml−147 vendor/github.com/Microsoft/go-winio/CODEOWNERS−1 vendor/github.com/Microsoft/go-winio/LICENSE−22 vendor/github.com/Microsoft/go-winio/README.md−89 vendor/github.com/Microsoft/go-winio/SECURITY.md−41 vendor/github.com/Microsoft/go-winio/backup.go−287 vendor/github.com/Microsoft/go-winio/doc.go−22 vendor/github.com/Microsoft/go-winio/ea.go−137 vendor/github.com/Microsoft/go-winio/file.go−320 vendor/github.com/Microsoft/go-winio/fileinfo.go−106 vendor/github.com/Microsoft/go-winio/hvsock.go−582 vendor/github.com/Microsoft/go-winio/internal/fs/doc.go−2 vendor/github.com/Microsoft/go-winio/internal/fs/fs.go−262 vendor/github.com/Microsoft/go-winio/internal/fs/security.go−12 vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go−61 vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go−20 vendor/github.com/Microsoft/go-winio/internal/socket/socket.go−177 vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go−69 vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go−132 vendor/github.com/Microsoft/go-winio/pipe.go−586 vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go−232 vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go−16 vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go−13 vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go−27 vendor/github.com/Microsoft/go-winio/privilege.go−196 vendor/github.com/Microsoft/go-winio/reparse.go−131 vendor/github.com/Microsoft/go-winio/sd.go−133 vendor/github.com/Microsoft/go-winio/syscall.go−5 vendor/github.com/Microsoft/go-winio/zsyscall_windows.go−378 vendor/github.com/PuerkitoBio/goquery/.gitattributes−1 vendor/github.com/PuerkitoBio/goquery/.gitignore−16 vendor/github.com/PuerkitoBio/goquery/LICENSE−12 vendor/github.com/PuerkitoBio/goquery/README.md−218 vendor/github.com/PuerkitoBio/goquery/array.go−124 vendor/github.com/PuerkitoBio/goquery/doc.go−123 vendor/github.com/PuerkitoBio/goquery/expand.go−70 vendor/github.com/PuerkitoBio/goquery/filter.go−163 vendor/github.com/PuerkitoBio/goquery/iteration.go−61 vendor/github.com/PuerkitoBio/goquery/manipulation.go−679 vendor/github.com/PuerkitoBio/goquery/property.go−275 vendor/github.com/PuerkitoBio/goquery/query.go−49 vendor/github.com/PuerkitoBio/goquery/traversal.go−704 vendor/github.com/PuerkitoBio/goquery/type.go−203 vendor/github.com/PuerkitoBio/goquery/utilities.go−177 vendor/github.com/alecthomas/chroma/v2/.editorconfig−17 vendor/github.com/alecthomas/chroma/v2/.gitignore−28 vendor/github.com/alecthomas/chroma/v2/.golangci.yml−122 vendor/github.com/alecthomas/chroma/v2/.goreleaser.yml−34 vendor/github.com/alecthomas/chroma/v2/AGENTS.md−11 vendor/github.com/alecthomas/chroma/v2/BUILD.bit−93 vendor/github.com/alecthomas/chroma/v2/COPYING−118 vendor/github.com/alecthomas/chroma/v2/Dockerfile−64 vendor/github.com/alecthomas/chroma/v2/Justfile−59 vendor/github.com/alecthomas/chroma/v2/README.md−309 vendor/github.com/alecthomas/chroma/v2/biome.json−6 vendor/github.com/alecthomas/chroma/v2/chroma.jpg vendor/github.com/alecthomas/chroma/v2/coalesce.go−35 vendor/github.com/alecthomas/chroma/v2/colour.go−192 vendor/github.com/alecthomas/chroma/v2/delegate.go−161 vendor/github.com/alecthomas/chroma/v2/doc.go−7 vendor/github.com/alecthomas/chroma/v2/emitters.go−233 vendor/github.com/alecthomas/chroma/v2/formatter.go−43 vendor/github.com/alecthomas/chroma/v2/formatters/api.go−57 vendor/github.com/alecthomas/chroma/v2/formatters/html/html.go−692 vendor/github.com/alecthomas/chroma/v2/formatters/json.go−39 vendor/github.com/alecthomas/chroma/v2/formatters/svg/font_liberation_mono.go−51 vendor/github.com/alecthomas/chroma/v2/formatters/svg/svg.go−222 vendor/github.com/alecthomas/chroma/v2/formatters/tokens.go−18 vendor/github.com/alecthomas/chroma/v2/formatters/tty_indexed.go−284 vendor/github.com/alecthomas/chroma/v2/formatters/tty_truecolour.go−76 vendor/github.com/alecthomas/chroma/v2/iterator.go−93 vendor/github.com/alecthomas/chroma/v2/lexer.go−179 vendor/github.com/alecthomas/chroma/v2/lexers/README.md−46 vendor/github.com/alecthomas/chroma/v2/lexers/caddyfile.go−275 vendor/github.com/alecthomas/chroma/v2/lexers/cl.go−243 vendor/github.com/alecthomas/chroma/v2/lexers/dns.go−17 vendor/github.com/alecthomas/chroma/v2/lexers/emacs.go−533 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abap.xml−154 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abnf.xml−66 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript.xml−68 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript_3.xml−163 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ada.xml−321 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/agda.xml−66 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/al.xml−75 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/alloy.xml−58 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ampl.xml−98 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/angular2.xml−109 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/antlr.xml−317 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apacheconf.xml−74 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apl.xml−59 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/applescript.xml−151 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arangodb_aql.xml−174 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arduino.xml−322 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/armasm.xml−126 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arturo.xml−119 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/atl.xml−165 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autohotkey.xml−78 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autoit.xml−70 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/awk.xml−95 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ballerina.xml−97 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash.xml−222 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash_session.xml−25 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/batchfile.xml−660 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/beef.xml−120 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bibtex.xml−152 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bicep.xml−84 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/blitzbasic.xml−141 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bnf.xml−28 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bqn.xml−83 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/brainfuck.xml−51 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c#.xml−121 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c++.xml−331 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c.xml−260 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c3.xml−374 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cap_n_proto.xml−122 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cassandra_cql.xml−137 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ceylon.xml−151 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfengine3.xml−197 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfstatement.xml−92 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chaiscript.xml−134 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chapel.xml−143 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cheetah.xml−55 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/clojure.xml−71 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cmake.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cobol.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coffeescript.xml−210 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/common_lisp.xml−184 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coq.xml−136 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/core.xml−79 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/crystal.xml−762 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/css.xml−323 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/csv.xml−53 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cue.xml−85 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cython.xml−372 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/d.xml−133 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dart.xml−213 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dax.xml−39 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/desktop_entry.xml−17 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/devicetree.xml−251 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/diff.xml−52 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/django_jinja.xml−153 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dns.xml−44 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/docker.xml−68 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dtd.xml−168 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dylan.xml−176 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ebnf.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elixir.xml−744 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elm.xml−119 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/emacslisp.xml−132 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erb.xml−37 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erlang.xml−166 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/factor.xml−412 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fennel.xml−68 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fish.xml−159 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/forth.xml−78 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortran.xml−102 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortranfixed.xml−71 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fsharp.xml−245 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gas.xml−150 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript.xml−259 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript3.xml−270 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gemfile_lock.xml−81 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gettext.xml−24 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gherkin.xml−263 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gleam.xml−100 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/glsl.xml−65 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gnuplot.xml−289 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/go_template.xml−114 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/graphql.xml−92 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groff.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groovy.xml−135 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/handlebars.xml−147 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hare.xml−98 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/haskell.xml−275 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hcl.xml−143 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hexdump.xml−189 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlb.xml−131 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlsl.xml−110 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/holyc.xml−252 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/html.xml−159 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hy.xml−104 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/idris.xml−216 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/igor.xml−47 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ini.xml−52 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/io.xml−71 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/iscdhcpd.xml−96 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/j.xml−157 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/janet.xml−48 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/java.xml−206 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/javascript.xml−160 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/json.xml−117 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonata.xml−83 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonnet.xml−138 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/julia.xml−400 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jungle.xml−98 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kakoune.xml−96 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kdl.xml−75 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kotlin.xml−234 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lateralus.xml−184 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lean.xml−56 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lighttpd_configuration_file.xml−42 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lilypond.xml−133 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/llvm.xml−73 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lox.xml−78 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lua.xml−158 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/luau.xml−173 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/makefile.xml−131 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mako.xml−120 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mason.xml−89 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/materialize_sql_dialect.xml−155 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mathematica.xml−60 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/matlab.xml−114 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mcfunction.xml−138 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/meson.xml−86 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/metal.xml−270 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/microcad.xml−139 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/minizinc.xml−82 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mlir.xml−73 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modelica.xml−106 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modula-2.xml−245 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mojo.xml−228 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/monkeyc.xml−153 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonbit.xml−75 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonscript.xml−83 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/morrowindscript.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/myghty.xml−77 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mysql.xml−121 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nasm.xml−126 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/natural.xml−143 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ndisasm.xml−123 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/newspeak.xml−121 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nginx_configuration_file.xml−101 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nim.xml−211 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nix.xml−258 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nsis.xml−59 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nu.xml−126 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objective-c.xml−510 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objectpascal.xml−142 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ocaml.xml−153 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/octave.xml−101 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/odin.xml−127 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/onesenterprise.xml−92 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openedge_abl.xml−101 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openscad.xml−96 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/org_mode.xml−329 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pacmanconf.xml−37 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/perl.xml−400 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/php.xml−258 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pig.xml−105 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pkgconfig.xml−73 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pl_pgsql.xml−119 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plaintext.xml−21 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plutus_core.xml−105 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pony.xml−135 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postgresql_sql_dialect.xml−155 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postscript.xml−93 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/povray.xml−58 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powerquery.xml−51 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powershell.xml−230 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prolog.xml−115 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promela.xml−119 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promql.xml−123 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/properties.xml−45 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/protocol_buffer.xml−124 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prql.xml−161 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/psl.xml−213 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/puppet.xml−100 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python.xml−595 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python_2.xml−356 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qbasic.xml−173 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qml.xml−113 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/r.xml−128 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/racket.xml−260 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ragel.xml−149 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/react.xml−236 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reasonml.xml−147 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reg.xml−68 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rego.xml−94 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rexx.xml−127 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rgbasm.xml−239 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ring.xml−74 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpgle.xml−176 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpm_spec.xml−58 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ruby.xml−728 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rust.xml−375 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sas.xml−191 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sass.xml−362 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scala.xml−274 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scdoc.xml−115 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scheme.xml−106 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scilab.xml−98 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scss.xml−373 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sed.xml−92 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sieve.xml−61 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smali.xml−73 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smalltalk.xml−294 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smarty.xml−79 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snbt.xml−58 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snobol.xml−95 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/solidity.xml−291 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sourcepawn.xml−59 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/spade.xml−292 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sparql.xml−160 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sql.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/squidconf.xml−63 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/standard_ml.xml−548 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stas.xml−85 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stylus.xml−132 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/swift.xml−207 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemd.xml−63 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemverilog.xml−181 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tablegen.xml−69 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tal.xml−43 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tasm.xml−135 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcl.xml−272 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcsh.xml−121 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/templ.xml−315 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/termcap.xml−75 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terminfo.xml−84 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terraform.xml−149 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tex.xml−113 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/thrift.xml−154 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/toml.xml−45 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tradingview.xml−81 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/transact-sql.xml−137 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turing.xml−82 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turtle.xml−170 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/twig.xml−155 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/txtpb.xml−162 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typescript.xml−302 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscript.xml−178 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscriptcssdata.xml−52 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscripthtmldata.xml−52 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typst.xml−108 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ucode.xml−147 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v.xml−355 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v_shell.xml−365 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vala.xml−72 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vb_net.xml−162 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/verilog.xml−158 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhdl.xml−171 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhs.xml−48 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/viml.xml−85 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vue.xml−295 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wat.xml−149 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wdte.xml−43 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webgpu_shading_language.xml−142 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webvtt.xml−283 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/whiley.xml−57 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xml.xml−96 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xorg.xml−35 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yaml.xml−132 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yang.xml−99 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/z80_assembly.xml−74 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zed.xml−51 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zig.xml−187 vendor/github.com/alecthomas/chroma/v2/lexers/erb.go−29 vendor/github.com/alecthomas/chroma/v2/lexers/gemtext.go−37 vendor/github.com/alecthomas/chroma/v2/lexers/genshi.go−118 vendor/github.com/alecthomas/chroma/v2/lexers/go.go−81 vendor/github.com/alecthomas/chroma/v2/lexers/haxe.go−647 vendor/github.com/alecthomas/chroma/v2/lexers/html.go−8 vendor/github.com/alecthomas/chroma/v2/lexers/http.go−131 vendor/github.com/alecthomas/chroma/v2/lexers/lexers.go−85 vendor/github.com/alecthomas/chroma/v2/lexers/markdown.go−107 vendor/github.com/alecthomas/chroma/v2/lexers/markless.go−168 vendor/github.com/alecthomas/chroma/v2/lexers/mysql.go−33 vendor/github.com/alecthomas/chroma/v2/lexers/php.go−37 vendor/github.com/alecthomas/chroma/v2/lexers/raku.go−1710 vendor/github.com/alecthomas/chroma/v2/lexers/rst.go−89 vendor/github.com/alecthomas/chroma/v2/lexers/svelte.go−70 vendor/github.com/alecthomas/chroma/v2/lexers/typoscript.go−85 vendor/github.com/alecthomas/chroma/v2/lexers/yaml_jinja.go−20 vendor/github.com/alecthomas/chroma/v2/lexers/zed.go−24 vendor/github.com/alecthomas/chroma/v2/mutators.go−201 vendor/github.com/alecthomas/chroma/v2/pygments-lexers.txt−605 vendor/github.com/alecthomas/chroma/v2/quick/quick.go−44 vendor/github.com/alecthomas/chroma/v2/regexp.go−533 vendor/github.com/alecthomas/chroma/v2/registry.go−228 vendor/github.com/alecthomas/chroma/v2/remap.go−94 vendor/github.com/alecthomas/chroma/v2/renovate.json5−25 vendor/github.com/alecthomas/chroma/v2/serialise.go−483 vendor/github.com/alecthomas/chroma/v2/style.go−530 vendor/github.com/alecthomas/chroma/v2/styles/abap.xml−11 vendor/github.com/alecthomas/chroma/v2/styles/algol.xml−18 vendor/github.com/alecthomas/chroma/v2/styles/algol_nu.xml−18 vendor/github.com/alecthomas/chroma/v2/styles/api.go−95 vendor/github.com/alecthomas/chroma/v2/styles/arduino.xml−18 vendor/github.com/alecthomas/chroma/v2/styles/ashen.xml−69 vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark-soft.xml−107 vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark.xml−107 vendor/github.com/alecthomas/chroma/v2/styles/autumn.xml−36 vendor/github.com/alecthomas/chroma/v2/styles/average.xml−74 vendor/github.com/alecthomas/chroma/v2/styles/base16-snazzy.xml−74 vendor/github.com/alecthomas/chroma/v2/styles/borland.xml−26 vendor/github.com/alecthomas/chroma/v2/styles/bw.xml−23 vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-frappe.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-latte.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-macchiato.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-mocha.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/colorful.xml−52 vendor/github.com/alecthomas/chroma/v2/styles/compat.go−69 vendor/github.com/alecthomas/chroma/v2/styles/darcula.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/doom-one.xml−51 vendor/github.com/alecthomas/chroma/v2/styles/doom-one2.xml−64 vendor/github.com/alecthomas/chroma/v2/styles/dracula.xml−74 vendor/github.com/alecthomas/chroma/v2/styles/emacs.xml−44 vendor/github.com/alecthomas/chroma/v2/styles/evergarden.xml−33 vendor/github.com/alecthomas/chroma/v2/styles/friendly.xml−44 vendor/github.com/alecthomas/chroma/v2/styles/fruity.xml−19 vendor/github.com/alecthomas/chroma/v2/styles/github-dark.xml−46 vendor/github.com/alecthomas/chroma/v2/styles/github.xml−39 vendor/github.com/alecthomas/chroma/v2/styles/gruvbox-light.xml−34 vendor/github.com/alecthomas/chroma/v2/styles/gruvbox.xml−34 vendor/github.com/alecthomas/chroma/v2/styles/hr_high_contrast.xml−12 vendor/github.com/alecthomas/chroma/v2/styles/hrdark.xml−10 vendor/github.com/alecthomas/chroma/v2/styles/igor.xml−9 vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-dragon.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-lotus.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-wave.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/lovelace.xml−53 vendor/github.com/alecthomas/chroma/v2/styles/manni.xml−44 vendor/github.com/alecthomas/chroma/v2/styles/modus-operandi.xml−13 vendor/github.com/alecthomas/chroma/v2/styles/modus-vivendi.xml−13 vendor/github.com/alecthomas/chroma/v2/styles/monokai.xml−29 vendor/github.com/alecthomas/chroma/v2/styles/monokailight.xml−26 vendor/github.com/alecthomas/chroma/v2/styles/murphy.xml−52 vendor/github.com/alecthomas/chroma/v2/styles/native.xml−35 vendor/github.com/alecthomas/chroma/v2/styles/nord.xml−46 vendor/github.com/alecthomas/chroma/v2/styles/nordic.xml−46 vendor/github.com/alecthomas/chroma/v2/styles/onedark.xml−25 vendor/github.com/alecthomas/chroma/v2/styles/onesenterprise.xml−10 vendor/github.com/alecthomas/chroma/v2/styles/paraiso-dark.xml−37 vendor/github.com/alecthomas/chroma/v2/styles/paraiso-light.xml−37 vendor/github.com/alecthomas/chroma/v2/styles/pastie.xml−45 vendor/github.com/alecthomas/chroma/v2/styles/perldoc.xml−37 vendor/github.com/alecthomas/chroma/v2/styles/pygments.xml−42 vendor/github.com/alecthomas/chroma/v2/styles/rainbow_dash.xml−40 vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-dawn.xml−29 vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-moon.xml−29 vendor/github.com/alecthomas/chroma/v2/styles/rose-pine.xml−29 vendor/github.com/alecthomas/chroma/v2/styles/rpgle.xml−30 vendor/github.com/alecthomas/chroma/v2/styles/rrt.xml−19 vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark.xml−39 vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark256.xml−41 vendor/github.com/alecthomas/chroma/v2/styles/solarized-light.xml−17 vendor/github.com/alecthomas/chroma/v2/styles/swapoff.xml−18 vendor/github.com/alecthomas/chroma/v2/styles/tango.xml−72 vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-day.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-moon.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-night.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-storm.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/trac.xml−35 vendor/github.com/alecthomas/chroma/v2/styles/vim.xml−29 vendor/github.com/alecthomas/chroma/v2/styles/vs.xml−16 vendor/github.com/alecthomas/chroma/v2/styles/vulcan.xml−74 vendor/github.com/alecthomas/chroma/v2/styles/witchhazel.xml−31 vendor/github.com/alecthomas/chroma/v2/styles/xcode-dark.xml−31 vendor/github.com/alecthomas/chroma/v2/styles/xcode.xml−22 vendor/github.com/alecthomas/chroma/v2/table.py−31 vendor/github.com/alecthomas/chroma/v2/test.jsonl−2 vendor/github.com/alecthomas/chroma/v2/tokentype_enumer.go−588 vendor/github.com/alecthomas/chroma/v2/types.go−357 vendor/github.com/andybalholm/brotli/.gitignore−2 vendor/github.com/andybalholm/brotli/LICENSE−19 vendor/github.com/andybalholm/brotli/README.md−19 vendor/github.com/andybalholm/brotli/backward_references.go−185 vendor/github.com/andybalholm/brotli/backward_references_hq.go−796 vendor/github.com/andybalholm/brotli/bit_cost.go−436 vendor/github.com/andybalholm/brotli/bit_reader.go−266 vendor/github.com/andybalholm/brotli/bitwriter.go−56 vendor/github.com/andybalholm/brotli/block_splitter.go−144 vendor/github.com/andybalholm/brotli/block_splitter_command.go−434 vendor/github.com/andybalholm/brotli/block_splitter_distance.go−433 vendor/github.com/andybalholm/brotli/block_splitter_literal.go−433 vendor/github.com/andybalholm/brotli/brotli_bit_stream.go−1435 vendor/github.com/andybalholm/brotli/cluster.go−30 vendor/github.com/andybalholm/brotli/cluster_command.go−164 vendor/github.com/andybalholm/brotli/cluster_distance.go−326 vendor/github.com/andybalholm/brotli/cluster_literal.go−326 vendor/github.com/andybalholm/brotli/command.go−254 vendor/github.com/andybalholm/brotli/compress_fragment.go−834 vendor/github.com/andybalholm/brotli/compress_fragment_two_pass.go−775 vendor/github.com/andybalholm/brotli/constants.go−77 vendor/github.com/andybalholm/brotli/context.go−2176 vendor/github.com/andybalholm/brotli/decode.go−2581 vendor/github.com/andybalholm/brotli/dictionary.go−122890 vendor/github.com/andybalholm/brotli/dictionary_hash.go−32779 vendor/github.com/andybalholm/brotli/encode.go−1220 vendor/github.com/andybalholm/brotli/encoder.go−177 vendor/github.com/andybalholm/brotli/encoder_dict.go−22 vendor/github.com/andybalholm/brotli/encoder_fast.go−197 vendor/github.com/andybalholm/brotli/entropy_encode.go−592 vendor/github.com/andybalholm/brotli/entropy_encode_static.go−4399 vendor/github.com/andybalholm/brotli/fast_log.go−290 vendor/github.com/andybalholm/brotli/find_match_length.go−45 vendor/github.com/andybalholm/brotli/flate/LICENSE−27 vendor/github.com/andybalholm/brotli/flate/README.md−2 vendor/github.com/andybalholm/brotli/flate/gzip.go−65 vendor/github.com/andybalholm/brotli/flate/huffman_bit_writer.go−517 vendor/github.com/andybalholm/brotli/flate/huffman_code.go−346 vendor/github.com/andybalholm/brotli/flate/token.go−80 vendor/github.com/andybalholm/brotli/flate/writer.go−66 vendor/github.com/andybalholm/brotli/h10.go−287 vendor/github.com/andybalholm/brotli/h5.go−214 vendor/github.com/andybalholm/brotli/h6.go−216 vendor/github.com/andybalholm/brotli/hash.go−342 vendor/github.com/andybalholm/brotli/hash_composite.go−93 vendor/github.com/andybalholm/brotli/hash_forgetful_chain.go−252 vendor/github.com/andybalholm/brotli/hash_longest_match_quickly.go−214 vendor/github.com/andybalholm/brotli/hash_rolling.go−168 vendor/github.com/andybalholm/brotli/histogram.go−226 vendor/github.com/andybalholm/brotli/http.go−189 vendor/github.com/andybalholm/brotli/huffman.go−653 vendor/github.com/andybalholm/brotli/literal_cost.go−182 vendor/github.com/andybalholm/brotli/matchfinder/bargain1.go−212 vendor/github.com/andybalholm/brotli/matchfinder/bargain2.go−248 vendor/github.com/andybalholm/brotli/matchfinder/bargain3.go−278 vendor/github.com/andybalholm/brotli/matchfinder/emitter.go−34 vendor/github.com/andybalholm/brotli/matchfinder/m0.go−175 vendor/github.com/andybalholm/brotli/matchfinder/m4.go−339 vendor/github.com/andybalholm/brotli/matchfinder/matchfinder.go−103 vendor/github.com/andybalholm/brotli/matchfinder/pathfinder.go−328 vendor/github.com/andybalholm/brotli/matchfinder/textencoder.go−53 vendor/github.com/andybalholm/brotli/matchfinder/trio.go−326 vendor/github.com/andybalholm/brotli/matchfinder/zdfast.go−258 vendor/github.com/andybalholm/brotli/matchfinder/zfast.go−206 vendor/github.com/andybalholm/brotli/matchfinder/zm.go−301 vendor/github.com/andybalholm/brotli/memory.go−66 vendor/github.com/andybalholm/brotli/metablock.go−574 vendor/github.com/andybalholm/brotli/metablock_command.go−165 vendor/github.com/andybalholm/brotli/metablock_distance.go−165 vendor/github.com/andybalholm/brotli/metablock_literal.go−165 vendor/github.com/andybalholm/brotli/params.go−37 vendor/github.com/andybalholm/brotli/platform.go−103 vendor/github.com/andybalholm/brotli/prefix.go−30 vendor/github.com/andybalholm/brotli/prefix_dec.go−723 vendor/github.com/andybalholm/brotli/quality.go−196 vendor/github.com/andybalholm/brotli/reader.go−111 vendor/github.com/andybalholm/brotli/ringbuffer.go−134 vendor/github.com/andybalholm/brotli/state.go−294 vendor/github.com/andybalholm/brotli/static_dict.go−662 vendor/github.com/andybalholm/brotli/static_dict_lut.go−75094 vendor/github.com/andybalholm/brotli/symbol_list.go−22 vendor/github.com/andybalholm/brotli/transform.go−641 vendor/github.com/andybalholm/brotli/utf8_util.go−70 vendor/github.com/andybalholm/brotli/util.go−7 vendor/github.com/andybalholm/brotli/write_bits.go−52 vendor/github.com/andybalholm/brotli/writer.go−162 vendor/github.com/andybalholm/cascadia/.travis.yml−14 vendor/github.com/andybalholm/cascadia/LICENSE−24 vendor/github.com/andybalholm/cascadia/README.md−144 vendor/github.com/andybalholm/cascadia/parser.go−889 vendor/github.com/andybalholm/cascadia/pseudo_classes.go−458 vendor/github.com/andybalholm/cascadia/selector.go−586 vendor/github.com/andybalholm/cascadia/serialize.go−176 vendor/github.com/andybalholm/cascadia/specificity.go−26 vendor/github.com/atotto/clipboard/.travis.yml−22 vendor/github.com/atotto/clipboard/LICENSE−27 vendor/github.com/atotto/clipboard/README.md−48 vendor/github.com/atotto/clipboard/clipboard.go−20 vendor/github.com/atotto/clipboard/clipboard_darwin.go−52 vendor/github.com/atotto/clipboard/clipboard_plan9.go−42 vendor/github.com/atotto/clipboard/clipboard_unix.go−149 vendor/github.com/atotto/clipboard/clipboard_windows.go−157 vendor/github.com/aws/aws-sdk-go-v2/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/NOTICE.txt−3 vendor/github.com/aws/aws-sdk-go-v2/aws/accountid_endpoint_mode.go−18 vendor/github.com/aws/aws-sdk-go-v2/aws/checksum.go−33 vendor/github.com/aws/aws-sdk-go-v2/aws/config.go−254 vendor/github.com/aws/aws-sdk-go-v2/aws/context.go−22 vendor/github.com/aws/aws-sdk-go-v2/aws/credential_cache.go−235 vendor/github.com/aws/aws-sdk-go-v2/aws/credentials.go−234 vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/auto.go−38 vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/configuration.go−43 vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/defaults.go−50 vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/doc.go−2 vendor/github.com/aws/aws-sdk-go-v2/aws/defaultsmode.go−95 vendor/github.com/aws/aws-sdk-go-v2/aws/doc.go−62 vendor/github.com/aws/aws-sdk-go-v2/aws/endpoints.go−247 vendor/github.com/aws/aws-sdk-go-v2/aws/errors.go−9 vendor/github.com/aws/aws-sdk-go-v2/aws/from_ptr.go−365 vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/aws/logging.go−119 vendor/github.com/aws/aws-sdk-go-v2/aws/logging_generate.go−95 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/metadata.go−213 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/middleware.go−168 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname.go−24 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname_go115.go−24 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/recursion_detection.go−94 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id.go−27 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go−57 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/user_agent.go−398 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md−203 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/debug.go−144 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/decode.go−218 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/encode.go−167 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/error.go−23 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/headers.go−24 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/middleware.go−71 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport.go−13 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport_go117.go−12 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header.go−175 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header_value.go−521 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/message.go−99 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/array.go−61 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/encoder.go−80 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/map.go−78 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/middleware.go−62 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/object.go−68 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/value.go−117 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/restjson/decoder_util.go−85 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/xml/error_utils.go−48 vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/none.go−20 vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_bucket.go−96 vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_rate_limit.go−83 vendor/github.com/aws/aws-sdk-go-v2/aws/request.go−25 vendor/github.com/aws/aws-sdk-go-v2/aws/restrict_file_permissions.go−21 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive.go−156 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_ratelimit.go−158 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_token_bucket.go−83 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/attempt_metrics.go−51 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/doc.go−80 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/errors.go−20 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/jitter_backoff.go−124 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/metadata.go−52 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/middleware.go−487 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retry.go−103 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retryable_error.go−228 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/standard.go−343 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/throttle_error.go−60 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/timeout_error.go−52 vendor/github.com/aws/aws-sdk-go-v2/aws/retryer.go−127 vendor/github.com/aws/aws-sdk-go-v2/aws/runtime.go−14 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/cache.go−115 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/const.go−40 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/header_rules.go−82 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/headers.go−70 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/hmac.go−13 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/host.go−75 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/scope.go−13 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/time.go−36 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/util.go−80 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go−420 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/presign_middleware.go−127 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/stream.go−86 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/v4.go−564 vendor/github.com/aws/aws-sdk-go-v2/aws/to_ptr.go−297 vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/client.go−355 vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/content_type.go−42 vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error.go−33 vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error_middleware.go−56 vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/timeout_read_closer.go−109 vendor/github.com/aws/aws-sdk-go-v2/aws/types.go−42 vendor/github.com/aws/aws-sdk-go-v2/aws/version.go−8 vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md−1097 vendor/github.com/aws/aws-sdk-go-v2/config/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/config/auth_scheme_preference.go−19 vendor/github.com/aws/aws-sdk-go-v2/config/config.go−237 vendor/github.com/aws/aws-sdk-go-v2/config/defaultsmode.go−47 vendor/github.com/aws/aws-sdk-go-v2/config/doc.go−20 vendor/github.com/aws/aws-sdk-go-v2/config/env_config.go−966 vendor/github.com/aws/aws-sdk-go-v2/config/generate.go−4 vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/errors.go−22 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/ini.go−56 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/parse.go−109 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/sections.go−157 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/strings.go−89 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/token.go−32 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/tokenize.go−92 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/value.go−93 vendor/github.com/aws/aws-sdk-go-v2/config/load_options.go−1371 vendor/github.com/aws/aws-sdk-go-v2/config/local.go−51 vendor/github.com/aws/aws-sdk-go-v2/config/provider.go−802 vendor/github.com/aws/aws-sdk-go-v2/config/resolve.go−458 vendor/github.com/aws/aws-sdk-go-v2/config/resolve_bearer_token.go−122 vendor/github.com/aws/aws-sdk-go-v2/config/resolve_credentials.go−650 vendor/github.com/aws/aws-sdk-go-v2/config/shared_config.go−1704 vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md−990 vendor/github.com/aws/aws-sdk-go-v2/credentials/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/credentials/doc.go−4 vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/doc.go−58 vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/provider.go−241 vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/auth.go−48 vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/client.go−165 vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/endpoints.go−20 vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/middleware.go−164 vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/provider.go−207 vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/dpop.go−150 vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/file.go−14 vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/provider.go−184 vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/token.go−110 vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/doc.go−92 vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/provider.go−296 vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/doc.go−81 vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_cached_token.go−232 vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_credentials_provider.go−165 vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_token_provider.go−147 vendor/github.com/aws/aws-sdk-go-v2/credentials/static_provider.go−63 vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/assume_role_provider.go−338 vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/web_identity_provider.go−181 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md−584 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_client.go−358 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetDynamicData.go−77 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetIAMInfo.go−103 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetInstanceIdentityDocument.go−110 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetMetadata.go−77 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetRegion.go−73 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetToken.go−119 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetUserData.go−61 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/auth.go−48 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/doc.go−12 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/endpoints.go−20 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/internal/config/resolvers.go−114 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/request_middleware.go−313 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/token_provider.go−261 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/auth.go−45 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/scheme.go−191 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_adapter.go−43 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_signer_adapter.go−35 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/credentials_adapter.go−46 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/smithy.go−2 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter.go−57 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter_eventstream.go−51 vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md−544 vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/config.go−65 vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/endpoints.go−57 vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/internal/context/context.go−65 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/arn.go−94 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/doc.go−3 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/generate.go−7 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/host.go−51 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partition.go−76 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.go−496 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json−267 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/endpoints.go−201 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md−519 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/endpoints.go−302 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/internal/rand/rand.go−33 vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/interfaces.go−9 vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/time.go−74 vendor/github.com/aws/aws-sdk-go-v2/internal/sdkio/byte.go−12 vendor/github.com/aws/aws-sdk-go-v2/internal/shareddefaults/shared_config.go−47 vendor/github.com/aws/aws-sdk-go-v2/internal/strings/strings.go−11 vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/LICENSE−28 vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/docs.go−7 vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/singleflight.go−210 vendor/github.com/aws/aws-sdk-go-v2/internal/timeconv/duration.go−13 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md−486 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/credentials.go−141 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/error.go−17 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/compare.go−30 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/ecc.go−113 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/const.go−36 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/header_rules.go−82 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/headers.go−68 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/hmac.go−13 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/host.go−75 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/time.go−36 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/util.go−64 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/middleware.go−118 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/presign_middleware.go−117 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/smithy.go−92 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/v4a.go−520 vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md−220 vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/accept_encoding_gzip.go−176 vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/doc.go−22 vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md−571 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/context.go−56 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/doc.go−3 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/middleware.go−110 vendor/github.com/aws/aws-sdk-go-v2/service/signin/CHANGELOG.md−85 vendor/github.com/aws/aws-sdk-go-v2/service/signin/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_client.go−945 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_CreateOAuth2Token.go−212 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteConsoleAuthorizationConfiguration.go−168 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteResourcePermissionStatement.go−196 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetConsoleAuthorizationConfiguration.go−168 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetResourcePolicy.go−155 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_ListResourcePermissionStatements.go−261 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutConsoleAuthorizationConfiguration.go−168 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutResourcePermissionStatement.go−216 vendor/github.com/aws/aws-sdk-go-v2/service/signin/auth.go−361 vendor/github.com/aws/aws-sdk-go-v2/service/signin/deserializers.go−2474 vendor/github.com/aws/aws-sdk-go-v2/service/signin/doc.go−9 vendor/github.com/aws/aws-sdk-go-v2/service/signin/endpoints.go−854 vendor/github.com/aws/aws-sdk-go-v2/service/signin/generated.json−40 vendor/github.com/aws/aws-sdk-go-v2/service/signin/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/signin/internal/endpoints/endpoints.go−333 vendor/github.com/aws/aws-sdk-go-v2/service/signin/options.go−242 vendor/github.com/aws/aws-sdk-go-v2/service/signin/serializers.go−724 vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/enums.go−46 vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/errors.go−247 vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/types.go−162 vendor/github.com/aws/aws-sdk-go-v2/service/signin/validators.go−111 vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md−792 vendor/github.com/aws/aws-sdk-go-v2/service/sso/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_client.go−929 vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_GetRoleCredentials.go−165 vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccountRoles.go−263 vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccounts.go−261 vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_Logout.go−164 vendor/github.com/aws/aws-sdk-go-v2/service/sso/auth.go−379 vendor/github.com/aws/aws-sdk-go-v2/service/sso/deserializers.go−1171 vendor/github.com/aws/aws-sdk-go-v2/service/sso/doc.go−27 vendor/github.com/aws/aws-sdk-go-v2/service/sso/endpoints.go−570 vendor/github.com/aws/aws-sdk-go-v2/service/sso/generated.json−35 vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints/endpoints.go−628 vendor/github.com/aws/aws-sdk-go-v2/service/sso/options.go−238 vendor/github.com/aws/aws-sdk-go-v2/service/sso/serializers.go−309 vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/errors.go−115 vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/types.go−63 vendor/github.com/aws/aws-sdk-go-v2/service/sso/validators.go−175 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md−790 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_client.go−929 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateToken.go−235 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateTokenWithIAM.go−282 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_RegisterClient.go−206 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_StartDeviceAuthorization.go−188 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/auth.go−373 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/deserializers.go−2244 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/doc.go−49 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/endpoints.go−570 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/generated.json−36 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints/endpoints.go−628 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/options.go−238 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/serializers.go−512 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/enums.go−44 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/errors.go−430 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/types.go−25 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/validators.go−184 vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md−832 vendor/github.com/aws/aws-sdk-go-v2/service/sts/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_client.go−1115 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRole.go−544 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithSAML.go−455 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithWebIdentity.go−472 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoot.go−229 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_DecodeAuthorizationMessage.go−189 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetAccessKeyInfo.go−180 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetCallerIdentity.go−192 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetDelegatedAccessToken.go−169 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetFederationToken.go−393 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetSessionToken.go−239 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetWebIdentityToken.go−192 vendor/github.com/aws/aws-sdk-go-v2/service/sts/auth.go−377 vendor/github.com/aws/aws-sdk-go-v2/service/sts/deserializers.go−3456 vendor/github.com/aws/aws-sdk-go-v2/service/sts/doc.go−13 vendor/github.com/aws/aws-sdk-go-v2/service/sts/endpoints.go−683 vendor/github.com/aws/aws-sdk-go-v2/service/sts/generated.json−45 vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints/endpoints.go−585 vendor/github.com/aws/aws-sdk-go-v2/service/sts/options.go−286 vendor/github.com/aws/aws-sdk-go-v2/service/sts/serializers.go−1198 vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/errors.go−363 vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/types.go−144 vendor/github.com/aws/aws-sdk-go-v2/service/sts/validators.go−433 vendor/github.com/aws/smithy-go/.gitignore−29 vendor/github.com/aws/smithy-go/.travis.yml−28 vendor/github.com/aws/smithy-go/AGENTS.md−172 vendor/github.com/aws/smithy-go/CHANGELOG.md−454 vendor/github.com/aws/smithy-go/CODE_OF_CONDUCT.md−4 vendor/github.com/aws/smithy-go/CONTRIBUTING.md−90 vendor/github.com/aws/smithy-go/LICENSE−175 vendor/github.com/aws/smithy-go/Makefile−130 vendor/github.com/aws/smithy-go/NOTICE−1 vendor/github.com/aws/smithy-go/README.md−107 vendor/github.com/aws/smithy-go/auth/auth.go−3 vendor/github.com/aws/smithy-go/auth/bearer/docs.go−3 vendor/github.com/aws/smithy-go/auth/bearer/middleware.go−104 vendor/github.com/aws/smithy-go/auth/bearer/token.go−50 vendor/github.com/aws/smithy-go/auth/bearer/token_cache.go−208 vendor/github.com/aws/smithy-go/auth/identity.go−47 vendor/github.com/aws/smithy-go/auth/option.go−25 vendor/github.com/aws/smithy-go/auth/scheme_id.go−20 vendor/github.com/aws/smithy-go/changelog-template.json−9 vendor/github.com/aws/smithy-go/context/suppress_expired.go−81 vendor/github.com/aws/smithy-go/doc.go−2 vendor/github.com/aws/smithy-go/document.go−10 vendor/github.com/aws/smithy-go/document/doc.go−12 vendor/github.com/aws/smithy-go/document/document.go−239 vendor/github.com/aws/smithy-go/document/errors.go−75 vendor/github.com/aws/smithy-go/encoding/doc.go−4 vendor/github.com/aws/smithy-go/encoding/encoding.go−40 vendor/github.com/aws/smithy-go/encoding/httpbinding/encode.go−123 vendor/github.com/aws/smithy-go/encoding/httpbinding/header.go−122 vendor/github.com/aws/smithy-go/encoding/httpbinding/path_replace.go−108 vendor/github.com/aws/smithy-go/encoding/httpbinding/query.go−107 vendor/github.com/aws/smithy-go/encoding/httpbinding/uri.go−111 vendor/github.com/aws/smithy-go/encoding/json/array.go−35 vendor/github.com/aws/smithy-go/encoding/json/constants.go−15 vendor/github.com/aws/smithy-go/encoding/json/decoder_util.go−139 vendor/github.com/aws/smithy-go/encoding/json/encoder.go−30 vendor/github.com/aws/smithy-go/encoding/json/escape.go−198 vendor/github.com/aws/smithy-go/encoding/json/object.go−40 vendor/github.com/aws/smithy-go/encoding/json/value.go−154 vendor/github.com/aws/smithy-go/encoding/xml/array.go−49 vendor/github.com/aws/smithy-go/encoding/xml/constants.go−10 vendor/github.com/aws/smithy-go/encoding/xml/doc.go−49 vendor/github.com/aws/smithy-go/encoding/xml/element.go−91 vendor/github.com/aws/smithy-go/encoding/xml/encoder.go−51 vendor/github.com/aws/smithy-go/encoding/xml/error_utils.go−51 vendor/github.com/aws/smithy-go/encoding/xml/escape.go−137 vendor/github.com/aws/smithy-go/encoding/xml/map.go−53 vendor/github.com/aws/smithy-go/encoding/xml/value.go−302 vendor/github.com/aws/smithy-go/encoding/xml/xml_decoder.go−154 vendor/github.com/aws/smithy-go/endpoints/endpoint.go−23 vendor/github.com/aws/smithy-go/endpoints/private/bdd/evaluate.go−35 vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/doc.go−4 vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/split.go−16 vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/string_slice.go−18 vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/strings.go−25 vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/uri.go−133 vendor/github.com/aws/smithy-go/errors.go−137 vendor/github.com/aws/smithy-go/eventstream/const.go−24 vendor/github.com/aws/smithy-go/eventstream/debug.go−144 vendor/github.com/aws/smithy-go/eventstream/decode.go−218 vendor/github.com/aws/smithy-go/eventstream/deserializer.go−294 vendor/github.com/aws/smithy-go/eventstream/encode.go−167 vendor/github.com/aws/smithy-go/eventstream/error.go−23 vendor/github.com/aws/smithy-go/eventstream/header.go−175 vendor/github.com/aws/smithy-go/eventstream/header_value.go−521 vendor/github.com/aws/smithy-go/eventstream/message.go−99 vendor/github.com/aws/smithy-go/eventstream/serializer.go−228 vendor/github.com/aws/smithy-go/eventstream/signer.go−82 vendor/github.com/aws/smithy-go/eventstream/types.go−26 vendor/github.com/aws/smithy-go/go_module_metadata.go−6 vendor/github.com/aws/smithy-go/internal/sync/singleflight/LICENSE−28 vendor/github.com/aws/smithy-go/internal/sync/singleflight/docs.go−8 vendor/github.com/aws/smithy-go/internal/sync/singleflight/singleflight.go−210 vendor/github.com/aws/smithy-go/io/byte.go−12 vendor/github.com/aws/smithy-go/io/doc.go−2 vendor/github.com/aws/smithy-go/io/reader.go−16 vendor/github.com/aws/smithy-go/io/ringbuffer.go−94 vendor/github.com/aws/smithy-go/local-mod-replace.sh−39 vendor/github.com/aws/smithy-go/logging/logger.go−82 vendor/github.com/aws/smithy-go/metrics/metrics.go−136 vendor/github.com/aws/smithy-go/metrics/nop.go−98 vendor/github.com/aws/smithy-go/middleware/context.go−41 vendor/github.com/aws/smithy-go/middleware/doc.go−67 vendor/github.com/aws/smithy-go/middleware/eventstream_middleware.go−21 vendor/github.com/aws/smithy-go/middleware/logging.go−46 vendor/github.com/aws/smithy-go/middleware/metadata.go−65 vendor/github.com/aws/smithy-go/middleware/middleware.go−71 vendor/github.com/aws/smithy-go/middleware/ordered_group.go−270 vendor/github.com/aws/smithy-go/middleware/stack.go−209 vendor/github.com/aws/smithy-go/middleware/stack_values.go−100 vendor/github.com/aws/smithy-go/middleware/step_build.go−298 vendor/github.com/aws/smithy-go/middleware/step_deserialize.go−300 vendor/github.com/aws/smithy-go/middleware/step_finalize.go−298 vendor/github.com/aws/smithy-go/middleware/step_initialize.go−299 vendor/github.com/aws/smithy-go/middleware/step_serialize.go−305 vendor/github.com/aws/smithy-go/modman.toml−9 vendor/github.com/aws/smithy-go/private/requestcompression/gzip.go−30 vendor/github.com/aws/smithy-go/private/requestcompression/middleware_capture_request_compression.go−52 vendor/github.com/aws/smithy-go/private/requestcompression/request_compression.go−103 vendor/github.com/aws/smithy-go/properties.go−69 vendor/github.com/aws/smithy-go/ptr/doc.go−5 vendor/github.com/aws/smithy-go/ptr/from_ptr.go−601 vendor/github.com/aws/smithy-go/ptr/gen_scalars.go−83 vendor/github.com/aws/smithy-go/ptr/to_ptr.go−499 vendor/github.com/aws/smithy-go/rand/doc.go−3 vendor/github.com/aws/smithy-go/rand/rand.go−31 vendor/github.com/aws/smithy-go/rand/uuid.go−87 vendor/github.com/aws/smithy-go/schema.go−328 vendor/github.com/aws/smithy-go/schema_ext.go−37 vendor/github.com/aws/smithy-go/serde.go−229 vendor/github.com/aws/smithy-go/sync/error.go−53 vendor/github.com/aws/smithy-go/time/time.go−134 vendor/github.com/aws/smithy-go/tracing/context.go−96 vendor/github.com/aws/smithy-go/tracing/nop.go−32 vendor/github.com/aws/smithy-go/tracing/tracing.go−95 vendor/github.com/aws/smithy-go/trait.go−21 vendor/github.com/aws/smithy-go/traits/http.go−69 vendor/github.com/aws/smithy-go/traits/index.go−107 vendor/github.com/aws/smithy-go/traits/serde.go−56 vendor/github.com/aws/smithy-go/traits/traits.go−72 vendor/github.com/aws/smithy-go/transport/http/auth.go−30 vendor/github.com/aws/smithy-go/transport/http/auth_schemes.go−45 vendor/github.com/aws/smithy-go/transport/http/checksum_middleware.go−70 vendor/github.com/aws/smithy-go/transport/http/client.go−161 vendor/github.com/aws/smithy-go/transport/http/doc.go−5 vendor/github.com/aws/smithy-go/transport/http/eventstream.go−209 vendor/github.com/aws/smithy-go/transport/http/eventstream_middleware.go−69 vendor/github.com/aws/smithy-go/transport/http/headerlist.go−163 vendor/github.com/aws/smithy-go/transport/http/host.go−89 vendor/github.com/aws/smithy-go/transport/http/interceptor.go−321 vendor/github.com/aws/smithy-go/transport/http/interceptor_middleware.go−325 vendor/github.com/aws/smithy-go/transport/http/internal/io/safe.go−75 vendor/github.com/aws/smithy-go/transport/http/md5_checksum.go−25 vendor/github.com/aws/smithy-go/transport/http/metrics.go−204 vendor/github.com/aws/smithy-go/transport/http/middleware_close_response_body.go−79 vendor/github.com/aws/smithy-go/transport/http/middleware_content_length.go−84 vendor/github.com/aws/smithy-go/transport/http/middleware_header_comment.go−81 vendor/github.com/aws/smithy-go/transport/http/middleware_headers.go−167 vendor/github.com/aws/smithy-go/transport/http/middleware_http_logging.go−75 vendor/github.com/aws/smithy-go/transport/http/middleware_metadata.go−51 vendor/github.com/aws/smithy-go/transport/http/middleware_min_proto.go−79 vendor/github.com/aws/smithy-go/transport/http/properties.go−80 vendor/github.com/aws/smithy-go/transport/http/protocol.go−27 vendor/github.com/aws/smithy-go/transport/http/request.go−188 vendor/github.com/aws/smithy-go/transport/http/response.go−34 vendor/github.com/aws/smithy-go/transport/http/time.go−13 vendor/github.com/aws/smithy-go/transport/http/url.go−44 vendor/github.com/aws/smithy-go/transport/http/user_agent.go−37 vendor/github.com/aws/smithy-go/type_registry.go−70 vendor/github.com/aws/smithy-go/validation.go−140 vendor/github.com/aymanbagabas/go-udiff/LICENSE-BSD−27 vendor/github.com/aymanbagabas/go-udiff/LICENSE-MIT−21 vendor/github.com/aymanbagabas/go-udiff/Makefile−4 vendor/github.com/aymanbagabas/go-udiff/README.md−142 vendor/github.com/aymanbagabas/go-udiff/diff.go−177 vendor/github.com/aymanbagabas/go-udiff/export.go−16 vendor/github.com/aymanbagabas/go-udiff/lcs/common.go−179 vendor/github.com/aymanbagabas/go-udiff/lcs/doc.go−156 vendor/github.com/aymanbagabas/go-udiff/lcs/export.go−11 vendor/github.com/aymanbagabas/go-udiff/lcs/git.sh−33 vendor/github.com/aymanbagabas/go-udiff/lcs/labels.go−55 vendor/github.com/aymanbagabas/go-udiff/lcs/old.go−475 vendor/github.com/aymanbagabas/go-udiff/lcs/sequence.go−70 vendor/github.com/aymanbagabas/go-udiff/merge.go−81 vendor/github.com/aymanbagabas/go-udiff/ndiff.go−118 vendor/github.com/aymanbagabas/go-udiff/unified.go−314 vendor/github.com/aymerick/douceur/LICENSE−22 vendor/github.com/aymerick/douceur/css/declaration.go−60 vendor/github.com/aymerick/douceur/css/rule.go−230 vendor/github.com/aymerick/douceur/css/stylesheet.go−25 vendor/github.com/aymerick/douceur/parser/parser.go−409 vendor/github.com/bahlo/generic-list-go/LICENSE−27 vendor/github.com/bahlo/generic-list-go/README.md−5 vendor/github.com/bahlo/generic-list-go/list.go−235 vendor/github.com/bmatcuk/doublestar/v4/.codecov.yml−10 vendor/github.com/bmatcuk/doublestar/v4/.gitignore−32 vendor/github.com/bmatcuk/doublestar/v4/LICENSE−22 vendor/github.com/bmatcuk/doublestar/v4/README.md−495 vendor/github.com/bmatcuk/doublestar/v4/UPGRADING.md−63 vendor/github.com/bmatcuk/doublestar/v4/doublestar.go−13 vendor/github.com/bmatcuk/doublestar/v4/glob.go−497 vendor/github.com/bmatcuk/doublestar/v4/globoptions.go−188 vendor/github.com/bmatcuk/doublestar/v4/globwalk.go−438 vendor/github.com/bmatcuk/doublestar/v4/match.go−419 vendor/github.com/bmatcuk/doublestar/v4/utils.go−165 vendor/github.com/bmatcuk/doublestar/v4/utils_unix.go−19 vendor/github.com/bmatcuk/doublestar/v4/utils_windows.go−43 vendor/github.com/bmatcuk/doublestar/v4/validate.go−80 vendor/github.com/buger/jsonparser/.gitignore−12 vendor/github.com/buger/jsonparser/.travis.yml−12 vendor/github.com/buger/jsonparser/Dockerfile−12 vendor/github.com/buger/jsonparser/LICENSE−21 vendor/github.com/buger/jsonparser/Makefile−36 vendor/github.com/buger/jsonparser/README.md−361 vendor/github.com/buger/jsonparser/bytes.go−47 vendor/github.com/buger/jsonparser/bytes_safe.go−25 vendor/github.com/buger/jsonparser/bytes_unsafe.go−44 vendor/github.com/buger/jsonparser/escape.go−173 vendor/github.com/buger/jsonparser/fuzz.go−117 vendor/github.com/buger/jsonparser/oss-fuzz-build.sh−47 vendor/github.com/buger/jsonparser/parser.go−1318 vendor/github.com/cespare/xxhash/v2/LICENSE.txt−22 vendor/github.com/cespare/xxhash/v2/README.md−74 vendor/github.com/cespare/xxhash/v2/testall.sh−10 vendor/github.com/cespare/xxhash/v2/xxhash.go−243 vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s−209 vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s−183 vendor/github.com/cespare/xxhash/v2/xxhash_asm.go−15 vendor/github.com/cespare/xxhash/v2/xxhash_other.go−76 vendor/github.com/cespare/xxhash/v2/xxhash_safe.go−16 vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go−58 vendor/github.com/charlievieth/fastwalk/.gitignore−2 vendor/github.com/charlievieth/fastwalk/LICENSE−21 vendor/github.com/charlievieth/fastwalk/Makefile−101 vendor/github.com/charlievieth/fastwalk/README.md−193 vendor/github.com/charlievieth/fastwalk/adapters.go−102 vendor/github.com/charlievieth/fastwalk/dirent.go−73 vendor/github.com/charlievieth/fastwalk/dirent_portable.go−134 vendor/github.com/charlievieth/fastwalk/dirent_unix.go−146 vendor/github.com/charlievieth/fastwalk/entry_filter_portable.go−37 vendor/github.com/charlievieth/fastwalk/entry_filter_unix.go−59 vendor/github.com/charlievieth/fastwalk/entry_filter_windows.go−156 vendor/github.com/charlievieth/fastwalk/fastwalk.go−697 vendor/github.com/charlievieth/fastwalk/fastwalk_darwin.go−122 vendor/github.com/charlievieth/fastwalk/fastwalk_portable.go−65 vendor/github.com/charlievieth/fastwalk/fastwalk_unix.go−131 vendor/github.com/charlievieth/fastwalk/go.LICENSE−27 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent.go−85 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_aix.go−29 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_dragonfly.go−54 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_freebsd.go−46 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_js.go−27 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_linux.go−50 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_netbsd.go−46 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_openbsd.go−46 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_solaris.go−29 vendor/github.com/charlievieth/fastwalk/internal/dirent/doc.go−2 vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go120.go−31 vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go121.go−15 vendor/github.com/charlievieth/fastwalk/zsyscall_darwin.go−93 vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_amd64.1_13.s−22 vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_arm64.1_13.s−22 vendor/github.com/charmbracelet/anthropic-sdk-go/.gitignore−4 vendor/github.com/charmbracelet/anthropic-sdk-go/.release-please-manifest.json−3 vendor/github.com/charmbracelet/anthropic-sdk-go/.stats.yml−4 vendor/github.com/charmbracelet/anthropic-sdk-go/Brewfile−1 vendor/github.com/charmbracelet/anthropic-sdk-go/CHANGELOG.md−641 vendor/github.com/charmbracelet/anthropic-sdk-go/CONTRIBUTING.md−65 vendor/github.com/charmbracelet/anthropic-sdk-go/LICENSE−8 vendor/github.com/charmbracelet/anthropic-sdk-go/README.md−999 vendor/github.com/charmbracelet/anthropic-sdk-go/SECURITY.md−27 vendor/github.com/charmbracelet/anthropic-sdk-go/aliases.go−72 vendor/github.com/charmbracelet/anthropic-sdk-go/api.md−545 vendor/github.com/charmbracelet/anthropic-sdk-go/bedrock/bedrock.go−295 vendor/github.com/charmbracelet/anthropic-sdk-go/beta.go−374 vendor/github.com/charmbracelet/anthropic-sdk-go/betafile.go−273 vendor/github.com/charmbracelet/anthropic-sdk-go/betamessage.go−11734 vendor/github.com/charmbracelet/anthropic-sdk-go/betamessagebatch.go−925 vendor/github.com/charmbracelet/anthropic-sdk-go/betamessageutil.go−459 vendor/github.com/charmbracelet/anthropic-sdk-go/betamodel.go−151 vendor/github.com/charmbracelet/anthropic-sdk-go/betaskill.go−362 vendor/github.com/charmbracelet/anthropic-sdk-go/betaskillversion.go−373 vendor/github.com/charmbracelet/anthropic-sdk-go/betatoolrunner.go−435 vendor/github.com/charmbracelet/anthropic-sdk-go/client.go−157 vendor/github.com/charmbracelet/anthropic-sdk-go/completion.go−196 vendor/github.com/charmbracelet/anthropic-sdk-go/field.go−46 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apierror/apierror.go−58 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/encoder.go−473 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/form.go−5 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/richparam.go−21 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/tag.go−51 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/decoder.go−709 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/encoder.go−392 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/enum.go−145 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/field.go−23 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/port.go−120 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/registry.go−59 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/subfield.go−68 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/tag.go−47 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/union.go−209 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/encoder.go−414 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/query.go−55 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/richparam.go−20 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/tag.go−44 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/decode.go−1325 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/encode.go−1396 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/fold.go−48 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/indent.go−182 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/scanner.go−610 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/sentinel/null.go−47 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/shims/shims.go−113 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/stream.go−512 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tables.go−218 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tags.go−38 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/time.go−62 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/field.go−30 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/union.go−49 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/requestconfig/requestconfig.go−638 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/version.go−5 vendor/github.com/charmbracelet/anthropic-sdk-go/message.go−9436 vendor/github.com/charmbracelet/anthropic-sdk-go/messagebatch.go−827 vendor/github.com/charmbracelet/anthropic-sdk-go/messageutil.go−413 vendor/github.com/charmbracelet/anthropic-sdk-go/model.go−151 vendor/github.com/charmbracelet/anthropic-sdk-go/option/middleware.go−38 vendor/github.com/charmbracelet/anthropic-sdk-go/option/requestoption.go−285 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/jsonl/jsonl.go−62 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/pagination/pagination.go−351 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/encoder.go−109 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/null.go−19 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/option.go−122 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/param.go−189 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/respjson/respjson.go−88 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/ssestream/ssestream.go−198 vendor/github.com/charmbracelet/anthropic-sdk-go/release-please-config.json−68 vendor/github.com/charmbracelet/anthropic-sdk-go/schemautil.go−244 vendor/github.com/charmbracelet/anthropic-sdk-go/shared/constant/constants.go−487 vendor/github.com/charmbracelet/anthropic-sdk-go/shared/shared.go−346 vendor/github.com/charmbracelet/anthropic-sdk-go/tools.md−292 vendor/github.com/charmbracelet/anthropic-sdk-go/vertex/vertex.go−134 vendor/github.com/charmbracelet/colorprofile/.golangci.yml−47 vendor/github.com/charmbracelet/colorprofile/.goreleaser.yml−6 vendor/github.com/charmbracelet/colorprofile/LICENSE−21 vendor/github.com/charmbracelet/colorprofile/README.md−109 vendor/github.com/charmbracelet/colorprofile/doc.go−4 vendor/github.com/charmbracelet/colorprofile/env.go−294 vendor/github.com/charmbracelet/colorprofile/env_other.go−8 vendor/github.com/charmbracelet/colorprofile/env_windows.go−40 vendor/github.com/charmbracelet/colorprofile/profile.go−108 vendor/github.com/charmbracelet/colorprofile/writer.go−171 vendor/github.com/charmbracelet/openai-go/.gitignore−4 vendor/github.com/charmbracelet/openai-go/.release-please-manifest.json−3 vendor/github.com/charmbracelet/openai-go/.stats.yml−4 vendor/github.com/charmbracelet/openai-go/Brewfile−1 vendor/github.com/charmbracelet/openai-go/CHANGELOG.md−1171 vendor/github.com/charmbracelet/openai-go/CONTRIBUTING.md−65 vendor/github.com/charmbracelet/openai-go/LICENSE−201 vendor/github.com/charmbracelet/openai-go/MIGRATION.md−284 vendor/github.com/charmbracelet/openai-go/README.md−1007 vendor/github.com/charmbracelet/openai-go/SECURITY.md−29 vendor/github.com/charmbracelet/openai-go/aliases.go−585 vendor/github.com/charmbracelet/openai-go/api.md−774 vendor/github.com/charmbracelet/openai-go/audio.go−61 vendor/github.com/charmbracelet/openai-go/audiospeech.go−179 vendor/github.com/charmbracelet/openai-go/audiotranscription.go−950 vendor/github.com/charmbracelet/openai-go/audiotranslation.go−120 vendor/github.com/charmbracelet/openai-go/azure/azure.go−269 vendor/github.com/charmbracelet/openai-go/batch.go−464 vendor/github.com/charmbracelet/openai-go/beta.go−36 vendor/github.com/charmbracelet/openai-go/betaassistant.go−2284 vendor/github.com/charmbracelet/openai-go/betachatkit.go−125 vendor/github.com/charmbracelet/openai-go/betachatkitsession.go−83 vendor/github.com/charmbracelet/openai-go/betachatkitthread.go−1564 vendor/github.com/charmbracelet/openai-go/betathread.go−1574 vendor/github.com/charmbracelet/openai-go/betathreadmessage.go−1717 vendor/github.com/charmbracelet/openai-go/betathreadrun.go−974 vendor/github.com/charmbracelet/openai-go/betathreadrunstep.go−1396 vendor/github.com/charmbracelet/openai-go/chat.go−30 vendor/github.com/charmbracelet/openai-go/chatcompletion.go−3521 vendor/github.com/charmbracelet/openai-go/chatcompletionmessage.go−100 vendor/github.com/charmbracelet/openai-go/client.go−185 vendor/github.com/charmbracelet/openai-go/completion.go−436 vendor/github.com/charmbracelet/openai-go/container.go−648 vendor/github.com/charmbracelet/openai-go/containerfile.go−287 vendor/github.com/charmbracelet/openai-go/containerfilecontent.go−50 vendor/github.com/charmbracelet/openai-go/conversations/aliases.go−585 vendor/github.com/charmbracelet/openai-go/conversations/api.md−31 vendor/github.com/charmbracelet/openai-go/conversations/conversation.go−493 vendor/github.com/charmbracelet/openai-go/conversations/item.go−1082 vendor/github.com/charmbracelet/openai-go/embedding.go−207 vendor/github.com/charmbracelet/openai-go/field.go−45 vendor/github.com/charmbracelet/openai-go/file.go−352 vendor/github.com/charmbracelet/openai-go/finetuning.go−35 vendor/github.com/charmbracelet/openai-go/finetuningalpha.go−29 vendor/github.com/charmbracelet/openai-go/finetuningalphagrader.go−675 vendor/github.com/charmbracelet/openai-go/finetuningcheckpoint.go−29 vendor/github.com/charmbracelet/openai-go/finetuningcheckpointpermission.go−352 vendor/github.com/charmbracelet/openai-go/finetuningjob.go−884 vendor/github.com/charmbracelet/openai-go/finetuningjobcheckpoint.go−152 vendor/github.com/charmbracelet/openai-go/finetuningmethod.go−1487 vendor/github.com/charmbracelet/openai-go/grader.go−28 vendor/github.com/charmbracelet/openai-go/gradergradermodel.go−1753 vendor/github.com/charmbracelet/openai-go/image.go−1337 vendor/github.com/charmbracelet/openai-go/internal/apierror/apierror.go−58 vendor/github.com/charmbracelet/openai-go/internal/apiform/encoder.go−473 vendor/github.com/charmbracelet/openai-go/internal/apiform/form.go−5 vendor/github.com/charmbracelet/openai-go/internal/apiform/richparam.go−20 vendor/github.com/charmbracelet/openai-go/internal/apiform/tag.go−72 vendor/github.com/charmbracelet/openai-go/internal/apijson/decoder.go−688 vendor/github.com/charmbracelet/openai-go/internal/apijson/encoder.go−371 vendor/github.com/charmbracelet/openai-go/internal/apijson/enum.go−140 vendor/github.com/charmbracelet/openai-go/internal/apijson/field.go−23 vendor/github.com/charmbracelet/openai-go/internal/apijson/port.go−120 vendor/github.com/charmbracelet/openai-go/internal/apijson/registry.go−51 vendor/github.com/charmbracelet/openai-go/internal/apijson/subfield.go−67 vendor/github.com/charmbracelet/openai-go/internal/apijson/tag.go−69 vendor/github.com/charmbracelet/openai-go/internal/apijson/union.go−208 vendor/github.com/charmbracelet/openai-go/internal/apiquery/encoder.go−394 vendor/github.com/charmbracelet/openai-go/internal/apiquery/query.go−55 vendor/github.com/charmbracelet/openai-go/internal/apiquery/richparam.go−20 vendor/github.com/charmbracelet/openai-go/internal/apiquery/tag.go−44 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/decode.go−1324 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/encode.go−1396 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/fold.go−48 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/indent.go−182 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/scanner.go−610 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/sentinel/null.go−46 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/shims/shims.go−113 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/stream.go−512 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tables.go−218 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tags.go−38 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/time.go−61 vendor/github.com/charmbracelet/openai-go/internal/paramutil/field.go−30 vendor/github.com/charmbracelet/openai-go/internal/paramutil/union.go−48 vendor/github.com/charmbracelet/openai-go/internal/requestconfig/requestconfig.go−644 vendor/github.com/charmbracelet/openai-go/internal/version.go−5 vendor/github.com/charmbracelet/openai-go/model.go−137 vendor/github.com/charmbracelet/openai-go/moderation.go−489 vendor/github.com/charmbracelet/openai-go/option/middleware.go−38 vendor/github.com/charmbracelet/openai-go/option/requestoption.go−299 vendor/github.com/charmbracelet/openai-go/packages/pagination/pagination.go−329 vendor/github.com/charmbracelet/openai-go/packages/param/encoder.go−109 vendor/github.com/charmbracelet/openai-go/packages/param/null.go−19 vendor/github.com/charmbracelet/openai-go/packages/param/option.go−122 vendor/github.com/charmbracelet/openai-go/packages/param/param.go−186 vendor/github.com/charmbracelet/openai-go/packages/respjson/respjson.go−88 vendor/github.com/charmbracelet/openai-go/packages/ssestream/ssestream.go−247 vendor/github.com/charmbracelet/openai-go/polling.go−129 vendor/github.com/charmbracelet/openai-go/realtime/aliases.go−585 vendor/github.com/charmbracelet/openai-go/realtime/api.md−55 vendor/github.com/charmbracelet/openai-go/realtime/call.go−133 vendor/github.com/charmbracelet/openai-go/realtime/clientsecret.go−1826 vendor/github.com/charmbracelet/openai-go/realtime/realtime.go−1979 vendor/github.com/charmbracelet/openai-go/release-please-config.json−68 vendor/github.com/charmbracelet/openai-go/responses/aliases.go−585 vendor/github.com/charmbracelet/openai-go/responses/api.md−240 vendor/github.com/charmbracelet/openai-go/responses/inputitem.go−135 vendor/github.com/charmbracelet/openai-go/responses/inputtoken.go−336 vendor/github.com/charmbracelet/openai-go/responses/response.go−21786 vendor/github.com/charmbracelet/openai-go/shared/constant/constants.go−1143 vendor/github.com/charmbracelet/openai-go/shared/shared.go−1183 vendor/github.com/charmbracelet/openai-go/skill.go−292 vendor/github.com/charmbracelet/openai-go/skillcontent.go−46 vendor/github.com/charmbracelet/openai-go/skillversion.go−283 vendor/github.com/charmbracelet/openai-go/skillversioncontent.go−50 vendor/github.com/charmbracelet/openai-go/streamaccumulator.go−215 vendor/github.com/charmbracelet/openai-go/upload.go−238 vendor/github.com/charmbracelet/openai-go/uploadpart.go−115 vendor/github.com/charmbracelet/openai-go/vectorstore.go−911 vendor/github.com/charmbracelet/openai-go/vectorstorefile.go−535 vendor/github.com/charmbracelet/openai-go/vectorstorefilebatch.go−427 vendor/github.com/charmbracelet/openai-go/video.go−677 vendor/github.com/charmbracelet/openai-go/webhooks/aliases.go−585 vendor/github.com/charmbracelet/openai-go/webhooks/api.md−20 vendor/github.com/charmbracelet/openai-go/webhooks/webhook.go−1306 vendor/github.com/charmbracelet/ultraviolet/.gitattributes−1 vendor/github.com/charmbracelet/ultraviolet/.golangci.yml−48 vendor/github.com/charmbracelet/ultraviolet/.goreleaser.yml−5 vendor/github.com/charmbracelet/ultraviolet/LICENSE−21 vendor/github.com/charmbracelet/ultraviolet/README.md−161 vendor/github.com/charmbracelet/ultraviolet/TUTORIAL.md−175 vendor/github.com/charmbracelet/ultraviolet/border.go−231 vendor/github.com/charmbracelet/ultraviolet/buffer.go−831 vendor/github.com/charmbracelet/ultraviolet/cancelreader_other.go−16 vendor/github.com/charmbracelet/ultraviolet/cancelreader_windows.go−139 vendor/github.com/charmbracelet/ultraviolet/cell.go−465 vendor/github.com/charmbracelet/ultraviolet/console.go−219 vendor/github.com/charmbracelet/ultraviolet/console_unix.go−13 vendor/github.com/charmbracelet/ultraviolet/console_windows.go−13 vendor/github.com/charmbracelet/ultraviolet/cursor.go−22 vendor/github.com/charmbracelet/ultraviolet/decoder.go−2102 vendor/github.com/charmbracelet/ultraviolet/doc.go−46 vendor/github.com/charmbracelet/ultraviolet/environ.go−32 vendor/github.com/charmbracelet/ultraviolet/event.go−567 vendor/github.com/charmbracelet/ultraviolet/internal/casso/math.go−172 vendor/github.com/charmbracelet/ultraviolet/internal/casso/solver.go−275 vendor/github.com/charmbracelet/ultraviolet/internal/lru/lru.go−69 vendor/github.com/charmbracelet/ultraviolet/key.go−762 vendor/github.com/charmbracelet/ultraviolet/key_table.go−664 vendor/github.com/charmbracelet/ultraviolet/layout/cache.go−29 vendor/github.com/charmbracelet/ultraviolet/layout/constraint.go−174 vendor/github.com/charmbracelet/ultraviolet/layout/flex.go−210 vendor/github.com/charmbracelet/ultraviolet/layout/layout.go−973 vendor/github.com/charmbracelet/ultraviolet/layout/padding.go−66 vendor/github.com/charmbracelet/ultraviolet/logger.go−6 vendor/github.com/charmbracelet/ultraviolet/mouse.go−150 vendor/github.com/charmbracelet/ultraviolet/poll.go−38 vendor/github.com/charmbracelet/ultraviolet/poll_bsd.go−165 vendor/github.com/charmbracelet/ultraviolet/poll_default.go−12 vendor/github.com/charmbracelet/ultraviolet/poll_fallback.go−158 vendor/github.com/charmbracelet/ultraviolet/poll_linux.go−175 vendor/github.com/charmbracelet/ultraviolet/poll_select.go−156 vendor/github.com/charmbracelet/ultraviolet/poll_solaris.go−12 vendor/github.com/charmbracelet/ultraviolet/poll_windows.go−217 vendor/github.com/charmbracelet/ultraviolet/screen/context.go−379 vendor/github.com/charmbracelet/ultraviolet/screen/screen.go−117 vendor/github.com/charmbracelet/ultraviolet/styled.go−337 vendor/github.com/charmbracelet/ultraviolet/tabstop.go−142 vendor/github.com/charmbracelet/ultraviolet/terminal.go−394 vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly.go−10 vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly_other.go−8 vendor/github.com/charmbracelet/ultraviolet/terminal_other.go−22 vendor/github.com/charmbracelet/ultraviolet/terminal_reader.go−503 vendor/github.com/charmbracelet/ultraviolet/terminal_reader_other.go−13 vendor/github.com/charmbracelet/ultraviolet/terminal_reader_windows.go−336 vendor/github.com/charmbracelet/ultraviolet/terminal_renderer.go−1639 vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hardscroll.go−243 vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hashmap.go−298 vendor/github.com/charmbracelet/ultraviolet/terminal_screen.go−837 vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly.go−10 vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly_other.go−8 vendor/github.com/charmbracelet/ultraviolet/terminal_unix.go−56 vendor/github.com/charmbracelet/ultraviolet/terminal_windows.go−77 vendor/github.com/charmbracelet/ultraviolet/tty.go−42 vendor/github.com/charmbracelet/ultraviolet/tty_other.go−26 vendor/github.com/charmbracelet/ultraviolet/tty_unix.go−39 vendor/github.com/charmbracelet/ultraviolet/tty_windows.go−39 vendor/github.com/charmbracelet/ultraviolet/utils.go−15 vendor/github.com/charmbracelet/ultraviolet/uv.go−406 vendor/github.com/charmbracelet/ultraviolet/winch.go−62 vendor/github.com/charmbracelet/ultraviolet/winch_other.go−17 vendor/github.com/charmbracelet/ultraviolet/winch_unix.go−50 vendor/github.com/charmbracelet/ultraviolet/window.go−147 vendor/github.com/charmbracelet/x/ansi/LICENSE−21 vendor/github.com/charmbracelet/x/ansi/ansi.go−11 vendor/github.com/charmbracelet/x/ansi/ascii.go−8 vendor/github.com/charmbracelet/x/ansi/background.go−178 vendor/github.com/charmbracelet/x/ansi/c0.go−79 vendor/github.com/charmbracelet/x/ansi/c1.go−72 vendor/github.com/charmbracelet/x/ansi/charset.go−55 vendor/github.com/charmbracelet/x/ansi/clipboard.go−75 vendor/github.com/charmbracelet/x/ansi/color.go−784 vendor/github.com/charmbracelet/x/ansi/ctrl.go−156 vendor/github.com/charmbracelet/x/ansi/cursor.go−637 vendor/github.com/charmbracelet/x/ansi/cwd.go−26 vendor/github.com/charmbracelet/x/ansi/doc.go−7 vendor/github.com/charmbracelet/x/ansi/finalterm.go−67 vendor/github.com/charmbracelet/x/ansi/focus.go−9 vendor/github.com/charmbracelet/x/ansi/graphics.go−62 vendor/github.com/charmbracelet/x/ansi/hyperlink.go−28 vendor/github.com/charmbracelet/x/ansi/inband.go−24 vendor/github.com/charmbracelet/x/ansi/iterm2.go−18 vendor/github.com/charmbracelet/x/ansi/keypad.go−28 vendor/github.com/charmbracelet/x/ansi/kitty.go−90 vendor/github.com/charmbracelet/x/ansi/kitty/decoder.go−86 vendor/github.com/charmbracelet/x/ansi/kitty/encoder.go−64 vendor/github.com/charmbracelet/x/ansi/kitty/graphics.go−414 vendor/github.com/charmbracelet/x/ansi/kitty/options.go−373 vendor/github.com/charmbracelet/x/ansi/kitty/writer.go−187 vendor/github.com/charmbracelet/x/ansi/method.go−196 vendor/github.com/charmbracelet/x/ansi/mode.go−690 vendor/github.com/charmbracelet/x/ansi/mode_deprecated.go−495 vendor/github.com/charmbracelet/x/ansi/modes.go−65 vendor/github.com/charmbracelet/x/ansi/mouse.go−172 vendor/github.com/charmbracelet/x/ansi/notification.go−32 vendor/github.com/charmbracelet/x/ansi/palette.go−34 vendor/github.com/charmbracelet/x/ansi/parser.go−417 vendor/github.com/charmbracelet/x/ansi/parser/const.go−79 vendor/github.com/charmbracelet/x/ansi/parser/seq.go−136 vendor/github.com/charmbracelet/x/ansi/parser/transition_table.go−273 vendor/github.com/charmbracelet/x/ansi/parser_decode.go−525 vendor/github.com/charmbracelet/x/ansi/parser_handler.go−60 vendor/github.com/charmbracelet/x/ansi/parser_sync.go−29 vendor/github.com/charmbracelet/x/ansi/passthrough.go−60 vendor/github.com/charmbracelet/x/ansi/paste.go−7 vendor/github.com/charmbracelet/x/ansi/progress.go−49 vendor/github.com/charmbracelet/x/ansi/reset.go−11 vendor/github.com/charmbracelet/x/ansi/screen.go−410 vendor/github.com/charmbracelet/x/ansi/sgr.go−79 vendor/github.com/charmbracelet/x/ansi/status.go−168 vendor/github.com/charmbracelet/x/ansi/style.go−819 vendor/github.com/charmbracelet/x/ansi/termcap.go−41 vendor/github.com/charmbracelet/x/ansi/title.go−48 vendor/github.com/charmbracelet/x/ansi/truncate.go−290 vendor/github.com/charmbracelet/x/ansi/urxvt.go−17 vendor/github.com/charmbracelet/x/ansi/util.go−92 vendor/github.com/charmbracelet/x/ansi/width.go−107 vendor/github.com/charmbracelet/x/ansi/winop.go−59 vendor/github.com/charmbracelet/x/ansi/wrap.go−472 vendor/github.com/charmbracelet/x/ansi/xterm.go−138 vendor/github.com/charmbracelet/x/editor/LICENSE−21 vendor/github.com/charmbracelet/x/editor/editor.go−140 vendor/github.com/charmbracelet/x/etag/LICENSE−21 vendor/github.com/charmbracelet/x/etag/etag.go−48 vendor/github.com/charmbracelet/x/exp/charmtone/LICENSE−21 vendor/github.com/charmbracelet/x/exp/charmtone/charmtone.go−443 vendor/github.com/charmbracelet/x/exp/golden/LICENSE−21 vendor/github.com/charmbracelet/x/exp/golden/golden.go−83 vendor/github.com/charmbracelet/x/exp/ordered/LICENSE−21 vendor/github.com/charmbracelet/x/exp/ordered/ordered.go−42 vendor/github.com/charmbracelet/x/exp/slice/LICENSE−21 vendor/github.com/charmbracelet/x/exp/slice/slice.go−148 vendor/github.com/charmbracelet/x/exp/strings/LICENSE−21 vendor/github.com/charmbracelet/x/exp/strings/contains.go−16 vendor/github.com/charmbracelet/x/exp/strings/join.go−134 vendor/github.com/charmbracelet/x/powernap/LICENSE−21 vendor/github.com/charmbracelet/x/powernap/pkg/config/config.go−118 vendor/github.com/charmbracelet/x/powernap/pkg/config/lsps.json−367 vendor/github.com/charmbracelet/x/powernap/pkg/config/overrides.go−85 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/client.go−875 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/language.go−158 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol.go−50 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/LICENSE−27 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/interface.go−132 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/pattern_interfaces.go−79 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tables.go−31 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsdocument-changes.go−83 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsjson.go−3072 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsprotocol.go−6963 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/uri.go−192 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/sync.go−240 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/types.go−93 vendor/github.com/charmbracelet/x/powernap/pkg/transport/connection.go−130 vendor/github.com/charmbracelet/x/powernap/pkg/transport/router.go−107 vendor/github.com/charmbracelet/x/powernap/pkg/transport/transport.go−214 vendor/github.com/charmbracelet/x/term/LICENSE−21 vendor/github.com/charmbracelet/x/term/term.go−51 vendor/github.com/charmbracelet/x/term/term_other.go−39 vendor/github.com/charmbracelet/x/term/term_plan9.go−118 vendor/github.com/charmbracelet/x/term/term_unix.go−96 vendor/github.com/charmbracelet/x/term/term_unix_bsd.go−11 vendor/github.com/charmbracelet/x/term/term_unix_other.go−11 vendor/github.com/charmbracelet/x/term/term_windows.go−87 vendor/github.com/charmbracelet/x/term/terminal.go−12 vendor/github.com/charmbracelet/x/term/util.go−47 vendor/github.com/charmbracelet/x/termios/LICENSE−21 vendor/github.com/charmbracelet/x/termios/bit_bsd.go−7 vendor/github.com/charmbracelet/x/termios/bit_darwin.go−7 vendor/github.com/charmbracelet/x/termios/bit_other.go−7 vendor/github.com/charmbracelet/x/termios/syscalls_bsd.go−11 vendor/github.com/charmbracelet/x/termios/syscalls_darwin.go−10 vendor/github.com/charmbracelet/x/termios/syscalls_linux.go−14 vendor/github.com/charmbracelet/x/termios/termios.go−249 vendor/github.com/charmbracelet/x/termios/termios_bsd.go−13 vendor/github.com/charmbracelet/x/termios/termios_linux.go−13 vendor/github.com/charmbracelet/x/termios/termios_other.go−15 vendor/github.com/charmbracelet/x/termios/termios_solaris.go−26 vendor/github.com/charmbracelet/x/windows/LICENSE−21 vendor/github.com/charmbracelet/x/windows/doc.go−4 vendor/github.com/charmbracelet/x/windows/syscall_windows.go−14 vendor/github.com/charmbracelet/x/windows/types.go−221 vendor/github.com/charmbracelet/x/windows/types_windows.go−142 vendor/github.com/charmbracelet/x/windows/zsyscall_windows.go−77 vendor/github.com/clipperhouse/displaywidth/.gitignore−3 vendor/github.com/clipperhouse/displaywidth/AGENTS.md−51 vendor/github.com/clipperhouse/displaywidth/CHANGELOG.md−129 vendor/github.com/clipperhouse/displaywidth/LICENSE−21 vendor/github.com/clipperhouse/displaywidth/README.md−190 vendor/github.com/clipperhouse/displaywidth/gen.go−3 vendor/github.com/clipperhouse/displaywidth/graphemes.go−73 vendor/github.com/clipperhouse/displaywidth/options.go−30 vendor/github.com/clipperhouse/displaywidth/trie.go−1699 vendor/github.com/clipperhouse/displaywidth/truncate.go−149 vendor/github.com/clipperhouse/displaywidth/width.go−239 vendor/github.com/clipperhouse/uax29/v2/LICENSE−21 vendor/github.com/clipperhouse/uax29/v2/graphemes/README.md−120 vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi.go−138 vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi8.go−79 vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go−144 vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go−25 vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go−205 vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go−1717 vendor/github.com/clipperhouse/uax29/v2/words/README.md−121 vendor/github.com/clipperhouse/uax29/v2/words/bleve_compat.go−104 vendor/github.com/clipperhouse/uax29/v2/words/iterator.go−126 vendor/github.com/clipperhouse/uax29/v2/words/joiners.go−41 vendor/github.com/clipperhouse/uax29/v2/words/reader.go−34 vendor/github.com/clipperhouse/uax29/v2/words/seek.go−43 vendor/github.com/clipperhouse/uax29/v2/words/splitfunc.go−269 vendor/github.com/clipperhouse/uax29/v2/words/trie.go−3774 vendor/github.com/cyphar/filepath-securejoin/.golangci.yml−60 vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md−453 vendor/github.com/cyphar/filepath-securejoin/COPYING.md−447 vendor/github.com/cyphar/filepath-securejoin/LICENSE.BSD−28 vendor/github.com/cyphar/filepath-securejoin/LICENSE.MPL-2.0−373 vendor/github.com/cyphar/filepath-securejoin/README.md−184 vendor/github.com/cyphar/filepath-securejoin/VERSION−1 vendor/github.com/cyphar/filepath-securejoin/codecov.yml−29 vendor/github.com/cyphar/filepath-securejoin/doc.go−47 vendor/github.com/cyphar/filepath-securejoin/internal/consts/consts.go−15 vendor/github.com/cyphar/filepath-securejoin/join.go−169 vendor/github.com/cyphar/filepath-securejoin/vfs.go−37 vendor/github.com/davecgh/go-spew/LICENSE−15 vendor/github.com/davecgh/go-spew/spew/bypass.go−145 vendor/github.com/davecgh/go-spew/spew/bypasssafe.go−38 vendor/github.com/davecgh/go-spew/spew/common.go−341 vendor/github.com/davecgh/go-spew/spew/config.go−306 vendor/github.com/davecgh/go-spew/spew/doc.go−211 vendor/github.com/davecgh/go-spew/spew/dump.go−509 vendor/github.com/davecgh/go-spew/spew/format.go−419 vendor/github.com/davecgh/go-spew/spew/spew.go−148 vendor/github.com/denisbrodbeck/machineid/.gitignore−29 vendor/github.com/denisbrodbeck/machineid/LICENSE.md−22 vendor/github.com/denisbrodbeck/machineid/README.md−182 vendor/github.com/denisbrodbeck/machineid/helper.go−36 vendor/github.com/denisbrodbeck/machineid/id.go−45 vendor/github.com/denisbrodbeck/machineid/id_bsd.go−42 vendor/github.com/denisbrodbeck/machineid/id_darwin.go−37 vendor/github.com/denisbrodbeck/machineid/id_linux.go−27 vendor/github.com/denisbrodbeck/machineid/id_windows.go−23 vendor/github.com/denisbrodbeck/machineid/logo.png vendor/github.com/denisbrodbeck/machineid/makefile−12 vendor/github.com/disintegration/imaging/.travis.yml−12 vendor/github.com/disintegration/imaging/LICENSE−21 vendor/github.com/disintegration/imaging/README.md−226 vendor/github.com/disintegration/imaging/adjust.go−253 vendor/github.com/disintegration/imaging/convolution.go−148 vendor/github.com/disintegration/imaging/doc.go−7 vendor/github.com/disintegration/imaging/effects.go−169 vendor/github.com/disintegration/imaging/histogram.go−52 vendor/github.com/disintegration/imaging/io.go−444 vendor/github.com/disintegration/imaging/resize.go−595 vendor/github.com/disintegration/imaging/scanner.go−285 vendor/github.com/disintegration/imaging/tools.go−249 vendor/github.com/disintegration/imaging/transform.go−268 vendor/github.com/disintegration/imaging/utils.go−167 vendor/github.com/dlclark/regexp2/v2/.gitignore−29 vendor/github.com/dlclark/regexp2/v2/ATTRIB−133 vendor/github.com/dlclark/regexp2/v2/LICENSE−21 vendor/github.com/dlclark/regexp2/v2/README.md−283 vendor/github.com/dlclark/regexp2/v2/Taskfile.yml−64 vendor/github.com/dlclark/regexp2/v2/bufferpool.go−76 vendor/github.com/dlclark/regexp2/v2/fastclock.go−141 vendor/github.com/dlclark/regexp2/v2/helpers/indexof.go−394 vendor/github.com/dlclark/regexp2/v2/helpers/math.go−15 vendor/github.com/dlclark/regexp2/v2/helpers/runes.go−58 vendor/github.com/dlclark/regexp2/v2/helpers/searchvalues.go−180 vendor/github.com/dlclark/regexp2/v2/match.go−455 vendor/github.com/dlclark/regexp2/v2/options.go−157 vendor/github.com/dlclark/regexp2/v2/regexp.go−717 vendor/github.com/dlclark/regexp2/v2/regexp_codegen.go−70 vendor/github.com/dlclark/regexp2/v2/replace.go−357 vendor/github.com/dlclark/regexp2/v2/runner.go−2197 vendor/github.com/dlclark/regexp2/v2/split.go−67 vendor/github.com/dlclark/regexp2/v2/stringprefixfilter.go−375 vendor/github.com/dlclark/regexp2/v2/syntax/charclass.go−1507 vendor/github.com/dlclark/regexp2/v2/syntax/code.go−316 vendor/github.com/dlclark/regexp2/v2/syntax/escape.go−94 vendor/github.com/dlclark/regexp2/v2/syntax/fuzz.go−21 vendor/github.com/dlclark/regexp2/v2/syntax/optimizations.go−672 vendor/github.com/dlclark/regexp2/v2/syntax/parser.go−2529 vendor/github.com/dlclark/regexp2/v2/syntax/prefix.go−943 vendor/github.com/dlclark/regexp2/v2/syntax/prefixanalyzer.go−1491 vendor/github.com/dlclark/regexp2/v2/syntax/replacerdata.go−87 vendor/github.com/dlclark/regexp2/v2/syntax/tree.go−2362 vendor/github.com/dlclark/regexp2/v2/syntax/unicode_alias_tables.go−6058 vendor/github.com/dlclark/regexp2/v2/syntax/writer.go−500 vendor/github.com/dustin/go-humanize/.travis.yml−21 vendor/github.com/dustin/go-humanize/LICENSE−21 vendor/github.com/dustin/go-humanize/README.markdown−124 vendor/github.com/dustin/go-humanize/big.go−31 vendor/github.com/dustin/go-humanize/bigbytes.go−189 vendor/github.com/dustin/go-humanize/bytes.go−143 vendor/github.com/dustin/go-humanize/comma.go−116 vendor/github.com/dustin/go-humanize/commaf.go−41 vendor/github.com/dustin/go-humanize/ftoa.go−49 vendor/github.com/dustin/go-humanize/humanize.go−8 vendor/github.com/dustin/go-humanize/number.go−192 vendor/github.com/dustin/go-humanize/ordinals.go−25 vendor/github.com/dustin/go-humanize/si.go−127 vendor/github.com/dustin/go-humanize/times.go−117 vendor/github.com/ebitengine/purego/.gitignore−1 vendor/github.com/ebitengine/purego/LICENSE−201 vendor/github.com/ebitengine/purego/README.md−119 vendor/github.com/ebitengine/purego/abi_amd64.h−99 vendor/github.com/ebitengine/purego/abi_arm64.h−39 vendor/github.com/ebitengine/purego/abi_loong64.h−60 vendor/github.com/ebitengine/purego/cgo.go−19 vendor/github.com/ebitengine/purego/dlerror.go−17 vendor/github.com/ebitengine/purego/dlfcn.go−99 vendor/github.com/ebitengine/purego/dlfcn_android.go−34 vendor/github.com/ebitengine/purego/dlfcn_darwin.go−20 vendor/github.com/ebitengine/purego/dlfcn_freebsd.go−14 vendor/github.com/ebitengine/purego/dlfcn_linux.go−16 vendor/github.com/ebitengine/purego/dlfcn_netbsd.go−15 vendor/github.com/ebitengine/purego/dlfcn_nocgo_freebsd.go−11 vendor/github.com/ebitengine/purego/dlfcn_nocgo_linux.go−19 vendor/github.com/ebitengine/purego/dlfcn_nocgo_netbsd.go−9 vendor/github.com/ebitengine/purego/dlfcn_playground.go−24 vendor/github.com/ebitengine/purego/dlfcn_stubs.s−22 vendor/github.com/ebitengine/purego/func.go−564 vendor/github.com/ebitengine/purego/gen.go−6 vendor/github.com/ebitengine/purego/go_runtime.go−13 vendor/github.com/ebitengine/purego/internal/cgo/dlfcn_cgo_unix.go−56 vendor/github.com/ebitengine/purego/internal/cgo/empty.go−6 vendor/github.com/ebitengine/purego/internal/cgo/syscall_cgo_unix.go−55 vendor/github.com/ebitengine/purego/internal/fakecgo/abi_amd64.h−99 vendor/github.com/ebitengine/purego/internal/fakecgo/abi_arm64.h−39 vendor/github.com/ebitengine/purego/internal/fakecgo/abi_loong64.h−60 vendor/github.com/ebitengine/purego/internal/fakecgo/abi_ppc64x.h−195 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_386.s−29 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_amd64.s−39 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm.s−52 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm64.s−36 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_loong64.s−40 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_ppc64le.s−82 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_riscv64.s−78 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_s390x.s−55 vendor/github.com/ebitengine/purego/internal/fakecgo/callbacks.go−93 vendor/github.com/ebitengine/purego/internal/fakecgo/doc.go−32 vendor/github.com/ebitengine/purego/internal/fakecgo/fakecgo.go−14 vendor/github.com/ebitengine/purego/internal/fakecgo/freebsd.go−27 vendor/github.com/ebitengine/purego/internal/fakecgo/go_darwin.go−88 vendor/github.com/ebitengine/purego/internal/fakecgo/go_freebsd.go−100 vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go−72 vendor/github.com/ebitengine/purego/internal/fakecgo/go_linux.go−100 vendor/github.com/ebitengine/purego/internal/fakecgo/go_netbsd.go−106 vendor/github.com/ebitengine/purego/internal/fakecgo/go_setenv.go−18 vendor/github.com/ebitengine/purego/internal/fakecgo/go_util.go−38 vendor/github.com/ebitengine/purego/internal/fakecgo/iscgo.go−19 vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo.go−39 vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_darwin.go−26 vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_freebsd.go−20 vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_linux.go−20 vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_netbsd.go−26 vendor/github.com/ebitengine/purego/internal/fakecgo/netbsd.go−23 vendor/github.com/ebitengine/purego/internal/fakecgo/setenv.go−19 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_386.s−107 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_amd64.s−107 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm.s−81 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm64.s−84 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_loong64.s−88 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_ppc64le.s−227 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_riscv64.s−72 vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols.go−165 vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_darwin.go−59 vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_freebsd.go−48 vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_linux.go−48 vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_netbsd.go−59 vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_darwin.s−19 vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_freebsd.s−16 vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_linux.s−16 vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_netbsd.s−19 vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_stubs.s−55 vendor/github.com/ebitengine/purego/internal/strings/strings.go−40 vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go124.go−15 vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go125.go−12 vendor/github.com/ebitengine/purego/is_ios.go−13 vendor/github.com/ebitengine/purego/nocgo.go−25 vendor/github.com/ebitengine/purego/objc/objc_block_darwin.go−272 vendor/github.com/ebitengine/purego/objc/objc_runtime_darwin.go−709 vendor/github.com/ebitengine/purego/struct_386.go−41 vendor/github.com/ebitengine/purego/struct_amd64.go−286 vendor/github.com/ebitengine/purego/struct_arm.go−85 vendor/github.com/ebitengine/purego/struct_arm64.go−549 vendor/github.com/ebitengine/purego/struct_loong64.go−213 vendor/github.com/ebitengine/purego/struct_ppc64le.go−143 vendor/github.com/ebitengine/purego/struct_riscv64.go−143 vendor/github.com/ebitengine/purego/struct_s390x.go−143 vendor/github.com/ebitengine/purego/sys_386.s−147 vendor/github.com/ebitengine/purego/sys_amd64.s−170 vendor/github.com/ebitengine/purego/sys_arm.s−142 vendor/github.com/ebitengine/purego/sys_arm64.s−97 vendor/github.com/ebitengine/purego/sys_loong64.s−96 vendor/github.com/ebitengine/purego/sys_ppc64le.s−120 vendor/github.com/ebitengine/purego/sys_riscv64.s−101 vendor/github.com/ebitengine/purego/sys_s390x.s−114 vendor/github.com/ebitengine/purego/sys_unix_386.s−226 vendor/github.com/ebitengine/purego/sys_unix_arm.s−89 vendor/github.com/ebitengine/purego/sys_unix_arm64.s−70 vendor/github.com/ebitengine/purego/sys_unix_loong64.s−75 vendor/github.com/ebitengine/purego/sys_unix_ppc64le.s−114 vendor/github.com/ebitengine/purego/sys_unix_riscv64.s−79 vendor/github.com/ebitengine/purego/sys_unix_s390x.s−109 vendor/github.com/ebitengine/purego/syscall.go−83 vendor/github.com/ebitengine/purego/syscall_32bit.go−109 vendor/github.com/ebitengine/purego/syscall_cgo_linux.go−21 vendor/github.com/ebitengine/purego/syscall_sysv.go−317 vendor/github.com/ebitengine/purego/syscall_sysv_others.go−28 vendor/github.com/ebitengine/purego/syscall_sysv_stackargs.go−33 vendor/github.com/ebitengine/purego/syscall_windows.go−46 vendor/github.com/ebitengine/purego/zcallback_386.s−4014 vendor/github.com/ebitengine/purego/zcallback_amd64.s−2014 vendor/github.com/ebitengine/purego/zcallback_arm.s−4014 vendor/github.com/ebitengine/purego/zcallback_arm64.s−4014 vendor/github.com/ebitengine/purego/zcallback_loong64.s−4014 vendor/github.com/ebitengine/purego/zcallback_ppc64le.s−4014 vendor/github.com/ebitengine/purego/zcallback_riscv64.s−4051 vendor/github.com/ebitengine/purego/zcallback_s390x.s−4015 vendor/github.com/esiqveland/notify/.gitignore−1 vendor/github.com/esiqveland/notify/LICENSE.txt−27 vendor/github.com/esiqveland/notify/README.md−54 vendor/github.com/esiqveland/notify/doc.go−18 vendor/github.com/esiqveland/notify/notification.go−547 vendor/github.com/felixge/httpsnoop/.gitignore vendor/github.com/felixge/httpsnoop/LICENSE.txt−19 vendor/github.com/felixge/httpsnoop/Makefile−10 vendor/github.com/felixge/httpsnoop/README.md−95 vendor/github.com/felixge/httpsnoop/capture_metrics.go−121 vendor/github.com/felixge/httpsnoop/docs.go−10 vendor/github.com/felixge/httpsnoop/wrap_generated.go−16179 vendor/github.com/fsnotify/fsnotify/.cirrus.yml−14 vendor/github.com/fsnotify/fsnotify/.gitignore−10

5051 more files changed are not listed.

.github/cla-signatures.json−360
@@ -1735,366 +1735,6 @@
17351735 "created_at": "2026-05-12T15:48:38Z",
17361736 "repoId": 987670088,
17371737 "pullRequestNo": 2886
1738− },
1739− {
1740− "name": "johnjansen",
1741− "id": 105938,
1742− "comment_id": 4434007350,
1743− "created_at": "2026-05-12T19:28:01Z",
1744− "repoId": 987670088,
1745− "pullRequestNo": 2887
1746− },
1747− {
1748− "name": "pablodz",
1749− "id": 28235457,
1750− "comment_id": 4435307961,
1751− "created_at": "2026-05-12T22:25:09Z",
1752− "repoId": 987670088,
1753− "pullRequestNo": 2892
1754− },
1755− {
1756− "name": "akhenakh",
1757− "id": 218430,
1758− "comment_id": 4446905473,
1759− "created_at": "2026-05-14T02:28:13Z",
1760− "repoId": 987670088,
1761− "pullRequestNo": 2912
1762− },
1763− {
1764− "name": "leonardoaraujosantos",
1765− "id": 898383,
1766− "comment_id": 3166308642,
1767− "created_at": "2025-08-08T01:40:17Z",
1768− "repoId": 987670088,
1769− "pullRequestNo": 644
1770− },
1771− {
1772− "name": "yookibooki",
1773− "id": 61198899,
1774− "comment_id": 4459665029,
1775− "created_at": "2026-05-15T12:16:26Z",
1776− "repoId": 987670088,
1777− "pullRequestNo": 2922
1778− },
1779− {
1780− "name": "CatMe0w",
1781− "id": 7774491,
1782− "comment_id": 4461676513,
1783− "created_at": "2026-05-15T16:58:04Z",
1784− "repoId": 987670088,
1785− "pullRequestNo": 2925
1786− },
1787− {
1788− "name": "Broderick-Westrope",
1789− "id": 55474351,
1790− "comment_id": 4469173328,
1791− "created_at": "2026-05-17T03:35:13Z",
1792− "repoId": 987670088,
1793− "pullRequestNo": 2937
1794− },
1795− {
1796− "name": "processtrader",
1797− "id": 232431073,
1798− "comment_id": 4480941961,
1799− "created_at": "2026-05-18T18:58:31Z",
1800− "repoId": 987670088,
1801− "pullRequestNo": 2950
1802− },
1803− {
1804− "name": "dcu",
1805− "id": 73729,
1806− "comment_id": 4484181213,
1807− "created_at": "2026-05-19T03:37:32Z",
1808− "repoId": 987670088,
1809− "pullRequestNo": 2954
1810− },
1811− {
1812− "name": "mei2jun1",
1813− "id": 285962643,
1814− "comment_id": 4495440988,
1815− "created_at": "2026-05-20T06:53:43Z",
1816− "repoId": 987670088,
1817− "pullRequestNo": 2964
1818− },
1819− {
1820− "name": "g2mt",
1821− "id": 166577174,
1822− "comment_id": 4513096006,
1823− "created_at": "2026-05-21T21:56:14Z",
1824− "repoId": 987670088,
1825− "pullRequestNo": 2979
1826− },
1827− {
1828− "name": "Ricardo-M-L",
1829− "id": 69202550,
1830− "comment_id": 4514494248,
1831− "created_at": "2026-05-22T02:37:08Z",
1832− "repoId": 987670088,
1833− "pullRequestNo": 2847
1834− },
1835− {
1836− "name": "Muttaqin86",
1837− "id": 69788027,
1838− "comment_id": 4520181780,
1839− "created_at": "2026-05-22T15:46:32Z",
1840− "repoId": 987670088,
1841− "pullRequestNo": 2984
1842− },
1843− {
1844− "name": "officialasishkumar",
1845− "id": 87874775,
1846− "comment_id": 4527874300,
1847− "created_at": "2026-05-24T08:44:14Z",
1848− "repoId": 987670088,
1849− "pullRequestNo": 2995
1850− },
1851− {
1852− "name": "yhyu13",
1853− "id": 19365678,
1854− "comment_id": 4528076561,
1855− "created_at": "2026-05-24T10:19:27Z",
1856− "repoId": 987670088,
1857− "pullRequestNo": 2996
1858− },
1859− {
1860− "name": "xulongzhe",
1861− "id": 10559793,
1862− "comment_id": 4569454380,
1863− "created_at": "2026-05-29T00:39:36Z",
1864− "repoId": 987670088,
1865− "pullRequestNo": 3036
1866− },
1867− {
1868− "name": "ardi1s",
1869− "id": 200318875,
1870− "comment_id": 4589172224,
1871− "created_at": "2026-06-01T02:48:53Z",
1872− "repoId": 987670088,
1873− "pullRequestNo": 3049
1874− },
1875− {
1876− "name": "cak3ninja",
1877− "id": 4338875,
1878− "comment_id": 4596570813,
1879− "created_at": "2026-06-01T21:14:16Z",
1880− "repoId": 987670088,
1881− "pullRequestNo": 3059
1882− },
1883− {
1884− "name": "GroovyCarrot",
1885− "id": 5589906,
1886− "comment_id": 4623915928,
1887− "created_at": "2026-06-04T16:01:30Z",
1888− "repoId": 987670088,
1889− "pullRequestNo": 3076
1890− },
1891− {
1892− "name": "CnsMaple",
1893− "id": 92523839,
1894− "comment_id": 4628808493,
1895− "created_at": "2026-06-05T06:24:00Z",
1896− "repoId": 987670088,
1897− "pullRequestNo": 3080
1898− },
1899− {
1900− "name": "yuseferi",
1901− "id": 1736832,
1902− "comment_id": 4548802420,
1903− "created_at": "2026-05-26T21:00:36Z",
1904− "repoId": 987670088,
1905− "pullRequestNo": 3019
1906− },
1907− {
1908− "name": "gmit3",
1909− "id": 26192089,
1910− "comment_id": 4651029942,
1911− "created_at": "2026-06-08T16:18:06Z",
1912− "repoId": 987670088,
1913− "pullRequestNo": 3096
1914− },
1915− {
1916− "name": "brianjlandau",
1917− "id": 3122,
1918− "comment_id": 4654867087,
1919− "created_at": "2026-06-09T00:37:02Z",
1920− "repoId": 987670088,
1921− "pullRequestNo": 3098
1922− },
1923− {
1924− "name": "kypkk",
1925− "id": 68454243,
1926− "comment_id": 4687904764,
1927− "created_at": "2026-06-12T05:55:06Z",
1928− "repoId": 987670088,
1929− "pullRequestNo": 3111
1930− },
1931− {
1932− "name": "warmjademe",
1933− "id": 257661268,
1934− "comment_id": 4720070206,
1935− "created_at": "2026-06-16T14:48:33Z",
1936− "repoId": 987670088,
1937− "pullRequestNo": 3131
1938− },
1939− {
1940− "name": "warmjademe",
1941− "id": 257661268,
1942− "comment_id": 4720177856,
1943− "created_at": "2026-06-16T14:58:33Z",
1944− "repoId": 987670088,
1945− "pullRequestNo": 3131
1946− },
1947− {
1948− "name": "jialudev",
1949− "id": 39230796,
1950− "comment_id": 4725593255,
1951− "created_at": "2026-06-17T03:26:00Z",
1952− "repoId": 987670088,
1953− "pullRequestNo": 3137
1954− },
1955− {
1956− "name": "knight110001",
1957− "id": 21118983,
1958− "comment_id": 4741392218,
1959− "created_at": "2026-06-18T11:16:02Z",
1960− "repoId": 987670088,
1961− "pullRequestNo": 3140
1962− },
1963− {
1964− "name": "ken-jo",
1965− "id": 42824840,
1966− "comment_id": 4755333253,
1967− "created_at": "2026-06-19T22:56:55Z",
1968− "repoId": 987670088,
1969− "pullRequestNo": 3158
1970− },
1971− {
1972− "name": "xorangekiller",
1973− "id": 5561926,
1974− "comment_id": 4758885426,
1975− "created_at": "2026-06-20T16:00:01Z",
1976− "repoId": 987670088,
1977− "pullRequestNo": 3163
1978− },
1979− {
1980− "name": "sithglan",
1981− "id": 1595655,
1982− "comment_id": 4761251782,
1983− "created_at": "2026-06-21T07:28:19Z",
1984− "repoId": 987670088,
1985− "pullRequestNo": 3168
1986− },
1987− {
1988− "name": "macro-ss",
1989− "id": 59944291,
1990− "comment_id": 4729268228,
1991− "created_at": "2026-06-17T11:09:03Z",
1992− "repoId": 987670088,
1993− "pullRequestNo": 3140
1994− },
1995− {
1996− "name": "andrinoff",
1997− "id": 175145001,
1998− "comment_id": 4772633817,
1999− "created_at": "2026-06-22T20:13:54Z",
2000− "repoId": 987670088,
2001− "pullRequestNo": 3184
2002− },
2003− {
2004− "name": "calyptobai",
2005− "id": 111788964,
2006− "comment_id": 4774213287,
2007− "created_at": "2026-06-22T23:56:09Z",
2008− "repoId": 987670088,
2009− "pullRequestNo": 3189
2010− },
2011− {
2012− "name": "truffle-dev",
2013− "id": 260125384,
2014− "comment_id": 4783906418,
2015− "created_at": "2026-06-23T22:07:28Z",
2016− "repoId": 987670088,
2017− "pullRequestNo": 3195
2018− },
2019− {
2020− "name": "chardoncs",
2021− "id": 44740171,
2022− "comment_id": 4786221902,
2023− "created_at": "2026-06-24T05:36:39Z",
2024− "repoId": 987670088,
2025− "pullRequestNo": 3197
2026− },
2027− {
2028− "name": "notno",
2029− "id": 3149184,
2030− "comment_id": 4793889316,
2031− "created_at": "2026-06-24T21:37:51Z",
2032− "repoId": 987670088,
2033− "pullRequestNo": 3202
2034− },
2035− {
2036− "name": "vismaytiwari",
2037− "id": 89745751,
2038− "comment_id": 4797847556,
2039− "created_at": "2026-06-25T09:38:55Z",
2040− "repoId": 987670088,
2041− "pullRequestNo": 3205
2042− },
2043− {
2044− "name": "feizhuzheng",
2045− "id": 130743669,
2046− "comment_id": 4809880810,
2047− "created_at": "2026-06-26T13:09:43Z",
2048− "repoId": 987670088,
2049− "pullRequestNo": 3211
2050− },
2051− {
2052− "name": "syf2211",
2053− "id": 132282304,
2054− "comment_id": 4817246953,
2055− "created_at": "2026-06-27T11:44:54Z",
2056− "repoId": 987670088,
2057− "pullRequestNo": 3221
2058− },
2059− {
2060− "name": "EduardF1",
2061− "id": 50618110,
2062− "comment_id": 4818319813,
2063− "created_at": "2026-06-27T14:15:50Z",
2064− "repoId": 987670088,
2065− "pullRequestNo": 3133
2066− },
2067− {
2068− "name": "sablea",
2069− "id": 52388727,
2070− "comment_id": 4851979164,
2071− "created_at": "2026-07-01T08:13:03Z",
2072− "repoId": 987670088,
2073− "pullRequestNo": 3235
2074− },
2075− {
2076− "name": "Osamaali313",
2077− "id": 86572800,
2078− "comment_id": 4870561813,
2079− "created_at": "2026-07-02T21:19:15Z",
2080− "repoId": 987670088,
2081− "pullRequestNo": 3244
2082− },
2083− {
2084− "name": "lockp111",
2085− "id": 28383475,
2086− "comment_id": 4878248994,
2087− "created_at": "2026-07-03T17:12:26Z",
2088− "repoId": 987670088,
2089− "pullRequestNo": 3247
2090− },
2091− {
2092− "name": "TheRAWagent",
2093− "id": 77039476,
2094− "comment_id": 4879276761,
2095− "created_at": "2026-07-03T20:52:00Z",
2096− "repoId": 987670088,
2097− "pullRequestNo": 3251
20981738 }
20991739 ]
21001740}
.github/workflows/build.yml+2−2
@@ -18,10 +18,10 @@ jobs:
1818 os: [ubuntu-latest, macos-latest, windows-latest]
1919 runs-on: ${{ matrix.os }}
2020 steps:
21− - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
21+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2222 with:
2323 persist-credentials: false
24− - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
24+ - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
2525 with:
2626 go-version-file: go.mod
2727 - run: go mod tidy
.github/workflows/labeler.yml+1−1
@@ -14,7 +14,6 @@ on:
1414
1515permissions:
1616 issues: write
17− pull-requests: write
1817 contents: read
1918
2019jobs:
@@ -27,4 +26,5 @@ jobs:
2726 enable-versioned-regex: 0
2827 include-title: 1
2928 include-body: 0
29+ repo-token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
3030 issue-number: ${{ github.event.inputs.issue-number || github.event.issue.number || github.event.pull_request.number }}
.github/workflows/lint.yml+1−1
@@ -9,5 +9,5 @@ jobs:
99 uses: charmbracelet/meta/.github/workflows/lint.yml@main
1010 with:
1111 golangci_path: .golangci.yml
12− golangci_version: v2.11
12+ golangci_version: v2.10
1313 timeout: 10m
.github/workflows/nightly.yml+1−1
@@ -11,7 +11,7 @@ jobs:
1111 outputs:
1212 should_run: ${{ steps.check.outputs.should_run }}
1313 steps:
14− - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
14+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
1515 with:
1616 fetch-depth: 1
1717 - id: check
.github/workflows/schema-update.yml+3−4
@@ -6,21 +6,20 @@ on:
66 paths:
77 - "internal/config/**"
88 - "internal/agent/hyper/**"
9− workflow_dispatch:
109
1110jobs:
1211 update-schema:
1312 runs-on: ubuntu-latest
1413 steps:
15− - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
14+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
1615 with:
1716 token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
18− - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
17+ - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
1918 with:
2019 go-version-file: go.mod
2120 - run: go run . schema > ./schema.json
2221 - run: go generate ./internal/agent/hyper/...
23− - uses: stefanzweifel/git-auto-commit-action@4a55954c782fc1ea30b9056cd3e7a2b40ca8887d # v5
22+ - uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # v5
2423 with:
2524 commit_message: "chore: auto-update files"
2625 branch: main
.github/workflows/security.yml+10−10
@@ -27,14 +27,14 @@ jobs:
2727 pull-requests: read
2828 security-events: write
2929 steps:
30− - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
30+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
3131 with:
3232 persist-credentials: false
33− - uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
33+ - uses: github/codeql-action/init@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
3434 with:
3535 languages: ${{ matrix.language }}
36− - uses: github/codeql-action/autobuild@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
37− - uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
36+ - uses: github/codeql-action/autobuild@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
37+ - uses: github/codeql-action/analyze@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
3838
3939 grype:
4040 runs-on: ubuntu-latest
@@ -43,7 +43,7 @@ jobs:
4343 actions: read
4444 contents: read
4545 steps:
46− - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
46+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
4747 with:
4848 persist-credentials: false
4949 - uses: anchore/scan-action@e1165082ffb1fe366ebaf02d8526e7c4989ea9d2 # v7.4.0
@@ -52,7 +52,7 @@ jobs:
5252 path: "."
5353 fail-build: true
5454 severity-cutoff: critical
55− - uses: github/codeql-action/upload-sarif@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
55+ - uses: github/codeql-action/upload-sarif@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
5656 with:
5757 sarif_file: ${{ steps.scan.outputs.sarif }}
5858
@@ -62,10 +62,10 @@ jobs:
6262 security-events: write
6363 contents: read
6464 steps:
65− - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
65+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
6666 with:
6767 persist-credentials: false
68− - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
68+ - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
6969 with:
7070 go-version: stable
7171 - name: Install govulncheck
@@ -73,7 +73,7 @@ jobs:
7373 - name: Run govulncheck
7474 run: |
7575 govulncheck -C . -format sarif ./... > results.sarif
76− - uses: github/codeql-action/upload-sarif@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
76+ - uses: github/codeql-action/upload-sarif@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
7777 with:
7878 sarif_file: results.sarif
7979
@@ -83,7 +83,7 @@ jobs:
8383 permissions:
8484 contents: read
8585 steps:
86− - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
86+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
8787 with:
8888 persist-credentials: false
8989 - uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0
.github/workflows/snapshot.yml+3−3
@@ -18,14 +18,14 @@ jobs:
1818 # Use our own large runners with more CPU and RAM for faster builds
1919 group: releasers
2020 steps:
21− - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
21+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2222 with:
2323 fetch-depth: 0
2424 persist-credentials: false
25− - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
25+ - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
2626 with:
2727 go-version-file: go.mod
28− - uses: goreleaser/goreleaser-action@f06c13b6b1a9625abc9e6e439d9c05a8f2190e94 # v7.2.3
28+ - uses: goreleaser/goreleaser-action@1a80836c5c9d9e5755a25cb59ec6f45a3b5f41a8 # v7.2.1
2929 with:
3030 version: "nightly"
3131 distribution: goreleaser-pro
.gitignore−1
@@ -44,7 +44,6 @@ Thumbs.db
4444
4545# Nix/direnv
4646.direnv/
47−/result
4847
4948**/.crush/**
5049
.golangci.yml+4−16
@@ -2,7 +2,6 @@ version: "2"
22linters:
33 enable:
44 - bodyclose
5− - errcheck
65 # - exhaustive
76 # - goconst
87 # - godot
@@ -10,7 +9,6 @@ linters:
109 # - gomoddirectives
1110 - goprintffuncname
1211 # - gosec
13− - ineffassign
1412 - misspell
1513 # - nakedret
1614 # - nestif
@@ -25,30 +23,20 @@ linters:
2523 - tparallel
2624 # - unconvert
2725 # - unparam
28− - unused
2926 - whitespace
3027 # - wrapcheck
28+ disable:
29+ - errcheck
30+ - ineffassign
31+ - unused
3132 exclusions:
3233 generated: lax
3334 presets:
3435 - common-false-positives
35− # Ignores the idiomatic-to-drop error family (*Close, *Flush,
36− # Fprint*, os.Remove/RemoveAll, os.Setenv, stdout/stderr writes) so
37− # errcheck only flags genuinely meaningful dropped errors.
38− - std-error-handling
3936 rules:
40− # Dropped errors in tests (setup writes, httptest encoders) are
41− # low-signal — test failures surface them anyway.
42− - path: _test\.go
43− linters:
44− - errcheck
4537 - text: '(slog|log)\.\w+'
4638 linters:
4739 - noctx
48− - path: internal/shell/run.go
49− text: "SA1019.*interp.ExecHandler"
50− linters:
51− - staticcheck
5240issues:
5341 max-issues-per-linter: 0
5442 max-same-issues: 0
AGENTS.md−40
@@ -181,43 +181,3 @@ func TestYourFunction(t *testing.T) {
181181
182182Anytime you need to work on the TUI, read `internal/ui/AGENTS.md` before
183183starting work.
184−
185−## Styling System
186−
187−The styling system lives in `internal/ui/styles/` and is organized into
188−three layers:
189−
190−- **`quickstyle.go`**: The stable base theme builder. `quickStyle(opts)`
191− constructs a `Styles` struct from `quickStyleOpts` — a palette of
192− design tokens (primary, secondary, fgBase, bgBase, success, error, etc.).
193− `quickStyle` must be fully token-driven: never hardcode specific
194− `charmtone.*` colors here (except Chroma syntax highlighting, which is
195− pending tokenization). This lets any theme reuse the base without
196− inheriting Charmtone-specific colors.
197−- **`themes.go`**: Defines concrete themes. Each theme function (e.g.
198− `CharmtonePantera`) calls `quickStyle` with its palette, then applies
199− theme-specific overrides as needed.
200−- **`styles.go`**: Defines the `Styles` struct and its documentation —
201− the shape of what `quickStyle` produces.
202−
203−**Adding theme-specific overrides**: When a style genuinely needs a
204−color that doesn't fit the token model (e.g. the bang prompt uses
205−Salt/Hazy/Larple), keep `quickStyle` on the closest semantic token and
206−override only the differing colors in the theme function:
207−
208−```go
209−func CharmtonePantera() Styles {
210− s := quickStyle(quickStyleOpts{ /* palette */ })
211−
212− // Override only the colors that differ from the token defaults.
213− s.Editor.PromptBangIconFocused = s.Editor.PromptBangIconFocused.
214− Foreground(charmtone.Salt).
215− Background(charmtone.Hazy)
216−
217− return s
218−}
219−```
220−
221−**Adding a new theme**: Add a function in `themes.go` that returns the
222−result of `quickStyle` with a `quickStyleOpts` palette (plus any needed
223−overrides), then wire it into `ThemeForProvider`.
README.md+19−133
@@ -1,8 +1,5 @@
11# Crush
22
3−> [!NOTE]
4−> This is a personal fork of [charmbracelet/crush](https://github.com/charmbracelet/crush) with UI/UX tweaks and performance improvements.
5−
63<p align="center">
74 <a href="https://stuff.charm.sh/crush/charm-crush.png"><img width="450" alt="Charm Crush Logo" src="https://github.com/user-attachments/assets/cf8ca3ce-8b02-43f0-9d0f-5a331488da4b" /></a><br />
85 <a href="https://github.com/charmbracelet/crush/releases"><img src="https://img.shields.io/github/release/charmbracelet/crush" alt="Latest Release"></a>
@@ -196,8 +193,6 @@ That said, you can also set environment variables for preferred providers.
196193| `CEREBRAS_API_KEY` | Cerebras |
197194| `OPENROUTER_API_KEY` | OpenRouter |
198195| `IONET_API_KEY` | io.net |
199−| `ALIBABA_SINGAPORE_API_KEY` | Alibaba (Singapore) |
200−| `ALIBABA_US_API_KEY` | Alibaba (United States) |
201196| `GROQ_API_KEY` | Groq |
202197| `AVIAN_API_KEY` | Avian |
203198| `OPENCODE_API_KEY` | OpenCode Zen & Go |
@@ -211,7 +206,6 @@ That said, you can also set environment variables for preferred providers.
211206| `AZURE_OPENAI_API_ENDPOINT` | Azure OpenAI models |
212207| `AZURE_OPENAI_API_KEY` | Azure OpenAI models (optional when using Entra ID) |
213208| `AZURE_OPENAI_API_VERSION` | Azure OpenAI models |
214−| `MOONSHOT_API_KEY` | Moonshot |
215209
216210### Subscriptions
217211
@@ -373,67 +367,6 @@ which do expand.
373367Crush has preliminary support for hooks. For details, see
374368[the hook guide](./docs/hooks/).
375369
376−### Sharing a workspace across clients
377−
378−When Crush is run against a shared backend (for example two TUIs talking to
379−the same `crush serve`), clients are grouped into **workspaces** keyed by
380−their resolved `--cwd`. Two clients with the same `--cwd` join the same
381−underlying workspace, so they share the session list, message history,
382−permission queue, LSP, and MCP state.
383−
384−Joining is implicit: pointing a second client at the same working directory
385−attaches it to the existing workspace. Each new invocation, however, starts
386−in its own fresh session by default. To pick up the conversation another
387−client already has open, use the session manager (the session picker) and
388−select it. Sessions surface two signals there:
389−
390−- `IsBusy` is set while an agent turn is in flight for that session.
391−- `AttachedClients` reports how many clients are currently viewing it.
392−
393−A non-zero `AttachedClients` (often combined with `IsBusy`) is the cue that a
394−session is "in progress" on another client and joining it will mirror that
395−view live.
396−
397−The first client to create a workspace fixes its process-wide flags. In
398−particular, `--yolo` and `--debug` follow a **first-wins** rule: later
399−clients that arrive at the same `--cwd` with different values for those
400−flags do not change the running workspace. A debug log line is emitted
401−recording the mismatch, and the workspace keeps the flags it was created
402−with.
403−
404−A workspace lives as long as at least one client has an SSE event stream
405−open against it. When the last stream disconnects, the workspace is torn
406−down. There is a short grace window right after `POST /v1/workspaces` so a
407−client that has created the workspace but not yet opened its event stream
408−does not get reaped before it can attach.
409−
410−### Global context files
411−
412−Crush automatically includes two files for cross-project instructions.
413−
414−- `~/.config/crush/CRUSH.md`: Crush-specific rules that would confuse other
415− agentic coding tools. If you only use Crush, this is the only one you need to
416− edit.
417−- `~/.config/AGENTS.md`: generic instructions that other coding tools might
418− read. Avoid referring to Crush-specific features or workflows here. You
419− probably only care about this if you use multiple agentic coding tools and
420− want to share instructions between them.
421−
422−You can customize these paths using the `global_context_paths` option in your
423−configuration:
424−
425−```jsonc
426−{
427− "$schema": "https://charm.land/crush.json",
428− "options": {
429− "global_context_paths": [
430− "~/path/to/custom/context/file.md",
431− "/full/path/to/folder/of/files/" // recursively load all .md files in folder
432− ]
433− }
434−}
435−```
436−
437370### Ignoring Files
438371
439372Crush respects `.gitignore` files by default, but you can also create a
@@ -512,8 +445,6 @@ The global paths we looks for skills are:
512445* `$CRUSH_SKILLS_DIR`
513446* `$XDG_CONFIG_HOME/agents/skills` or `~/.config/agents/skills/`
514447* `$XDG_CONFIG_HOME/crush/skills` or `~/.config/crush/skills/`
515−* `~/.agents/skills/`
516−* `~/.claude/skills/`
517448* On Windows, we _also_ look at
518449 * `%LOCALAPPDATA%\agents\skills\` or `%USERPROFILE%\AppData\Local\agents\skills\`
519450 * `%LOCALAPPDATA%\crush\skills\` or `%USERPROFILE%\AppData\Local\crush\skills\`
@@ -557,37 +488,6 @@ git clone https://github.com/anthropics/skills.git _temp
557488mv _temp/skills/* . ; rm -r -force _temp
558489```
559490
560−#### User-Invocable Skills
561−
562−Skills can be made invocable as commands from the commands palette (Ctrl+P). Add `user-invocable: true` to the skill's YAML frontmatter:
563−
564−```yaml
565−---
566−name: my-skill
567−description: A skill that can be invoked as a command.
568−user-invocable: true
569−---
570−```
571−
572−User-invocable skills appear in the commands palette with a `user:` or `project:` prefix:
573−- Skills from global directories show as `user:skill-name`
574−- Skills from project directories show as `project:skill-name`
575−
576−When invoked, the skill's instructions are loaded into the conversation context.
577−
578−To prevent the model from auto-triggering a skill (while still allowing user invocation), add `disable-model-invocation: true`:
579−
580−```yaml
581−---
582−name: my-skill
583−description: Only invocable by users, not the model.
584−user-invocable: true
585−disable-model-invocation: true
586−---
587−```
588−
589−Skills with `disable-model-invocation` won't appear in the model's available skills list but can still be invoked manually by users.
590−
591491### Desktop notifications
592492
593493Crush sends desktop notifications when a tool call requires permission and when
@@ -775,10 +675,9 @@ To add specific models to the configuration, configure as such:
775675
776676### Local Models
777677
778−Crush can auto-discovers models from local providers. Add a custom provider
779−with `type` set to `llamacpp`, `omlx`, `lmstudio`, `litellm`, or `ollama`
780−and leave out the models list. Crush will populate the model list
781−automatically.
678+Local models can also be configured via OpenAI-compatible API. Here are two common examples:
679+
680+#### Ollama
782681
783682```json
784683{
@@ -786,50 +685,37 @@ automatically.
786685 "ollama": {
787686 "name": "Ollama",
788687 "base_url": "http://localhost:11434/v1/",
789− "type": "ollama"
790− }
791− }
792−}
793−```
794−
795−For llama.cpp (`llama-server`), point at the server's base URL:
796−
797−```json
798−{
799− "providers": {
800− "llamacpp": {
801− "name": "llama.cpp",
802− "base_url": "http://localhost:2222",
803− "type": "llamacpp"
688+ "type": "openai-compat",
689+ "models": [
690+ {
691+ "name": "Qwen 3 30B",
692+ "id": "qwen3:30b",
693+ "context_window": 256000,
694+ "default_max_tokens": 20000
695+ }
696+ ]
804697 }
805698 }
806699}
807700```
808701
809−#### Manual Model Configuration
810−
811−You can still list models explicitly. User-defined models always take
812−precedence over discovered ones, and any fields you set won't be overwritten
813−by auto-discovery. Auto discovery will run if the model list is empty for any
814−`openai-compat` provider or if you pass `"discover_models": true` it will merge
815− the found models with your hand configured ones.
702+#### LM Studio
816703
817704```json
818705{
819706 "providers": {
820− "ollama": {
821− "name": "Ollama",
822− "base_url": "http://localhost:11434/v1/",
823− "type": "ollama",
707+ "lmstudio": {
708+ "name": "LM Studio",
709+ "base_url": "http://localhost:1234/v1/",
710+ "type": "openai-compat",
824711 "models": [
825712 {
826713 "name": "Qwen 3 30B",
827− "id": "qwen3:30b",
714+ "id": "qwen/qwen3-30b-a3b-2507",
828715 "context_window": 256000,
829716 "default_max_tokens": 20000
830717 }
831− ],
832− "discover_models": true
718+ ]
833719 }
834720 }
835721}
docs/hooks/README.md−5
@@ -139,7 +139,6 @@ and project-level, with project level hooks taking precedence.
139139 "hooks": {
140140 "PreToolUse": [
141141 {
142− "name": "no-rm-rf", // friendly name shown in the TUI
143142 "matcher": "bash", // regex tested against the tool name
144143 "command": "./hooks/my-hot-hook.sh", // the path to the hook
145144 "timeout": 10, // in seconds; default 30
@@ -601,10 +600,6 @@ Each entry under a `hooks.<EventName>` array:
601600
602601```jsonc
603602{
604− // string. Optional. Friendly display name shown in the TUI. Falls back to
605− // command when omitted.
606− "name": "no-rm-rf",
607−
608603 // string. Optional. Regex tested against the tool name. Omit to match all.
609604 "matcher": "^bash$",
610605
flake.lock+4−3
@@ -20,15 +20,16 @@
2020 },
2121 "nixpkgs": {
2222 "locked": {
23− "lastModified": 1782964654,
24− "narHash": "sha256-oqyac50OyRdni5ZK9H7ZuAJoR3LzgsOdUcbBlUsk9lg=",
23+ "lastModified": 1775423009,
24+ "narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
2525 "owner": "NixOS",
2626 "repo": "nixpkgs",
27− "rev": "3130a1cf8f7c794ea5a4760c3fa4c745d64ec269",
27+ "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
2828 "type": "github"
2929 },
3030 "original": {
3131 "owner": "NixOS",
32+ "ref": "nixos-unstable",
3233 "repo": "nixpkgs",
3334 "type": "github"
3435 }
flake.nix+1−32
@@ -2,7 +2,7 @@
22 description = "Crush development environment";
33
44 inputs = {
5− nixpkgs.url = "github:NixOS/nixpkgs";
5+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
66 flake-utils.url = "github:numtide/flake-utils";
77 };
88
@@ -14,38 +14,7 @@
1414 flake-utils.lib.eachDefaultSystem (
1515 system: let
1616 pkgs = nixpkgs.legacyPackages.${system};
17− version = "devel";
1817 in {
19− packages.default = pkgs.buildGoModule {
20− pname = "crush";
21− inherit version;
22−
23− src = ./.;
24−
25− vendorHash = null;
26−
27− # Match the Go toolchain used in the dev shell.
28− go = pkgs.go_1_26;
29−
30− env.CGO_ENABLED = 0;
31−
32− ldflags = [
33− "-s"
34− "-w"
35− "-X github.com/charmbracelet/crush/internal/version.Version=${version}"
36− ];
37−
38− # The test suite requires network access and external tools.
39− doCheck = false;
40−
41− meta = {
42− description = "Terminal-based AI coding assistant";
43− homepage = "https://github.com/charmbracelet/crush";
44− license = pkgs.lib.licenses.mit;
45− mainProgram = "crush";
46− };
47− };
48−
4918 devShells.default = pkgs.mkShell {
5019 buildInputs = with pkgs; [
5120 # Go toolchain
go.mod+69−70
@@ -1,37 +1,39 @@
11module github.com/charmbracelet/crush
22
3−go 1.26.4
3+go 1.26.3
44
55require (
6− charm.land/bubbles/v2 v2.1.1
7− charm.land/bubbletea/v2 v2.0.8
8− charm.land/catwalk v0.49.0
6+ charm.land/bubbles/v2 v2.1.0
7+ charm.land/bubbletea/v2 v2.0.6
8+ charm.land/catwalk v0.39.8
99 charm.land/fang/v2 v2.0.1
10− charm.land/fantasy v0.35.0
11− charm.land/glamour/v2 v2.0.1
12− charm.land/lipgloss/v2 v2.0.5
10+ charm.land/fantasy v0.23.1
11+ charm.land/glamour/v2 v2.0.0
12+ charm.land/lipgloss/v2 v2.0.3
1313 charm.land/log/v2 v2.0.0
1414 charm.land/x/vcr v0.1.1
1515 github.com/JohannesKaufmann/html-to-markdown v1.6.0
1616 github.com/MakeNowJust/heredoc v1.0.0
1717 github.com/Microsoft/go-winio v0.6.2
1818 github.com/PuerkitoBio/goquery v1.12.0
19− github.com/alecthomas/chroma/v2 v2.27.0
19+ github.com/alecthomas/chroma/v2 v2.24.1
20+ github.com/atotto/clipboard v0.1.4
21+ github.com/aymanbagabas/go-nativeclipboard v0.1.3
2022 github.com/aymanbagabas/go-udiff v0.4.1
2123 github.com/bmatcuk/doublestar/v4 v4.10.0
2224 github.com/charlievieth/fastwalk v1.0.14
2325 github.com/charmbracelet/colorprofile v0.4.3
24− github.com/charmbracelet/openai-go v0.0.0-20260617131321-5e4b9c18c4be
25− github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7
26+ github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266
27+ github.com/charmbracelet/ultraviolet v0.0.0-20260416155717-489999b90468
2628 github.com/charmbracelet/x/ansi v0.11.7
2729 github.com/charmbracelet/x/editor v0.2.0
2830 github.com/charmbracelet/x/etag v0.2.0
29− github.com/charmbracelet/x/exp/charmtone v0.0.0-20260527151214-009e6338d40d
31+ github.com/charmbracelet/x/exp/charmtone v0.0.0-20260109001716-2fbdffcb221f
3032 github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f
3133 github.com/charmbracelet/x/exp/ordered v0.1.0
32− github.com/charmbracelet/x/exp/slice v0.0.0-20260622092256-25656177ba8e
34+ github.com/charmbracelet/x/exp/slice v0.0.0-20260422141420-a6cbdff8a7e2
3335 github.com/charmbracelet/x/exp/strings v0.1.0
34− github.com/charmbracelet/x/powernap v0.1.6
36+ github.com/charmbracelet/x/powernap v0.1.5
3537 github.com/charmbracelet/x/term v0.2.2
3638 github.com/clipperhouse/displaywidth v0.11.0
3739 github.com/clipperhouse/uax29/v2 v2.7.0
@@ -39,7 +41,7 @@ require (
3941 github.com/disintegration/imaging v1.6.2
4042 github.com/dustin/go-humanize v1.0.1
4143 github.com/gen2brain/beeep v0.11.2
42− github.com/go-git/go-git/v5 v5.19.1
44+ github.com/go-git/go-git/v5 v5.19.0
4345 github.com/google/uuid v1.6.0
4446 github.com/invopop/jsonschema v0.14.0
4547 github.com/itchyny/gojq v0.12.19
@@ -47,15 +49,15 @@ require (
4749 github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d
4850 github.com/lucasb-eyer/go-colorful v1.4.0
4951 github.com/mattn/go-isatty v0.0.22
50− github.com/modelcontextprotocol/go-sdk v1.6.1
51− github.com/ncruces/go-sqlite3 v0.35.1
52+ github.com/modelcontextprotocol/go-sdk v1.6.0
53+ github.com/ncruces/go-sqlite3 v0.34.1
5254 github.com/nxadm/tail v1.4.11
5355 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
54− github.com/posthog/posthog-go v1.17.5
55− github.com/pressly/goose/v3 v3.27.2
56− github.com/qjebbs/go-jsons v1.0.0-alpha.6
56+ github.com/posthog/posthog-go v1.12.5
57+ github.com/pressly/goose/v3 v3.27.1
58+ github.com/qjebbs/go-jsons v1.0.0-alpha.5
5759 github.com/rivo/uniseg v0.4.7
58− github.com/sahilm/fuzzy v0.1.3
60+ github.com/sahilm/fuzzy v0.1.2
5961 github.com/sourcegraph/jsonrpc2 v0.2.1
6062 github.com/spf13/cobra v1.10.2
6163 github.com/stretchr/testify v1.11.1
@@ -65,14 +67,13 @@ require (
6567 github.com/tidwall/sjson v1.2.5
6668 github.com/zeebo/xxh3 v1.1.0
6769 go.uber.org/goleak v1.3.0
68− golang.design/x/clipboard v0.8.0
69− golang.org/x/net v0.56.0
70− golang.org/x/sync v0.21.0
71− golang.org/x/sys v0.46.0
72− golang.org/x/text v0.38.0
70+ golang.org/x/net v0.54.0
71+ golang.org/x/sync v0.20.0
72+ golang.org/x/sys v0.44.0
73+ golang.org/x/text v0.37.0
7374 gopkg.in/natefinch/lumberjack.v2 v2.2.1
7475 gopkg.in/yaml.v3 v3.0.1
75− modernc.org/sqlite v1.53.0
76+ modernc.org/sqlite v1.50.1
7677 mvdan.cc/sh/moreinterp v0.0.0-20250902163504-3cf4fd5717a5
7778 mvdan.cc/sh/v3 v3.13.1
7879)
@@ -86,41 +87,40 @@ require (
8687 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect
8788 github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
8889 github.com/KyleBanks/depth v1.2.1 // indirect
89− github.com/andybalholm/brotli v1.2.1 // indirect
9090 github.com/andybalholm/cascadia v1.3.3 // indirect
91− github.com/atotto/clipboard v0.1.4 // indirect
92− github.com/aws/aws-sdk-go-v2 v1.42.0 // indirect
93− github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13 // indirect
94− github.com/aws/aws-sdk-go-v2/config v1.32.25 // indirect
95− github.com/aws/aws-sdk-go-v2/credentials v1.19.24 // indirect
96− github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 // indirect
97− github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 // indirect
98− github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 // indirect
99− github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 // indirect
100− github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 // indirect
101− github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 // indirect
102− github.com/aws/aws-sdk-go-v2/service/signin v1.2.0 // indirect
103− github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 // indirect
104− github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 // indirect
105− github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 // indirect
106− github.com/aws/smithy-go v1.27.3 // indirect
91+ github.com/aws/aws-sdk-go-v2 v1.41.7 // indirect
92+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 // indirect
93+ github.com/aws/aws-sdk-go-v2/config v1.32.17 // indirect
94+ github.com/aws/aws-sdk-go-v2/credentials v1.19.16 // indirect
95+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 // indirect
96+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 // indirect
97+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 // indirect
98+ github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 // indirect
99+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 // indirect
100+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 // indirect
101+ github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 // indirect
102+ github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 // indirect
103+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 // indirect
104+ github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 // indirect
105+ github.com/aws/smithy-go v1.25.1 // indirect
107106 github.com/aymerick/douceur v0.2.0 // indirect
108107 github.com/bahlo/generic-list-go v0.2.0 // indirect
109108 github.com/buger/jsonparser v1.1.2 // indirect
110109 github.com/cespare/xxhash/v2 v2.3.0 // indirect
111110 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab // indirect
111+ github.com/charmbracelet/x/json v0.2.0 // indirect
112112 github.com/charmbracelet/x/termios v0.1.1 // indirect
113113 github.com/charmbracelet/x/windows v0.2.2 // indirect
114114 github.com/cyphar/filepath-securejoin v0.6.1 // indirect
115115 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
116− github.com/dlclark/regexp2/v2 v2.2.1 // indirect
117− github.com/ebitengine/purego v0.10.1 // indirect
116+ github.com/dlclark/regexp2 v1.12.0 // indirect
117+ github.com/ebitengine/purego v0.10.0 // indirect
118118 github.com/esiqveland/notify v0.13.3 // indirect
119− github.com/felixge/httpsnoop v1.1.0 // indirect
119+ github.com/felixge/httpsnoop v1.0.4 // indirect
120120 github.com/fsnotify/fsnotify v1.9.0 // indirect
121121 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
122122 github.com/go-git/go-billy/v5 v5.9.0 // indirect
123− github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68 // indirect
123+ github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4 // indirect
124124 github.com/go-logfmt/logfmt v0.6.0 // indirect
125125 github.com/go-logr/logr v1.4.3 // indirect
126126 github.com/go-logr/stdr v1.2.2 // indirect
@@ -137,7 +137,7 @@ require (
137137 github.com/google/go-cmp v0.7.0 // indirect
138138 github.com/google/jsonschema-go v0.4.3 // indirect
139139 github.com/google/s2a-go v0.1.9 // indirect
140− github.com/googleapis/enterprise-certificate-proxy v0.3.17 // indirect
140+ github.com/googleapis/enterprise-certificate-proxy v0.3.15 // indirect
141141 github.com/googleapis/gax-go/v2 v2.22.0 // indirect
142142 github.com/gorilla/css v1.0.1 // indirect
143143 github.com/gorilla/websocket v1.5.3 // indirect
@@ -147,13 +147,15 @@ require (
147147 github.com/jackmordaunt/icns/v3 v3.0.1 // indirect
148148 github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
149149 github.com/josharian/intern v1.0.0 // indirect
150− github.com/kaptinlin/jsonpointer v0.4.26 // indirect
151− github.com/kaptinlin/jsonschema v0.9.2 // indirect
150+ github.com/kaptinlin/go-i18n v0.4.5 // indirect
151+ github.com/kaptinlin/jsonpointer v0.4.20 // indirect
152+ github.com/kaptinlin/jsonschema v0.7.13 // indirect
153+ github.com/kaptinlin/messageformat-go v0.6.0 // indirect
152154 github.com/klauspost/compress v1.18.6 // indirect
153155 github.com/klauspost/cpuid/v2 v2.3.0 // indirect
154156 github.com/klauspost/pgzip v1.2.6 // indirect
155157 github.com/mailru/easyjson v0.7.7 // indirect
156− github.com/mattn/go-runewidth v0.0.24 // indirect
158+ github.com/mattn/go-runewidth v0.0.23 // indirect
157159 github.com/mfridman/interpolate v0.0.2 // indirect
158160 github.com/microcosm-cc/bluemonday v1.0.27 // indirect
159161 github.com/mitchellh/mapstructure v1.5.0 // indirect
@@ -162,7 +164,7 @@ require (
162164 github.com/muesli/mango-cobra v1.2.0 // indirect
163165 github.com/muesli/mango-pflag v0.1.0 // indirect
164166 github.com/muesli/roff v0.1.0 // indirect
165− github.com/ncruces/go-sqlite3-wasm/v3 v3.1.35302 // indirect
167+ github.com/ncruces/go-sqlite3-wasm/v2 v2.2.35301 // indirect
166168 github.com/ncruces/go-strftime v1.0.0 // indirect
167169 github.com/ncruces/julianday v1.0.0 // indirect
168170 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
@@ -188,34 +190,31 @@ require (
188190 github.com/yuin/goldmark v1.7.8 // indirect
189191 github.com/yuin/goldmark-emoji v1.0.5 // indirect
190192 go.opentelemetry.io/auto/sdk v1.2.1 // indirect
191− go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 // indirect
192− go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect
193− go.opentelemetry.io/otel v1.44.0 // indirect
194− go.opentelemetry.io/otel/metric v1.44.0 // indirect
195− go.opentelemetry.io/otel/trace v1.44.0 // indirect
193+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect
194+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 // indirect
195+ go.opentelemetry.io/otel v1.43.0 // indirect
196+ go.opentelemetry.io/otel/metric v1.43.0 // indirect
197+ go.opentelemetry.io/otel/trace v1.43.0 // indirect
196198 go.uber.org/multierr v1.11.0 // indirect
197199 go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect
198− golang.design/x/x11 v0.2.0 // indirect
199− golang.org/x/crypto v0.53.0 // indirect
200+ golang.org/x/crypto v0.51.0 // indirect
200201 golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect
201− golang.org/x/exp/shiny v0.0.0-20250606033433-dcc06ee1d476 // indirect
202− golang.org/x/image v0.43.0 // indirect
203− golang.org/x/mobile v0.0.0-20250606033058-a2a15c67f36f // indirect
204− golang.org/x/mod v0.36.0 // indirect
202+ golang.org/x/image v0.38.0 // indirect
203+ golang.org/x/mod v0.35.0 // indirect
205204 golang.org/x/oauth2 v0.36.0 // indirect
206− golang.org/x/term v0.44.0 // indirect
205+ golang.org/x/term v0.43.0 // indirect
207206 golang.org/x/time v0.15.0 // indirect
208− golang.org/x/tools v0.45.0 // indirect
209− google.golang.org/api v0.286.0 // indirect
210− google.golang.org/genai v1.62.0 // indirect
211− google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d // indirect
212− google.golang.org/grpc v1.81.1 // indirect
207+ golang.org/x/tools v0.44.0 // indirect
208+ google.golang.org/api v0.277.0 // indirect
209+ google.golang.org/genai v1.55.0 // indirect
210+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 // indirect
211+ google.golang.org/grpc v1.80.0 // indirect
213212 google.golang.org/protobuf v1.36.11 // indirect
214213 gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect
215214 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
216215 gopkg.in/warnings.v0 v0.1.2 // indirect
217216 gopkg.in/yaml.v2 v2.4.0 // indirect
218− modernc.org/libc v1.73.4 // indirect
217+ modernc.org/libc v1.72.3 // indirect
219218 modernc.org/mathutil v1.7.1 // indirect
220219 modernc.org/memory v1.11.0 // indirect
221220)
go.sum+150−152
@@ -1,17 +1,17 @@
1−charm.land/bubbles/v2 v2.1.1 h1:7r55WzBxpo/R3z98hGmY7KKPd3ET6vsf0Fb9sDHOV60=
2−charm.land/bubbles/v2 v2.1.1/go.mod h1:GE6M31gaWZVXzGw73OeuTTgy4lX+OtkH0E5ymnNsHxo=
3−charm.land/bubbletea/v2 v2.0.8 h1:SxTJMhCAI3lbPmy4SgX5LWZ24AdINr4I6UEqzZvYJuY=
4−charm.land/bubbletea/v2 v2.0.8/go.mod h1:2SkdgoTXluXJHOUwAoRlRXF/28vklb1rFl6GcgV1/ss=
5−charm.land/catwalk v0.49.0 h1:pXcHh9H76VvwGqPYMZhJe5vRqMLpzGsv0anJArKw70g=
6−charm.land/catwalk v0.49.0/go.mod h1:bw6/oiChsa9Fkr8LgYn84KrbbJY2z1+m7Jmlmmv3B2A=
1+charm.land/bubbles/v2 v2.1.0 h1:YSnNh5cPYlYjPxRrzs5VEn3vwhtEn3jVGRBT3M7/I0g=
2+charm.land/bubbles/v2 v2.1.0/go.mod h1:l97h4hym2hvWBVfmJDtrEHHCtkIKeTEb3TTJ4ZOB3wY=
3+charm.land/bubbletea/v2 v2.0.6 h1:UHN/91OyuhaOFGSrBXQ/hMZD8IO1Uc4BvHlgHXL2WJo=
4+charm.land/bubbletea/v2 v2.0.6/go.mod h1:MH/D8ZLlN3op37vQvijKuU29g3rqTp+aQapURFonF9g=
5+charm.land/catwalk v0.39.8 h1:ssBxnHgtDPNt1afddn4So0BpO5F+xuV3Ka23+DWjFhE=
6+charm.land/catwalk v0.39.8/go.mod h1:LmMFJdRqF5F7qKa+xqD9SBq7tph7L98GU3ZFa1TxftA=
77charm.land/fang/v2 v2.0.1 h1:zQCM8JQJ1JnQX/66B5jlCYBUxL2as5JXQZ2KJ6EL0mY=
88charm.land/fang/v2 v2.0.1/go.mod h1:S1GmkpcvK+OB5w9caywUnJcsMew45Ot8FXqoz8ALrII=
9−charm.land/fantasy v0.35.0 h1:iFES7cnt3/o20T01+y2PDkHj5dHEWRFQH0vSXYzV8xo=
10−charm.land/fantasy v0.35.0/go.mod h1:rUqUhunz+c6k66L0hHd51CrXB3SSzPNKkwBrzIe6XnY=
11−charm.land/glamour/v2 v2.0.1 h1:xl+r00A4aJWU0z8fgwKd9fQQ4rsphqGUzuEiXZP5n+c=
12−charm.land/glamour/v2 v2.0.1/go.mod h1:jo9z8XqVKPeEFMVdvCRLGk++RyJ3CdUwgNr7EvXLw3k=
13−charm.land/lipgloss/v2 v2.0.5 h1:kbNxgeeUOYv5J0YdpxFjfvf3dFvqH8Aci4zB6xqFtrY=
14−charm.land/lipgloss/v2 v2.0.5/go.mod h1:9oqhxt4yxIMe6q5A4kHr44DremZk7J9UNh74GlWa5nc=
9+charm.land/fantasy v0.23.1 h1:FEn/4pUek70Ah+4EFK95j7w6BUYZ+K/Lc2cRFlhJIwI=
10+charm.land/fantasy v0.23.1/go.mod h1:3OBGzOZmimSfS0/qmPQM5UtxXrcbCb19DYd1Vsr/yOI=
11+charm.land/glamour/v2 v2.0.0 h1:IDBoqLEy7Hdpb9VOXN+khLP/XSxtJy1VsHuW/yF87+U=
12+charm.land/glamour/v2 v2.0.0/go.mod h1:kjq9WB0s8vuUYZNYey2jp4Lgd9f4cKdzAw88FZtpj/w=
13+charm.land/lipgloss/v2 v2.0.3 h1:yM2zJ4Cf5Y51b7RHIwioil4ApI/aypFXXVHSwlM6RzU=
14+charm.land/lipgloss/v2 v2.0.3/go.mod h1:7myLU9iG/3xluAWzpY/fSxYYHCgoKTie7laxk6ATwXA=
1515charm.land/log/v2 v2.0.0 h1:SY3Cey7ipx86/MBXQHwsguOT6X1exT94mmJRdzTNs+s=
1616charm.land/log/v2 v2.0.0/go.mod h1:c3cZSRqm20qUVVAR1WmS/7ab8bgha3C6G7DjPcaVZz0=
1717charm.land/x/vcr v0.1.1 h1:PXCFMUG0rPtyk35rhfzYCJEduOzWXCIbrXTFq4OF/9Q=
@@ -47,47 +47,47 @@ github.com/PuerkitoBio/goquery v1.12.0 h1:pAcL4g3WRXekcB9AU/y1mbKez2dbY2AajVhtkO
4747github.com/PuerkitoBio/goquery v1.12.0/go.mod h1:802ej+gV2y7bbIhOIoPY5sT183ZW0YFofScC4q/hIpQ=
4848github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
4949github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
50−github.com/alecthomas/chroma/v2 v2.27.0 h1:FodwmyOBgJULFYmDqibcp9pvfDLWdtPRh9v/r5BXYZs=
51−github.com/alecthomas/chroma/v2 v2.27.0/go.mod h1:NjJ3ciIgrqBNeIkWZ4e46nseoLDslxU1LmfCoL+wcY8=
50+github.com/alecthomas/chroma/v2 v2.24.1 h1:m5ffpfZbIb++k8AqFEKy9uVgY12xIQtBsQlc6DfZJQM=
51+github.com/alecthomas/chroma/v2 v2.24.1/go.mod h1:l+ohZ9xRXIbGe7cIW+YZgOGbvuVLjMps/FYN/CwuabI=
5252github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs=
5353github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
54−github.com/andybalholm/brotli v1.2.1 h1:R+f5xP285VArJDRgowrfb9DqL18yVK0gKAW/F+eTWro=
55−github.com/andybalholm/brotli v1.2.1/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
5654github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
5755github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
5856github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
5957github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
6058github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
61−github.com/aws/aws-sdk-go-v2 v1.42.0 h1:XvXMJTkFQtpBKIWZnmr9ZEOc2InWM2yldjXEJ/bymhA=
62−github.com/aws/aws-sdk-go-v2 v1.42.0/go.mod h1:27+ACypSLljLAEKsCYOmrjKh83vuTRkuAe9Uv/3A4bg=
63−github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13 h1:p1BBrg/Hhp6uK7zpejeI8QFXHJeC/mynzi04Sl03k9g=
64−github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13/go.mod h1:8cIfkE9MDhkRZGpQ22aV6/lkYeYSozpz16Smrs5x4Ls=
65−github.com/aws/aws-sdk-go-v2/config v1.32.25 h1:ACCejvStYoilgwrfegSt5ZntCbPrk52qfwyNcnl3omM=
66−github.com/aws/aws-sdk-go-v2/config v1.32.25/go.mod h1:LJyU8sDRbXUxFn8xMJIGP+v9QYYwveNLI8a/giAOiAs=
67−github.com/aws/aws-sdk-go-v2/credentials v1.19.24 h1:2hQqYCV9yqyePQ9o6dCrZc/zO8U3TwPr9mIKlZnPu/I=
68−github.com/aws/aws-sdk-go-v2/credentials v1.19.24/go.mod h1:IDwpACtwqHLISdzfwUUNq4P9DsB/h5BLg4FwJPNfqFY=
69−github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 h1:r6qZHbT+wxgWO/e9vYNUEtg7lv5+UN3pRqKhLXvnArg=
70−github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29/go.mod h1:QRnaRcTVGKPGRy8w78HMQtKUGRYcnMZAANATkeVA6Mo=
71−github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 h1:f3vKqSo13fhTYb+JEcXwXefZQE26I1FB5eTSniU67ko=
72−github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29/go.mod h1:MzoLFUArKGpGD+ukmPiTPG1X5x4o6M2kq4v2dr1FiEc=
73−github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 h1:RdwIf/CuUsvJX3RgJagbOyotl/cxoLY4xviKuE7p2GY=
74−github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29/go.mod h1:71wt8W2EgswdZy9Mf9KNnzxZ3TiZlv4caKghPktDOkA=
75−github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 h1:VTGy885W5DKBxWRUJbym9hytNaYzsyaPkCHGRRMAOhU=
76−github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30/go.mod h1:AS0HycUvJRFvTt613AYDOgO2jzw+00cVSMny8XB3yMY=
77−github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 h1:ZD2+BSw9vFsNlKYIasSNt3uDbjqqXIBcM13UJv/Lx2k=
78−github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12/go.mod h1:Ms4zlcVBbXbiP7EVLhl+lgjvA/a7YphqQ3Ih3174EmI=
79−github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 h1:DRebniUGZ2MqiiIVmQJ04vIXr918hubdHMnarSLEWyU=
80−github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29/go.mod h1:LfRkPCD8YHDM2E5eTkos2UpwYeZnBcVarTa8L59bJHA=
81−github.com/aws/aws-sdk-go-v2/service/signin v1.2.0 h1:3nXpRcFwRCW8n7HgO2QGy0Dc20eQNfBuUemGQhpF8m8=
82−github.com/aws/aws-sdk-go-v2/service/signin v1.2.0/go.mod h1:LxYujSTLPRlp2vTtcUO/+1ilrew8ytt6SvQyOgejzFQ=
83−github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 h1:ey1XLTYXb9PcLt4535632o5kCGXNXEhNb620Dqwuylo=
84−github.com/aws/aws-sdk-go-v2/service/sso v1.31.3/go.mod h1:Lk7PlmoTYryQmyBG0EXqj5BcUbj3whXdU2s3yGI3EAc=
85−github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 h1:yLr03zQE/5Eu5l3QU0Si+xMbLMbSDF2YXsigqXngs6g=
86−github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6/go.mod h1:Q5N6icH+KJZDLh+ESNwzdv6cZ6vLFF/egy3IOxWhmz4=
87−github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 h1:VrIhKRCSK1umelSgB9RghvA9RTUYeQffyAS5ApXehNI=
88−github.com/aws/aws-sdk-go-v2/service/sts v1.43.3/go.mod h1:r8wkDOuLaaMFqFiYAb8dGY2A3gJCOujMc6CFOVC4Zhc=
89−github.com/aws/smithy-go v1.27.3 h1:F3Zb497UhhskkfpJmfkXswyo+t0sh9OTBnIHjogWbVY=
90−github.com/aws/smithy-go v1.27.3/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
59+github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8=
60+github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc=
61+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 h1:gx1AwW1Iyk9Z9dD9F4akX5gnN3QZwUB20GGKH/I+Rho=
62+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10/go.mod h1:qqY157uZoqm5OXq/amuaBJyC9hgBCBQnsaWnPe905GY=
63+github.com/aws/aws-sdk-go-v2/config v1.32.17 h1:FpL4/758/diKwqbytU0prpuiu60fgXKUWCpDJtApclU=
64+github.com/aws/aws-sdk-go-v2/config v1.32.17/go.mod h1:OXqUMzgXytfoF9JaKkhrOYsyh72t9G+MJH8mMRaexOE=
65+github.com/aws/aws-sdk-go-v2/credentials v1.19.16 h1:r3RJBuU7X9ibt8RHbMjWE6y60QbKBiII6wSrXnapxSU=
66+github.com/aws/aws-sdk-go-v2/credentials v1.19.16/go.mod h1:6cx7zqDENJDbBIIWX6P8s0h6hqHC8Avbjh9Dseo27ug=
67+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 h1:UuSfcORqNSz/ey3VPRS8TcVH2Ikf0/sC+Hdj400QI6U=
68+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23/go.mod h1:+G/OSGiOFnSOkYloKj/9M35s74LgVAdJBSD5lsFfqKg=
69+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 h1:GpT/TrnBYuE5gan2cZbTtvP+JlHsutdmlV2YfEyNde0=
70+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23/go.mod h1:xYWD6BS9ywC5bS3sz9Xh04whO/hzK2plt2Zkyrp4JuA=
71+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 h1:bpd8vxhlQi2r1hiueOw02f/duEPTMK59Q4QMAoTTtTo=
72+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23/go.mod h1:15DfR2nw+CRHIk0tqNyifu3G1YdAOy68RftkhMDDwYk=
73+github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 h1:OQqn11BtaYv1WLUowvcA30MpzIu8Ti4pcLPIIyoKZrA=
74+github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24/go.mod h1:X5ZJyfwVrWA96GzPmUCWFQaEARPR7gCrpq2E92PJwAE=
75+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 h1:FLudkZLt5ci0ozzgkVo8BJGwvqNaZbTWb3UcucAateA=
76+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9/go.mod h1:w7wZ/s9qK7c8g4al+UyoF1Sp/Z45UwMGcqIzLWVQHWk=
77+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 h1:pbrxO/kuIwgEsOPLkaHu0O+m4fNgLU8B3vxQ+72jTPw=
78+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23/go.mod h1:/CMNUqoj46HpS3MNRDEDIwcgEnrtZlKRaHNaHxIFpNA=
79+github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VXopcumCOF1paFulHWZc=
80+github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI=
81+github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 h1:7byT8HUWrgoRp6sXjxtZwgOKfhss5fW6SkLBtqzgRoE=
82+github.com/aws/aws-sdk-go-v2/service/sso v1.30.17/go.mod h1:xNWknVi4Ezm1vg1QsB/5EWpAJURq22uqd38U8qKvOJc=
83+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 h1:+1Kl1zx6bWi4X7cKi3VYh29h8BvsCoHQEQ6ST9X8w7w=
84+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21/go.mod h1:4vIRDq+CJB2xFAXZ+YgGUTiEft7oAQlhIs71xcSeuVg=
85+github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 h1:F/M5Y9I3nwr2IEpshZgh1GeHpOItExNM9L1euNuh/fk=
86+github.com/aws/aws-sdk-go-v2/service/sts v1.42.1/go.mod h1:mTNxImtovCOEEuD65mKW7DCsL+2gjEH+RPEAexAzAio=
87+github.com/aws/smithy-go v1.25.1 h1:J8ERsGSU7d+aCmdQur5Txg6bVoYelvQJgtZehD12GkI=
88+github.com/aws/smithy-go v1.25.1/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
89+github.com/aymanbagabas/go-nativeclipboard v0.1.3 h1:FmAWHPTwneAixu7uGDn3cL42xPlUCdNp2J8egMn3P1k=
90+github.com/aymanbagabas/go-nativeclipboard v0.1.3/go.mod h1:2o7MyZwwi4pmXXpOpvOS5FwaHyoCIUks0ktjUvB0EoE=
9191github.com/aymanbagabas/go-udiff v0.4.1 h1:OEIrQ8maEeDBXQDoGCbbTTXYJMYRCRO1fnodZ12Gv5o=
9292github.com/aymanbagabas/go-udiff v0.4.1/go.mod h1:0L9PGwj20lrtmEMeyw4WKJ/TMyDtvAoK9bf2u/mNo3w=
9393github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
@@ -106,28 +106,30 @@ github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab h1:
106106github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab/go.mod h1:hqlYqR7uPKOKfnNeicUbZp0Ps0GeYFlKYtwh5HGDCx8=
107107github.com/charmbracelet/colorprofile v0.4.3 h1:QPa1IWkYI+AOB+fE+mg/5/4HRMZcaXex9t5KX76i20Q=
108108github.com/charmbracelet/colorprofile v0.4.3/go.mod h1:/zT4BhpD5aGFpqQQqw7a+VtHCzu+zrQtt1zhMt9mR4Q=
109−github.com/charmbracelet/openai-go v0.0.0-20260617131321-5e4b9c18c4be h1:pg+OWlIkk9HOe/8P5J95aKe2wGDzFUiiyFOUpwR30B4=
110−github.com/charmbracelet/openai-go v0.0.0-20260617131321-5e4b9c18c4be/go.mod h1:1DahUaExbUZx/jD+FNT2PKP4L9rLE5+ZBRuI8mZjd/E=
111−github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7 h1:3FmWoGNWK4STvqg0O0Aeav2T7rodWJAPeF0QpH+8gFw=
112−github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7/go.mod h1:f/jRa757WUmaOZrbPspXymbg/GnbF+rwe4OLsG7aXYo=
109+github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 h1:BW/sZtyd1JyYy0h5adMm3tzpNyL857LWjuTRET6OhpY=
110+github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266/go.mod h1:1DahUaExbUZx/jD+FNT2PKP4L9rLE5+ZBRuI8mZjd/E=
111+github.com/charmbracelet/ultraviolet v0.0.0-20260416155717-489999b90468 h1:Q9fO0y1Zo5KB/5Vu8JZoLGm1N3RzF9bNj3Ao3xoR+Ac=
112+github.com/charmbracelet/ultraviolet v0.0.0-20260416155717-489999b90468/go.mod h1:bAAz7dh/FTYfC+oiHavL4mX1tOIBZ0ZwYjSi3qE6ivM=
113113github.com/charmbracelet/x/ansi v0.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dAYC84jI=
114114github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ=
115115github.com/charmbracelet/x/editor v0.2.0 h1:7XLUKtaRaB8jN7bWU2p2UChiySyaAuIfYiIRg8gGWwk=
116116github.com/charmbracelet/x/editor v0.2.0/go.mod h1:p3oQ28TSL3YPd+GKJ1fHWcp+7bVGpedHpXmo0D6t1dY=
117117github.com/charmbracelet/x/etag v0.2.0 h1:Euj1VkheoHfTYA9y+TCwkeXF/hN8Fb9l4LqZl79pt04=
118118github.com/charmbracelet/x/etag v0.2.0/go.mod h1:C1B7/bsgvzzxpfu0Rabbd+rTHJa5TmC/qgTseCf6DF0=
119−github.com/charmbracelet/x/exp/charmtone v0.0.0-20260527151214-009e6338d40d h1:sMilwx1YIYTrQva6jsB522AoRYAerNaDIKP4ZPtUq0A=
120−github.com/charmbracelet/x/exp/charmtone v0.0.0-20260527151214-009e6338d40d/go.mod h1:nsExn0DGyX0lh9LwLHTn2Gg+hafdzfSXnC+QmEJTZFY=
119+github.com/charmbracelet/x/exp/charmtone v0.0.0-20260109001716-2fbdffcb221f h1:OKFNbG2sSmgpQW9EC3gYNG+QrcQ4+wWYjzfmJvWkkDo=
120+github.com/charmbracelet/x/exp/charmtone v0.0.0-20260109001716-2fbdffcb221f/go.mod h1:nsExn0DGyX0lh9LwLHTn2Gg+hafdzfSXnC+QmEJTZFY=
121121github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f h1:pk6gmGpCE7F3FcjaOEKYriCvpmIN4+6OS/RD0vm4uIA=
122122github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f/go.mod h1:IfZAMTHB6XkZSeXUqriemErjAWCCzT0LwjKFYCZyw0I=
123123github.com/charmbracelet/x/exp/ordered v0.1.0 h1:55/qLwjIh0gL0Vni+QAWk7T/qRVP6sBf+2agPBgnOFE=
124124github.com/charmbracelet/x/exp/ordered v0.1.0/go.mod h1:5UHwmG+is5THxMyCJHNPCn2/ecI07aKNrW+LcResjJ8=
125−github.com/charmbracelet/x/exp/slice v0.0.0-20260622092256-25656177ba8e h1:TerxTCW/3BrnpqKxeouW0cWSjZb7PsVAmtNftRAAFRE=
126−github.com/charmbracelet/x/exp/slice v0.0.0-20260622092256-25656177ba8e/go.mod h1:vqEfX6xzqW1pKKZUUiFOKg0OQ7bCh54Q2vR/tserrRA=
125+github.com/charmbracelet/x/exp/slice v0.0.0-20260422141420-a6cbdff8a7e2 h1:EXQ7j9kQUGILoSIbxrr1osK9Ca3xqc6EJ7710FIiI3U=
126+github.com/charmbracelet/x/exp/slice v0.0.0-20260422141420-a6cbdff8a7e2/go.mod h1:vqEfX6xzqW1pKKZUUiFOKg0OQ7bCh54Q2vR/tserrRA=
127127github.com/charmbracelet/x/exp/strings v0.1.0 h1:i69S2XI7uG1u4NLGeJPSYU++Nmjvpo9nwd6aoEm7gkA=
128128github.com/charmbracelet/x/exp/strings v0.1.0/go.mod h1:/ehtMPNh9K4odGFkqYJKpIYyePhdp1hLBRvyY4bWkH8=
129−github.com/charmbracelet/x/powernap v0.1.6 h1:tsnQWQVl9arYm5S/tQVXuMJcvnkUNNkXhBWlEBDRNqM=
130−github.com/charmbracelet/x/powernap v0.1.6/go.mod h1:cmdl5zlP5mR8TF2Y68UKc7hdGUDiSJ2+4hk0h04Hsx4=
129+github.com/charmbracelet/x/json v0.2.0 h1:DqB+ZGx2h+Z+1s98HOuOyli+i97wsFQIxP2ZQANTPrQ=
130+github.com/charmbracelet/x/json v0.2.0/go.mod h1:opFIflx2YgXgi49xVUu8gEQ21teFAxyMwvOiZhIvWNM=
131+github.com/charmbracelet/x/powernap v0.1.5 h1:fkQExEsGXUHrdhwYzSC54wkla8Gaeuev6/HyUmKkJ4k=
132+github.com/charmbracelet/x/powernap v0.1.5/go.mod h1:cmdl5zlP5mR8TF2Y68UKc7hdGUDiSJ2+4hk0h04Hsx4=
131133github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
132134github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI=
133135github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY=
@@ -154,14 +156,14 @@ github.com/denisbrodbeck/machineid v1.0.1 h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMS
154156github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI=
155157github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
156158github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
157−github.com/dlclark/regexp2/v2 v2.2.1 h1:mf4KkFUj0gJuarK8P+LgiS+Lit7m9N1yAwEfPbee7R0=
158−github.com/dlclark/regexp2/v2 v2.2.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU=
159+github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz8=
160+github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
159161github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
160162github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
161163github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
162164github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
163−github.com/ebitengine/purego v0.10.1 h1:dewVBCBT2GaMu1SrNTYxQhgQBethzfhiwvZiLGP/qyY=
164−github.com/ebitengine/purego v0.10.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
165+github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU=
166+github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
165167github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA=
166168github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ=
167169github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A=
@@ -169,8 +171,8 @@ github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMD
169171github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0=
170172github.com/esiqveland/notify v0.13.3 h1:QCMw6o1n+6rl+oLUfg8P1IIDSFsDEb2WlXvVvIJbI/o=
171173github.com/esiqveland/notify v0.13.3/go.mod h1:hesw/IRYTO0x99u1JPweAl4+5mwXJibQVUcP0Iu5ORE=
172−github.com/felixge/httpsnoop v1.1.0 h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc=
173−github.com/felixge/httpsnoop v1.1.0/go.mod h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE=
174+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
175+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
174176github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
175177github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
176178github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
@@ -180,10 +182,10 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66D
180182github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
181183github.com/go-git/go-billy/v5 v5.9.0 h1:jItGXszUDRtR/AlferWPTMN4j38BQ88XnXKbilmmBPA=
182184github.com/go-git/go-billy/v5 v5.9.0/go.mod h1:jCnQMLj9eUgGU7+ludSTYoZL/GGmii14RxKFj7ROgHw=
183−github.com/go-git/go-git/v5 v5.19.1 h1:nX27AnaU43/K5bKktKwgBmR9lawoYVe1Ckg0rgzzN00=
184−github.com/go-git/go-git/v5 v5.19.1/go.mod h1:Pb1v0c7/g8aGQJwx9Us09W85yGoyvSwuhEGMH7zjDKQ=
185−github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68 h1:KZaTBSyshWX3MP5jukJcNSuXDQTO+rNpt0J564dX/eg=
186−github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg=
185+github.com/go-git/go-git/v5 v5.19.0 h1:+WkVUQZSy/F1Gb13udrMKjIM2PrzsNfDKFSfo5tkMtc=
186+github.com/go-git/go-git/v5 v5.19.0/go.mod h1:Pb1v0c7/g8aGQJwx9Us09W85yGoyvSwuhEGMH7zjDKQ=
187+github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4 h1:2WmHkJINIjgXXYDGik8d3oJvFA3DAwPy00csDJ3vo+o=
188+github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg=
187189github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
188190github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
189191github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
@@ -231,8 +233,8 @@ github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
231233github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
232234github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
233235github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
234−github.com/googleapis/enterprise-certificate-proxy v0.3.17 h1:73NfMHdiqo9JFU9+7a5ExpVa10/R29pXfZIaW559nrg=
235−github.com/googleapis/enterprise-certificate-proxy v0.3.17/go.mod h1:rSEsBUemEBZEexP2y6jPp16LUmUbjmSbcPMQizR0o4k=
236+github.com/googleapis/enterprise-certificate-proxy v0.3.15 h1:xolVQTEXusUcAA5UgtyRLjelpFFHWlPQ4XfWGc7MBas=
237+github.com/googleapis/enterprise-certificate-proxy v0.3.15/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg=
236238github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4=
237239github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY=
238240github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
@@ -262,10 +264,14 @@ github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d h1:o
262264github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d/go.mod h1:SV0W0APWP9MZ1/gfDQ/NzzTlWdIgYZ/ZbpN4d/UXRYw=
263265github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
264266github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
265−github.com/kaptinlin/jsonpointer v0.4.26 h1:tw616yszHek+B3/GtDSia+uzBa3sLXGpmo4tYeMhBZw=
266−github.com/kaptinlin/jsonpointer v0.4.26/go.mod h1:wVOBaXGGnP42YsMb6zev/3W5POTvspdNfh8DXzf8XS8=
267−github.com/kaptinlin/jsonschema v0.9.2 h1:zqowDnBkpg80OeIt4Bl1bOyfKY1/KVVzst1m3MCsxd4=
268−github.com/kaptinlin/jsonschema v0.9.2/go.mod h1:mCH2W5lXd29tdDjvoFfY32nedPORnlk7pCVrrcs/NkQ=
267+github.com/kaptinlin/go-i18n v0.4.5 h1:9tIlo5A0RXth+yZJO2MG7Bhpu/X9PlzQnGz/qyYWNoY=
268+github.com/kaptinlin/go-i18n v0.4.5/go.mod h1:mU/7BH4molY5lGZYBwBRKAaiJ70dWRHuqmQ0/pFLGno=
269+github.com/kaptinlin/jsonpointer v0.4.20 h1:otSZZnCVdVo9OwOm+AQhS8ke31CLLQYXmG5Q0GOrXYg=
270+github.com/kaptinlin/jsonpointer v0.4.20/go.mod h1:Mo7+DX8RlQTFqS4dnYJl0izSP4ob+Rl5xO/mGDETgaU=
271+github.com/kaptinlin/jsonschema v0.7.13 h1:kahVXTy/rURL0XJjyQ9WELm59wEmXi6IY0TWswQEFvU=
272+github.com/kaptinlin/jsonschema v0.7.13/go.mod h1:Uh0aUBusnhXDCEXJ2oimL/hx7YTo7F+sKniE+tM0ERc=
273+github.com/kaptinlin/messageformat-go v0.6.0 h1:D6jiXFsKW4/JG2CMddv/F6Rev9KVbCRKEzzV5QOAcpc=
274+github.com/kaptinlin/messageformat-go v0.6.0/go.mod h1:NKjwS6e9u7DRhAK+vydjDDwJ7UbdHhYjk/yk2WPuZPs=
269275github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao=
270276github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
271277github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
@@ -290,16 +296,16 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0
290296github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
291297github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4=
292298github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
293−github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU=
294−github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
299+github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw=
300+github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
295301github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY=
296302github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg=
297303github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk=
298304github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA=
299305github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
300306github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
301−github.com/modelcontextprotocol/go-sdk v1.6.1 h1:0zOSupjKUxPKSocPT1Wtago+mUHU2/uZ4xSOY0FGReU=
302−github.com/modelcontextprotocol/go-sdk v1.6.1/go.mod h1:kzm3kzFL1/+AziGOE0nUs3gvPoNxMCvkxokMkuFapXQ=
307+github.com/modelcontextprotocol/go-sdk v1.6.0 h1:PPLS3kn7WtOEnR+Af4X5H96SG0qSab8R/ZQT/HkhPkY=
308+github.com/modelcontextprotocol/go-sdk v1.6.0/go.mod h1:kzm3kzFL1/+AziGOE0nUs3gvPoNxMCvkxokMkuFapXQ=
303309github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
304310github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
305311github.com/muesli/mango v0.1.0 h1:DZQK45d2gGbql1arsYA4vfg4d7I9Hfx5rX/GCmzsAvI=
@@ -310,10 +316,10 @@ github.com/muesli/mango-pflag v0.1.0 h1:UADqbYgpUyRoBja3g6LUL+3LErjpsOwaC9ywvBWe
310316github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0=
311317github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8=
312318github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
313−github.com/ncruces/go-sqlite3 v0.35.1 h1:h/LaVyQwIvBBT0+2JmVe2tbYyWjUQ093/pYhpBqdxJo=
314−github.com/ncruces/go-sqlite3 v0.35.1/go.mod h1:fXOSIkWwN5NXgbJk+7Zls8QIW4xOflmgh11OFvcY+J0=
315−github.com/ncruces/go-sqlite3-wasm/v3 v3.1.35302 h1:Cew7/eNAMd1zhpXYBjofBua/63pFvbvB2h4PM/p6gKU=
316−github.com/ncruces/go-sqlite3-wasm/v3 v3.1.35302/go.mod h1:xe0CfafDUxfh+fSVKjHHMiAxoG9KALt5nFtbGNb/jRs=
319+github.com/ncruces/go-sqlite3 v0.34.1 h1:N4NU/MqvZtSseGyTzJXdFI8RoVIR0lWUYeainj4pX2o=
320+github.com/ncruces/go-sqlite3 v0.34.1/go.mod h1:QuztC+fMQvmDSPEk3E807xYbAVZGsxnismh23mzZPhM=
321+github.com/ncruces/go-sqlite3-wasm/v2 v2.2.35301 h1:PPb3vECU21cZr2CrzYG7idXLBpWETDcdVEnXg3vqRpM=
322+github.com/ncruces/go-sqlite3-wasm/v2 v2.2.35301/go.mod h1:q34C+veYmxQ7XRFgCKSeD6hq5vP/C517Hkl4iu+A5ao=
317323github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
318324github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
319325github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M=
@@ -327,6 +333,8 @@ github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
327333github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
328334github.com/pb33f/ordered-map/v2 v2.3.1 h1:5319HDO0aw4DA4gzi+zv4FXU9UlSs3xGZ40wcP1nBjY=
329335github.com/pb33f/ordered-map/v2 v2.3.1/go.mod h1:qxFQgd0PkVUtOMCkTapqotNgzRhMPL7VvaHKbd1HnmQ=
336+github.com/pelletier/go-toml/v2 v2.3.0 h1:k59bC/lIZREW0/iVaQR8nDHxVq8OVlIzYCOJf421CaM=
337+github.com/pelletier/go-toml/v2 v2.3.0/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
330338github.com/pierrec/lz4/v4 v4.1.26 h1:GrpZw1gZttORinvzBdXPUXATeqlJjqUG/D87TKMnhjY=
331339github.com/pierrec/lz4/v4 v4.1.26/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
332340github.com/pjbgf/sha1cd v0.6.0 h1:3WJ8Wz8gvDz29quX1OcEmkAlUg9diU4GxJHqs0/XiwU=
@@ -341,12 +349,12 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1
341349github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
342350github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
343351github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
344−github.com/posthog/posthog-go v1.17.5 h1:mrLiAdyiQpl8Yeyg23iShyAztJMaUrYzsBjKeH52Aak=
345−github.com/posthog/posthog-go v1.17.5/go.mod h1://M430hNH3e8CDv4i8SJesb26816Mpa6GIZaiP4pNQU=
346−github.com/pressly/goose/v3 v3.27.2 h1:FjKNzcmMdGrQlSIu5alMSmakQtJFBgtw+A0bb1p/LC8=
347−github.com/pressly/goose/v3 v3.27.2/go.mod h1:qWW+/8dkVtJYjJrbIpwD5xxnEJTUKvxkQ9JKQp9LaIM=
348−github.com/qjebbs/go-jsons v1.0.0-alpha.6 h1:9pMjdrCT7rj9CDIM0FXf9Ilie8PEy9g1b4qMkCnedjQ=
349−github.com/qjebbs/go-jsons v1.0.0-alpha.6/go.mod h1:wNJrtinHyC3YSf6giEh4FJN8+yZV7nXBjvmfjhBIcw4=
352+github.com/posthog/posthog-go v1.12.5 h1:l/x3mpqisXJ0sTOyyRutsTQAgiWYuJT1uhN4cQraJ8o=
353+github.com/posthog/posthog-go v1.12.5/go.mod h1:xsVOW9YImilUcazwPNEq4PJDqEZf2KeCS758zXjwkPg=
354+github.com/pressly/goose/v3 v3.27.1 h1:6uEvcprBybDmW4hcz3gYujhARhye+GoWKhEWyzD5sh4=
355+github.com/pressly/goose/v3 v3.27.1/go.mod h1:maruOxsPnIG2yHHyo8UqKWXYKFcH7Q76csUV7+7KYoM=
356+github.com/qjebbs/go-jsons v1.0.0-alpha.5 h1:U2PPDxeKI1MMOSw7e7xyxhwH9Ggc7UrDvaRIkJ+l0n8=
357+github.com/qjebbs/go-jsons v1.0.0-alpha.5/go.mod h1:wNJrtinHyC3YSf6giEh4FJN8+yZV7nXBjvmfjhBIcw4=
350358github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
351359github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
352360github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
@@ -354,8 +362,8 @@ github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc
354362github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
355363github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
356364github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
357−github.com/sahilm/fuzzy v0.1.3 h1:juByESSS32nVD81vr6tHmKmA/8zde7gE+x5CLxrzXPU=
358−github.com/sahilm/fuzzy v0.1.3/go.mod h1:au6//VbVSqu6DFrkL2CfjlJ5iURpNCPeE+1GwY3XsT8=
365+github.com/sahilm/fuzzy v0.1.2 h1:kdSkz23lx1meNjEl+SLJULeSbjTI4Dn14K/YxdGrIww=
366+github.com/sahilm/fuzzy v0.1.2/go.mod h1:au6//VbVSqu6DFrkL2CfjlJ5iURpNCPeE+1GwY3XsT8=
359367github.com/sebdah/goldie/v2 v2.5.3 h1:9ES/mNN+HNUbNWpVAlrzuZ7jE+Nrczbj8uFRjM7624Y=
360368github.com/sebdah/goldie/v2 v2.5.3/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI=
361369github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
@@ -413,8 +421,6 @@ github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 h1:pyC9PaHYZFgEKFdlp3G8
413421github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701/go.mod h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA=
414422github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
415423github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
416−github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
417−github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
418424github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
419425github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
420426github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
@@ -429,20 +435,20 @@ github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs=
429435github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s=
430436go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
431437go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
432−go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 h1:2yEATaop1/a1I4psnSLgWVPLWwCzkqWakgJy7xTDVy0=
433−go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0/go.mod h1:D7J12YRapIekYyPWgGPlA/23pRmpSEZC5xJC/TTLI9U=
434−go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo=
435−go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI=
436−go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU=
437−go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc=
438−go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc=
439−go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo=
440−go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58=
441−go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0=
442−go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI=
443−go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA=
444−go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk=
445−go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE=
438+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo=
439+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg=
440+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY=
441+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo=
442+go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
443+go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
444+go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
445+go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
446+go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
447+go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
448+go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
449+go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
450+go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
451+go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
446452go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
447453go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
448454go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
@@ -450,10 +456,6 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8
450456go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
451457go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go=
452458go.yaml.in/yaml/v4 v4.0.0-rc.3/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0=
453−golang.design/x/clipboard v0.8.0 h1:6VEcH28wwcSgKc+vnxHHDWiRjrakTQIAJnPUrt3aOgg=
454−golang.design/x/clipboard v0.8.0/go.mod h1:s0pwrtA3Q9fgnVtGDmP5ZK/pp55cQKB23esKsjwWhWM=
455−golang.design/x/x11 v0.2.0 h1:Uiwu2guGihsJX/ZCzpoDPFz5gR/Qntm08mvoBCmRydo=
456−golang.design/x/x11 v0.2.0/go.mod h1:/5q1mFkdc1rL8mvB7DsQFi6as4tIkBv4FXjcP07mrkE=
457459golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
458460golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
459461golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
@@ -461,24 +463,20 @@ golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDf
461463golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
462464golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
463465golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
464−golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto=
465−golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio=
466+golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
467+golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
466468golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM=
467469golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80=
468−golang.org/x/exp/shiny v0.0.0-20250606033433-dcc06ee1d476 h1:Wdx0vgH5Wgsw+lF//LJKmWOJBLWX6nprsMqnf99rYDE=
469−golang.org/x/exp/shiny v0.0.0-20250606033433-dcc06ee1d476/go.mod h1:ygj7T6vSGhhm/9yTpOQQNvuAUFziTH7RUiH74EoE2C8=
470470golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
471−golang.org/x/image v0.43.0 h1:FLxcP4ec2350nTfOC8ysKtqYSIFbk/QGjw1ZHNP4tsY=
472−golang.org/x/image v0.43.0/go.mod h1:rrpelvGFt+kLPAjPM4HeWPgrl0FtafueU//e5N0qk/Q=
473−golang.org/x/mobile v0.0.0-20250606033058-a2a15c67f36f h1:/n+PL2HlfqeSiDCuhdBbRNlGS/g2fM4OHufalHaTVG8=
474−golang.org/x/mobile v0.0.0-20250606033058-a2a15c67f36f/go.mod h1:ESkJ836Z6LpG6mTVAhA48LpfW/8fNR0ifStlH2axyfg=
471+golang.org/x/image v0.38.0 h1:5l+q+Y9JDC7mBOMjo4/aPhMDcxEptsX+Tt3GgRQRPuE=
472+golang.org/x/image v0.38.0/go.mod h1:/3f6vaXC+6CEanU4KJxbcUZyEePbyKbaLoDOe4ehFYY=
475473golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
476474golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
477475golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
478476golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
479477golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
480−golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4=
481−golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ=
478+golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM=
479+golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
482480golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
483481golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
484482golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
@@ -490,8 +488,8 @@ golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
490488golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
491489golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
492490golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
493−golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o=
494−golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec=
491+golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w=
492+golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ=
495493golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
496494golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
497495golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -501,8 +499,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
501499golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
502500golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
503501golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
504−golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM=
505−golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
502+golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
503+golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
506504golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
507505golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
508506golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -518,8 +516,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
518516golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
519517golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
520518golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
521−golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
522−golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
519+golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
520+golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
523521golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
524522golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
525523golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -531,8 +529,8 @@ golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
531529golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
532530golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
533531golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
534−golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc=
535−golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y=
532+golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
533+golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
536534golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
537535golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
538536golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
@@ -542,8 +540,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
542540golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
543541golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
544542golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
545−golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE=
546−golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4=
543+golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
544+golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
547545golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
548546golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
549547golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -552,23 +550,23 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
552550golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
553551golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
554552golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
555−golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8=
556−golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0=
553+golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
554+golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
557555golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
558556gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
559557gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
560−google.golang.org/api v0.286.0 h1:TdTXMvzYKnWV1/lPbCdbXRqBrkDqjPto22H2xeZZ8LI=
561−google.golang.org/api v0.286.0/go.mod h1:NlOlUIr8MPoIhT9Bb/oUnRuHbJOLwxb6JSYJM8Yz+jQ=
562−google.golang.org/genai v1.62.0 h1:PaBju84orf4Vbcc6OfHe4vxhxhjwulKTgOpEc3iIc00=
563−google.golang.org/genai v1.62.0/go.mod h1:mDdPDFXo1Ats7f1WXVyZgWb/CkMzFWTWJruIMy7hGIU=
564−google.golang.org/genproto v0.0.0-20260622175928-b703f567277d h1:CP5omUq8AJTiWMrPKM1WRLJ7zZeXd9OPcQD3TbBNAyY=
565−google.golang.org/genproto v0.0.0-20260622175928-b703f567277d/go.mod h1:DrwuGJgFSEVNpv3S5Q5VxhRTvdnjauw9GtvwVOEARfA=
566−google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d h1:xr2lwHI91bn3UiXcnyzRMQjp2LRiM8wEHzwUaE0YhTs=
567−google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d/go.mod h1:O0ZOWSrfWfJ+Z5HbwZ+wNtHsg/vk1k2C/w67eww8PfQ=
568−google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d h1:mpAgMyM9vQHxycBlDq50y1VHpfSfVwzXvrQKtYbXuUY=
569−google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
570−google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ=
571−google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I=
558+google.golang.org/api v0.277.0 h1:HJfyJUiNeBBUMai7ez8u14wkp/gH/I4wpGbbO9o+cSk=
559+google.golang.org/api v0.277.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ=
560+google.golang.org/genai v1.55.0 h1:iLHGk4Bj/IZ/GNNZb7hYqwSJMRBvqLeu2Hb6YQ+rYGw=
561+google.golang.org/genai v1.55.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk=
562+google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4 h1:2iMJZntwvmfgtse+s744JY7v7PgEdSBuFYXucvpOHNM=
563+google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:v14kaaboYyXQ1Gsu489Q+Hg/oN4B33mWtuOhF1HCeXA=
564+google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 h1:yOzSCGPx+cp5VO7IxvZ9SBFF7j1tZVcNtlHR2iYKtVo=
565+google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:Q9HWtNeE7tM9npdIsEvqXj1QJIvVoeAV3rtXtS715Cw=
566+google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 h1:tEkOQcXgF6dH1G+MVKZrfpYvozGrzb91k6ha7jireSM=
567+google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
568+google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM=
569+google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4=
572570google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
573571google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
574572gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -592,20 +590,20 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
592590gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
593591gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
594592gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
595−modernc.org/cc/v4 v4.28.4 h1:Hd/4Es+MBj+/7hSdZaisNyu6bv3V0Dp2MdllyfqaH+c=
596−modernc.org/cc/v4 v4.28.4/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI=
597−modernc.org/ccgo/v4 v4.34.4 h1:OVnSOWQjVKOYkFxoHYB+qQmSHK5gqMqARM+K9DpR/Ws=
598−modernc.org/ccgo/v4 v4.34.4/go.mod h1:qdKqE8FNIYyysougB1RX9MxCzp5oJOcQXSobANJ4TuE=
593+modernc.org/cc/v4 v4.28.2 h1:3tQ0lf2ADtoby2EtSP+J7IE2SHwEJdP8ioR59wx7XpY=
594+modernc.org/cc/v4 v4.28.2/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI=
595+modernc.org/ccgo/v4 v4.34.0 h1:yRLPFZieg532OT4rp4JFNIVcquwalMX26G95WQDqwCQ=
596+modernc.org/ccgo/v4 v4.34.0/go.mod h1:AS5WYMyBakQ+fhsHhtP8mWB82KTGPkNNJDGfGQCe0/A=
599597modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM=
600598modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU=
601599modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI=
602600modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito=
603−modernc.org/gc/v3 v3.1.3 h1:6QAplYyVO+KdPW3pGnqmJDUxtkec8ooEWvks/hhU3lc=
604−modernc.org/gc/v3 v3.1.3/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY=
601+modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo=
602+modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY=
605603modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks=
606604modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI=
607−modernc.org/libc v1.73.4 h1:+ra4Ui8ngyt8HDcO1FTDPWlkAh6yOdaO2yAoh8MddQA=
608−modernc.org/libc v1.73.4/go.mod h1:DXZ3eO8qMCNn2SnmTNCiC71nJ9Rcq3PsnpU6Vc4rWK8=
605+modernc.org/libc v1.72.3 h1:ZnDF4tXn4NBXFutMMQC4vtbTFSXhhKzR73fv0beZEAU=
606+modernc.org/libc v1.72.3/go.mod h1:dn0dZNnnn1clLyvRxLxYExxiKRZIRENOfqQ8XEeg4Qs=
609607modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
610608modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
611609modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
@@ -614,8 +612,8 @@ modernc.org/opt v0.2.0 h1:tGyef5ApycA7FSEOMraay9SaTk5zmbx7Tu+cJs4QKZg=
614612modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
615613modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
616614modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
617−modernc.org/sqlite v1.53.0 h1:20WG8N9q4ji/dEqGk4uiI0c6OPjSeLTNYGFCc3+7c1M=
618−modernc.org/sqlite v1.53.0/go.mod h1:xoEpOIpGrgT48H5iiyt/YXPCZPEzlfmfFwtk8Lklw8s=
615+modernc.org/sqlite v1.50.1 h1:l+cQvn0sd0zJJtfygGHuQJ5AjlrwXmWPw4KP3ZMwr9w=
616+modernc.org/sqlite v1.50.1/go.mod h1:tcNzv5p84E0skkmJn038y+hWJbLQXQqEnQfeh5r2JLM=
619617modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
620618modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
621619modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
internal/agent/accepted_run_test.godeleted−231
@@ -1,231 +0,0 @@
1−package agent
2−
3−import (
4− "context"
5− "testing"
6−
7− "github.com/charmbracelet/crush/internal/message"
8− "github.com/stretchr/testify/assert"
9− "github.com/stretchr/testify/require"
10−)
11−
12−// newCancelTestAgent builds a DB-backed sessionAgent with no model. The
13−// tests here exercise the dispatch/cancel/persist paths, none of which
14−// reach agent.Stream, so a model is unnecessary.
15−func newCancelTestAgent(t *testing.T) (*sessionAgent, fakeEnv) {
16− t.Helper()
17− env := testEnv(t)
18− sa := NewSessionAgent(SessionAgentOptions{
19− Sessions: env.sessions,
20− Messages: env.messages,
21− }).(*sessionAgent)
22− return sa, env
23−}
24−
25−func (a *sessionAgent) acceptedCount(sessionID string) int {
26− c, _ := a.acceptedRuns.Get(sessionID)
27− return c
28−}
29−
30−func (a *sessionAgent) hasPendingCancel(sessionID string) bool {
31− mark, ok := a.cancelMark.Get(sessionID)
32− return ok && mark > 0
33−}
34−
35−func (a *sessionAgent) pendingCancelMark(sessionID string) uint64 {
36− mark, _ := a.cancelMark.Get(sessionID)
37− return mark
38−}
39−
40−func TestAcceptedRun_CloseIsIdempotent(t *testing.T) {
41− t.Parallel()
42− sa, _ := newCancelTestAgent(t)
43−
44− accept := sa.BeginAccepted("sid")
45− require.Equal(t, "sid", accept.SessionID())
46− require.Equal(t, 1, sa.acceptedCount("sid"))
47−
48− accept.Close()
49− require.Equal(t, 0, sa.acceptedCount("sid"))
50−
51− // Repeated Close must not underflow the counter.
52− accept.Close()
53− accept.Close()
54− require.Equal(t, 0, sa.acceptedCount("sid"))
55−}
56−
57−func TestAcceptedRun_MultipleReservations(t *testing.T) {
58− t.Parallel()
59− sa, _ := newCancelTestAgent(t)
60−
61− a1 := sa.BeginAccepted("sid")
62− a2 := sa.BeginAccepted("sid")
63− require.Equal(t, 2, sa.acceptedCount("sid"))
64−
65− a1.Close()
66− require.Equal(t, 1, sa.acceptedCount("sid"))
67−
68− a2.Close()
69− require.Equal(t, 0, sa.acceptedCount("sid"))
70−}
71−
72−func TestAcceptedRun_NilSafe(t *testing.T) {
73− t.Parallel()
74− var accept *AcceptedRun
75− require.Equal(t, "", accept.SessionID())
76− // Must not panic.
77− accept.Close()
78−}
79−
80−func TestCancel_IdleDoesNotRecordPendingCancel(t *testing.T) {
81− t.Parallel()
82− sa, _ := newCancelTestAgent(t)
83−
84− // No accepted run, no active request: a true no-op.
85− sa.Cancel("sid")
86− require.False(t, sa.hasPendingCancel("sid"))
87−}
88−
89−func TestCancel_AcceptedRecordsPendingCancel(t *testing.T) {
90− t.Parallel()
91− sa, _ := newCancelTestAgent(t)
92−
93− accept := sa.BeginAccepted("sid")
94− defer accept.Close()
95−
96− sa.Cancel("sid")
97− require.True(t, sa.hasPendingCancel("sid"))
98−}
99−
100−func TestCancel_SecondCancelWhilePendingIsNoOp(t *testing.T) {
101− t.Parallel()
102− sa, _ := newCancelTestAgent(t)
103−
104− accept := sa.BeginAccepted("sid")
105− defer accept.Close()
106−
107− sa.Cancel("sid")
108− require.True(t, sa.hasPendingCancel("sid"))
109−
110− // A second cancel while a pending cancel is already recorded must
111− // remain a single pending cancel; one Run consumes exactly one.
112− sa.Cancel("sid")
113− require.True(t, sa.hasPendingCancel("sid"))
114−}
115−
116−func TestRun_CancelOnEntryPersistsCanceledTurn(t *testing.T) {
117− t.Parallel()
118− sa, env := newCancelTestAgent(t)
119−
120− sess, err := env.sessions.Create(t.Context(), "session")
121− require.NoError(t, err)
122−
123− accept := sa.BeginAccepted(sess.ID)
124− // A cancel arrives in the accepted-but-not-yet-active window.
125− sa.Cancel(sess.ID)
126− require.True(t, sa.hasPendingCancel(sess.ID))
127−
128− result, err := sa.Run(t.Context(), SessionAgentCall{
129− SessionID: sess.ID,
130− Prompt: "hello",
131− Accepted: accept,
132− })
133− require.NoError(t, err)
134− require.Nil(t, result)
135−
136− // The pending cancel was consumed and the accept released.
137− require.False(t, sa.hasPendingCancel(sess.ID))
138− require.Equal(t, 0, sa.acceptedCount(sess.ID))
139−
140− msgs, err := env.messages.List(t.Context(), sess.ID)
141− require.NoError(t, err)
142− require.Len(t, msgs, 2)
143− assert.Equal(t, message.User, msgs[0].Role)
144− assert.Equal(t, message.Assistant, msgs[1].Role)
145− assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
146−}
147−
148−func TestPersistCanceledTurn_WritesBothWhenUserMissing(t *testing.T) {
149− t.Parallel()
150− sa, env := newCancelTestAgent(t)
151−
152− sess, err := env.sessions.Create(t.Context(), "session")
153− require.NoError(t, err)
154−
155− err = sa.persistCanceledTurn(t.Context(), SessionAgentCall{
156− SessionID: sess.ID,
157− Prompt: "hello",
158− }, false)
159− require.NoError(t, err)
160−
161− msgs, err := env.messages.List(t.Context(), sess.ID)
162− require.NoError(t, err)
163− require.Len(t, msgs, 2)
164− assert.Equal(t, message.User, msgs[0].Role)
165− assert.Equal(t, message.Assistant, msgs[1].Role)
166− assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
167−}
168−
169−func TestPersistCanceledTurn_WritesAssistantOnlyWhenUserCreated(t *testing.T) {
170− t.Parallel()
171− sa, env := newCancelTestAgent(t)
172−
173− sess, err := env.sessions.Create(t.Context(), "session")
174− require.NoError(t, err)
175−
176− // Simulate PrepareStep having already created the user message.
177− _, err = sa.createUserMessage(t.Context(), SessionAgentCall{
178− SessionID: sess.ID,
179− Prompt: "hello",
180− })
181− require.NoError(t, err)
182−
183− err = sa.persistCanceledTurn(t.Context(), SessionAgentCall{
184− SessionID: sess.ID,
185− Prompt: "hello",
186− }, true)
187− require.NoError(t, err)
188−
189− msgs, err := env.messages.List(t.Context(), sess.ID)
190− require.NoError(t, err)
191− require.Len(t, msgs, 2)
192− assert.Equal(t, message.User, msgs[0].Role)
193− assert.Equal(t, message.Assistant, msgs[1].Role)
194− assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
195−}
196−
197−func TestPersistCanceledTurn_SucceedsWithCanceledContext(t *testing.T) {
198− t.Parallel()
199− sa, env := newCancelTestAgent(t)
200−
201− sess, err := env.sessions.Create(t.Context(), "session")
202− require.NoError(t, err)
203−
204− // Simulate workspace shutdown having already canceled the run
205− // context. WithoutCancel must let the writes through.
206− ctx, cancel := context.WithCancel(t.Context())
207− cancel()
208−
209− err = sa.persistCanceledTurn(ctx, SessionAgentCall{
210− SessionID: sess.ID,
211− Prompt: "hello",
212− }, false)
213− require.NoError(t, err)
214−
215− msgs, err := env.messages.List(t.Context(), sess.ID)
216− require.NoError(t, err)
217− require.Len(t, msgs, 2)
218−}
219−
220−func TestClearPendingCancel(t *testing.T) {
221− t.Parallel()
222− sa, _ := newCancelTestAgent(t)
223−
224− accept := sa.BeginAccepted("sid")
225− defer accept.Close()
226− sa.Cancel("sid")
227− require.True(t, sa.hasPendingCancel("sid"))
228−
229− sa.clearPendingCancel("sid")
230− require.False(t, sa.hasPendingCancel("sid"))
231−}
internal/agent/agent.go+130−976
@@ -12,18 +12,15 @@ import (
1212 "context"
1313 _ "embed"
1414 "encoding/base64"
15− "encoding/json"
1615 "errors"
1716 "fmt"
1817 "log/slog"
19− "math"
2018 "net/http"
2119 "os"
2220 "regexp"
2321 "strconv"
2422 "strings"
2523 "sync"
26− "sync/atomic"
2724 "time"
2825
2926 "charm.land/catwalk/pkg/catwalk"
@@ -46,7 +43,6 @@ import (
4643 "github.com/charmbracelet/crush/internal/session"
4744 "github.com/charmbracelet/crush/internal/stringext"
4845 "github.com/charmbracelet/crush/internal/version"
49− "github.com/charmbracelet/x/ansi"
5046 "github.com/charmbracelet/x/exp/charmtone"
5147)
5248
@@ -74,16 +70,7 @@ var (
7470)
7571
7672type SessionAgentCall struct {
77− SessionID string
78− // RunID, when non-empty, is the caller-supplied correlator that
79− // gets echoed back on the notify.RunComplete event emitted for
80− // this turn. It is preserved when the call is enqueued behind a
81− // busy session so the queued turn's terminal event is still
82− // recognisable to the original caller. Callers that need a
83− // reliable completion contract (e.g. `crush run` against a
84− // session that may be busy) MUST set it; SessionID alone is
85− // ambiguous when concurrent turns share the same session.
86− RunID string
73+ SessionID string
8774 Prompt string
8875 ProviderOptions fantasy.ProviderOptions
8976 Attachments []message.Attachment
@@ -94,41 +81,10 @@ type SessionAgentCall struct {
9481 FrequencyPenalty *float64
9582 PresencePenalty *float64
9683 NonInteractive bool
97− // OnComplete, when non-nil, replaces the default RunComplete
98− // publish path: the inner Run hands the terminal payload to this
99− // callback instead of emitting it on the RunComplete broker. The
100− // coordinator uses this hook to coalesce the unauthorized →
101− // re-auth → retry chain into a single user-visible terminal
102− // event, so non-interactive clients (e.g. `crush run`) don't
103− // exit on a stale failed-attempt RunComplete before the
104− // successful retry. It is intentionally stripped when queueing
105− // a busy-session call (see Run): the originating
106− // coordinator.Run has long returned by the time the queued
107− // recursion drains, so falling back to the default broker
108− // publish keeps the event visible to subscribers.
109− OnComplete func(notify.RunComplete)
110− // Accepted, when non-nil, is the accept reservation taken by
111− // BeginAccepted before the call was dispatched onto a goroutine
112− // (the client/server fire-and-forget path). Run consumes it under
113− // dispatchMu[SessionID] once the accepted -> (cancel-on-entry |
114− // queued | active) transition has been chosen. When nil
115− // (in-process / local callers like AppWorkspace), behavior is
116− // unchanged and no accept tracking applies.
117− Accepted *AcceptedRun
118− // acceptSeq carries the accept sequence of the handle that produced
119− // this call after it has been enqueued and its Accepted handle
120− // stripped. The queue-drain paths compare it against a session's
121− // cancel mark so a follow-up queued before a cancel is dropped while
122− // one queued after the cancel survives. 0 means untracked (an
123− // in-process enqueue with no accept reservation), which the drain
124− // paths treat as covered by any present mark, preserving the
125− // pre-sequence behavior.
126− acceptSeq uint64
12784}
12885
12986type SessionAgent interface {
13087 Run(context.Context, SessionAgentCall) (*fantasy.AgentResult, error)
131− BeginAccepted(sessionID string) *AcceptedRun
13288 SetModels(large Model, small Model)
13389 SetTools(tools []fantasy.AgentTool)
13490 SetSystemPrompt(systemPrompt string)
@@ -141,7 +97,6 @@ type SessionAgent interface {
14197 ClearQueue(sessionID string)
14298 Summarize(context.Context, string, fantasy.ProviderOptions) error
14399 Model() Model
144− GenerateTitle(ctx context.Context, sessionID, userPrompt string)
145100}
146101
147102type Model struct {
@@ -157,7 +112,6 @@ type sessionAgent struct {
157112 systemPromptPrefix *csync.Value[string]
158113 systemPrompt *csync.Value[string]
159114 tools *csync.Slice[fantasy.AgentTool]
160− toolsGen atomic.Uint64 // bumped by SetTools; lets PrepareStep skip re-copying unchanged tools
161115
162116 isSubAgent bool
163117 sessions session.Service
@@ -165,47 +119,9 @@ type sessionAgent struct {
165119 disableAutoSummarize bool
166120 isYolo bool
167121 notify pubsub.Publisher[notify.Notification]
168− runComplete pubsub.Publisher[notify.RunComplete]
169122
170123 messageQueue *csync.Map[string, []SessionAgentCall]
171124 activeRequests *csync.Map[string, context.CancelFunc]
172−
173− // dispatchMu holds a per-session mutex that serializes the
174− // accepted -> (cancel-on-entry | queued | active) transition in
175− // Run against a concurrent Cancel. The lock is held only during
176− // the brief handoff (no DB or LLM I/O under the lock).
177− dispatchMu *csync.Map[string, *sync.Mutex]
178− // acceptedRuns counts dispatched-but-not-yet-active runs per
179− // session. A counter > 0 means a dispatched prompt is in flight
180− // and has not yet completed the dispatch handoff in Run. Only
181− // BeginAccepted increments it; only AcceptedRun.Close decrements
182− // it.
183− acceptedRuns *csync.Map[string, int]
184− // cancelMark records, per session, a high-water accept sequence: an
185− // accepted handle is canceled by it iff the handle's sequence is at
186− // or below the mark. Cancel raises the mark to the latest sequence
187− // assigned at cancel time, so a single Cancel covers every prompt
188− // accepted-but-not-yet-active then, while a prompt accepted later
189− // (higher sequence) is never poisoned. Absent or 0 means no pending
190− // cancel. It is only raised by Cancel when acceptedRuns > 0, so an
191− // idle Escape never records a mark.
192− cancelMark *csync.Map[string, uint64]
193− // dispatchMuCreate guards lazy creation of per-session entries in
194− // dispatchMu so two goroutines can't race to lock different mutex
195− // instances for the same session.
196− dispatchMuCreate sync.Mutex
197− // acceptedMu serializes increments/decrements of acceptedRuns and
198− // the assignment of accept sequence numbers from acceptSeqGen. It
199− // is separate from dispatchMu so AcceptedRun.Close (which may run
200− // while Run holds dispatchMu for the same session) does not
201− // deadlock by re-entering the dispatch lock.
202− acceptedMu sync.Mutex
203− // acceptSeqGen is the monotonic source of accept sequence numbers.
204− // Each BeginAccepted increments it under acceptedMu and stamps the
205− // returned handle, so sequences strictly increase in accept order
206− // across the agent. Cancel uses its current value as the per-session
207− // high-water mark.
208− acceptSeqGen uint64
209125}
210126
211127type SessionAgentOptions struct {
@@ -220,7 +136,6 @@ type SessionAgentOptions struct {
220136 Messages message.Service
221137 Tools []fantasy.AgentTool
222138 Notify pubsub.Publisher[notify.Notification]
223− RunComplete pubsub.Publisher[notify.RunComplete]
224139}
225140
226141func NewSessionAgent(
@@ -238,418 +153,32 @@ func NewSessionAgent(
238153 tools: csync.NewSliceFrom(opts.Tools),
239154 isYolo: opts.IsYolo,
240155 notify: opts.Notify,
241− runComplete: opts.RunComplete,
242156 messageQueue: csync.NewMap[string, []SessionAgentCall](),
243157 activeRequests: csync.NewMap[string, context.CancelFunc](),
244− dispatchMu: csync.NewMap[string, *sync.Mutex](),
245− acceptedRuns: csync.NewMap[string, int](),
246− cancelMark: csync.NewMap[string, uint64](),
247− }
248−}
249−
250−// AcceptedRun owns exactly one accept reservation taken by
251−// BeginAccepted. It is the only carrier of accept-state across the
252−// backend.runAgent / Coordinator.Run / sessionAgent.Run layers: a
253−// counter > 0 means a dispatched prompt is in flight and has not yet
254−// completed the dispatch handoff in Run. Close is the only way to
255−// release the reservation and is idempotent.
256−type AcceptedRun struct {
257− agent *sessionAgent
258− sessionID string
259− // seq is the monotonic accept sequence stamped by BeginAccepted. A
260− // cancel covers this handle iff seq is at or below the session's
261− // cancel mark, so a handle accepted after a cancel (higher seq) is
262− // never poisoned by it.
263− seq uint64
264− done atomic.Bool
265−}
266−
267−// Close decrements the accept counter for this reservation. It is safe
268−// to call multiple times; only the first call has effect.
269−func (r *AcceptedRun) Close() {
270− if r == nil {
271− return
272− }
273− if !r.done.CompareAndSwap(false, true) {
274− return
275− }
276− r.agent.endAccepted(r.sessionID)
277−}
278−
279−// SessionID exposes the session this reservation is for so the run path
280−// can use it without an extra parameter.
281−func (r *AcceptedRun) SessionID() string {
282− if r == nil {
283− return ""
284− }
285− return r.sessionID
286−}
287−
288−// BeginAccepted increments the accept counter for sessionID and returns
289−// a handle whose Close is the only way to decrement it. It is the only
290−// entry point that mutates acceptedRuns.
291−func (a *sessionAgent) BeginAccepted(sessionID string) *AcceptedRun {
292− a.acceptedMu.Lock()
293− defer a.acceptedMu.Unlock()
294− count, _ := a.acceptedRuns.Get(sessionID)
295− a.acceptedRuns.Set(sessionID, count+1)
296− a.acceptSeqGen++
297− return &AcceptedRun{agent: a, sessionID: sessionID, seq: a.acceptSeqGen}
298−}
299−
300−// endAccepted decrements the accept counter for sessionID. It is only
301−// called via AcceptedRun.Close. It uses a dedicated lock (not the
302−// per-session dispatch mutex) so it can run while Run holds dispatchMu
303−// for the same session without deadlocking.
304−//
305−// When the count reaches zero the session's cancel mark is dropped: no
306−// accepted handle remains for it to cover, and any handle accepted later
307−// gets a strictly higher sequence that the mark would not match anyway.
308−// Handles canceled on entry never reach RunComplete, so this is the only
309−// place that clears the mark for an all-canceled batch. Sibling handles
310−// covered by the same mark are serialized on the per-session dispatch
311−// mutex and read the mark before they Close, so this never clears it out
312−// from under a covered handle still waiting to enter Run.
313−func (a *sessionAgent) endAccepted(sessionID string) {
314− a.acceptedMu.Lock()
315− defer a.acceptedMu.Unlock()
316− count, ok := a.acceptedRuns.Get(sessionID)
317− if !ok || count <= 1 {
318− a.acceptedRuns.Del(sessionID)
319− a.cancelMark.Del(sessionID)
320− return
321− }
322− a.acceptedRuns.Set(sessionID, count-1)
323−}
324−
325−// sessionMu returns the per-session dispatch mutex, creating it on first
326−// use. Creation is guarded so concurrent callers always observe the same
327−// mutex instance for a given session.
328−func (a *sessionAgent) sessionMu(sessionID string) *sync.Mutex {
329− if mu, ok := a.dispatchMu.Get(sessionID); ok {
330− return mu
331− }
332− a.dispatchMuCreate.Lock()
333− defer a.dispatchMuCreate.Unlock()
334− if mu, ok := a.dispatchMu.Get(sessionID); ok {
335− return mu
336− }
337− mu := &sync.Mutex{}
338− a.dispatchMu.Set(sessionID, mu)
339− return mu
340−}
341−
342−// enqueueCall appends call to the session's message queue. The
343−// OnComplete hook is stripped: the caller that supplied it (typically
344−// coordinator.Run) has its own retry/coalesce scope that ends when it
345−// returns, so by the time the queue drains nobody is left to consume the
346−// buffered terminal event. The recursive Run falls back to the default
347−// broker publish, which is what existing subscribers expect for queued
348−// turns.
349−func (a *sessionAgent) enqueueCall(call SessionAgentCall) {
350− existing, ok := a.messageQueue.Get(call.SessionID)
351− if !ok {
352− existing = make([]SessionAgentCall, 0, 4)
353− }
354− queued := call
355− if call.Accepted != nil {
356− // Preserve the accept sequence after the handle is stripped so
357− // the queue-drain paths can tell a follow-up queued before a
358− // cancel (covered by the mark) from one queued after it.
359− queued.acceptSeq = call.Accepted.seq
360− }
361− queued.OnComplete = nil
362− queued.Accepted = nil
363− existing = append(existing, queued)
364− a.messageQueue.Set(call.SessionID, existing)
365−}
366−
367−// drainQueueForStep partitions the session's queued calls for the current
368−// streaming step under the per-session dispatch mutex so the filtering is
369−// atomic against a concurrent Cancel: canceledBySeq requires the caller to
370−// hold that mutex, and evaluating it here (rather than after unlocking)
371−// prevents a cancel recorded between the drain and the check from being
372−// observed inconsistently.
373−//
374−// Calls covered by a pending cancel are dropped; the dropped ones that
375−// carry a RunID are returned in canceledWithRunID so the caller can
376−// publish their terminal cancelled RunComplete (a caller waiting on that
377−// RunID, e.g. `crush run`, would otherwise hang). Uncanceled calls without
378−// a RunID are returned in fold to be folded into the active turn,
379−// preserving the existing follow-up behavior. Uncanceled calls that carry
380−// a RunID are left in the queue so each runs as its own turn via the
381−// recursive run path and publishes its own RunComplete, giving every
382−// RunID-bearing prompt an explicit lifecycle instead of being silently
383−// absorbed into another turn. fold is processed by the caller without the
384−// lock held.
385−func (a *sessionAgent) drainQueueForStep(sessionID string) (fold, canceledWithRunID []SessionAgentCall) {
386− dispatchLock := a.sessionMu(sessionID)
387− dispatchLock.Lock()
388− defer dispatchLock.Unlock()
389− queuedCalls, _ := a.messageQueue.Get(sessionID)
390− var keep []SessionAgentCall
391− for _, queued := range queuedCalls {
392− if a.canceledBySeq(sessionID, queued.acceptSeq) {
393− if queued.RunID != "" {
394− canceledWithRunID = append(canceledWithRunID, queued)
395− }
396− continue
397− }
398− if queued.RunID != "" {
399− keep = append(keep, queued)
400− continue
401− }
402− fold = append(fold, queued)
403− }
404− if len(keep) == 0 {
405− a.messageQueue.Del(sessionID)
406− } else {
407− a.messageQueue.Set(sessionID, keep)
408− }
409− return fold, canceledWithRunID
410−}
411−
412−// publishCanceledQueueDrops emits a terminal cancelled RunComplete for
413−// every dropped queued call that carries a RunID. A queued prompt removed
414−// from the queue without ever running — covered by a pending cancel, or
415−// cleared by Cancel/ClearQueue — would otherwise leave a caller blocked on
416−// that RunID: `crush run` ignores live message events and exits only on a
417−// RunComplete whose RunID matches. Calls without a RunID had no such waiter
418−// and are dropped silently as before. A detached, bounded context keeps the
419−// must-deliver publish alive even when the run context that triggered the
420−// drop is already canceled.
421−func (a *sessionAgent) publishCanceledQueueDrops(drops []SessionAgentCall) {
422− var hasRunID bool
423− for _, d := range drops {
424− if d.RunID != "" {
425− hasRunID = true
426− break
427− }
428− }
429− if !hasRunID {
430− return
431− }
432− ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
433− defer cancel()
434− for _, d := range drops {
435− if d.RunID == "" {
436− continue
437− }
438− a.publishRunComplete(ctx, d, notify.RunComplete{
439− SessionID: d.SessionID,
440− RunID: d.RunID,
441− Cancelled: true,
442− })
443158 }
444159}
445160
446−// clearQueueAndNotify removes all queued prompts for the session and
447−// publishes a terminal cancelled RunComplete for any that carried a RunID,
448−// so callers waiting on those RunIDs (e.g. `crush run`) are not left
449−// hanging when their queued prompt is discarded without running.
450−func (a *sessionAgent) clearQueueAndNotify(sessionID string) {
451− queued, ok := a.messageQueue.Get(sessionID)
452− a.messageQueue.Del(sessionID)
453− if !ok {
454− return
455− }
456− a.publishCanceledQueueDrops(queued)
457−}
458−
459−// clearPendingCancel removes any pending-cancel mark for sessionID. It
460−// takes the per-session dispatch lock so it is ordered against Cancel
461−// and the dispatch handoff.
462−func (a *sessionAgent) clearPendingCancel(sessionID string) {
463− mu := a.sessionMu(sessionID)
464− mu.Lock()
465− defer mu.Unlock()
466− a.cancelMark.Del(sessionID)
467−}
468−
469−// canceledBySeq reports whether an accepted handle or queued call with
470−// the given accept sequence is covered by a pending cancel for the
471−// session. Callers must hold the session's dispatch mutex. A tracked
472−// sequence (seq > 0) is covered only when it is at or below the cancel
473−// high-water mark, so a prompt accepted after the cancel (higher seq) is
474−// never poisoned. An untracked sequence (seq == 0, an in-process enqueue
475−// with no accept reservation) is covered whenever any mark is present,
476−// preserving the pre-sequence behavior. The mark is not consumed: it
477−// stays so every sibling handle it covers observes the same cancel, and
478−// a later handle (higher seq) ignores it regardless.
479−func (a *sessionAgent) canceledBySeq(sessionID string, seq uint64) bool {
480− mark, ok := a.cancelMark.Get(sessionID)
481− if !ok || mark == 0 {
482− return false
483− }
484− return seq == 0 || seq <= mark
485−}
486−
487−// persistCanceledTurn writes the user/assistant records for a turn that
488−// was canceled before (or just as) streaming would have produced them.
489−// It creates the user message only when it was not already created by an
490−// earlier createUserMessage call (userMsgCreated), then writes an
491−// assistant message with FinishReasonCanceled. Both writes use
492−// context.WithoutCancel(ctx) so workspace shutdown (which cancels the run
493−// context) can't drop them.
494−func (a *sessionAgent) persistCanceledTurn(ctx context.Context, call SessionAgentCall, userMsgCreated bool) error {
495− writeCtx, cancel := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second)
496− defer cancel()
497− if !userMsgCreated {
498− if _, err := a.createUserMessage(writeCtx, call); err != nil {
499− return err
500− }
501− }
502− largeModel := a.largeModel.Get()
503− assistant, err := a.messages.Create(writeCtx, call.SessionID, message.CreateMessageParams{
504− Role: message.Assistant,
505− Parts: []message.ContentPart{},
506− Model: largeModel.ModelCfg.Model,
507− Provider: largeModel.ModelCfg.Provider,
508− })
509− if err != nil {
510− return err
511− }
512− assistant.AddFinish(message.FinishReasonCanceled, "User canceled request", "")
513− return a.messages.Update(writeCtx, assistant)
514−}
515−
516−// publishRunComplete emits the authoritative terminal event for a turn.
517−// It honors the per-call OnComplete hook when set (so the coordinator can
518−// coalesce retries) and otherwise falls back to the RunComplete broker.
519−// ctx is used only for the bounded-blocking must-deliver publish; the
520−// terminal payload is supplied by the caller. This is the single emit path
521−// shared by the streaming defer and the cancel-on-entry early return so a
522−// caller waiting on RunComplete (e.g. `crush run` with a RunID) always
523−// observes exactly one terminal event regardless of which Run branch ends
524−// the turn.
525−func (a *sessionAgent) publishRunComplete(ctx context.Context, call SessionAgentCall, complete notify.RunComplete) {
526− if call.OnComplete != nil {
527− call.OnComplete(complete)
528− return
529− }
530− if a.runComplete == nil {
531− return
532− }
533− a.runComplete.PublishMustDeliver(ctx, pubsub.UpdatedEvent, complete)
534−}
535−
536−// ValidateCall performs the cheap structural validation that
537−// sessionAgent.Run requires before a call can be dispatched: a call must
538−// carry either a non-empty prompt or a text attachment, and it must name a
539−// session. It is exported so callers that accept a run before dispatching it
540−// (e.g. backend.SendMessage) can apply the same checks and keep the error
541−// contract consistent.
542−func ValidateCall(call SessionAgentCall) error {
161+func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy.AgentResult, error) {
543162 if call.Prompt == "" && !message.ContainsTextAttachment(call.Attachments) {
544− return ErrEmptyPrompt
163+ return nil, ErrEmptyPrompt
545164 }
546165 if call.SessionID == "" {
547− return ErrSessionMissing
548− }
549− return nil
550−}
551−
552−func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *fantasy.AgentResult, retErr error) {
553− if err := ValidateCall(call); err != nil {
554− return nil, err
166+ return nil, ErrSessionMissing
555167 }
556168
557− // genCtx/cancel are the run context and its cancel func. For the
558− // accepted (fire-and-forget) dispatch path they are created under
559− // dispatchMu below so a concurrent Cancel can observe the
560− // activeRequests entry before the assistant message exists. For
561− // the in-process path they stay nil here and are created later,
562− // preserving the original ordering.
563− var (
564− genCtx context.Context
565− cancel context.CancelFunc
566− activeRegistered bool
567− userMsgCreated bool
568− )
569−
570− if call.Accepted != nil {
571− // Serialize the accepted -> (cancel-on-entry | queued |
572− // active) transition against a concurrent Cancel. Cancel takes
573− // the same per-session lock, so every cancel observes at least
574− // one of: a cancel mark, an activeRequests entry, or a
575− // messageQueue entry it then clears.
576− mu := a.sessionMu(call.SessionID)
577− mu.Lock()
578−
579− if a.canceledBySeq(call.SessionID, call.Accepted.seq) {
580− // Cancel-on-entry: a cancel arrived while this run was
581− // dispatched but not yet active, and this handle's accept
582− // sequence is at or below the session's cancel mark. The
583− // mark is left in place so sibling handles it also covers
584− // observe the same cancel; release the accept reservation,
585− // drop the lock, and persist a canceled turn without
586− // entering Stream.
587− //
588− // This path returns before the streaming defer that
589− // publishes RunComplete is installed, so emit the terminal
590− // event explicitly. Without it, a caller waiting on
591− // RunComplete for this RunID (e.g. `crush run`, which
592− // ignores message events and blocks on RunComplete) would
593− // hang on an immediately-canceled accepted run.
594− call.Accepted.Close()
595− mu.Unlock()
596− complete := notify.RunComplete{
597− SessionID: call.SessionID,
598− RunID: call.RunID,
599− Cancelled: true,
600− }
601− if err := a.persistCanceledTurn(ctx, call, false); err != nil {
602− complete.Error = err.Error()
603− a.publishRunComplete(ctx, call, complete)
604− return nil, err
605− }
606− a.publishRunComplete(ctx, call, complete)
607− return nil, nil
608− }
609−
610− if a.IsSessionBusy(call.SessionID) {
611− // Busy: an earlier prompt is active. Queue this call and
612− // release the accept reservation. A Cancel arriving after
613− // this point sees the active entry and clears the queue.
614− a.enqueueCall(call)
615− call.Accepted.Close()
616− mu.Unlock()
617− return nil, nil
169+ // Queue the message if busy
170+ if a.IsSessionBusy(call.SessionID) {
171+ existing, ok := a.messageQueue.Get(call.SessionID)
172+ if !ok {
173+ existing = []SessionAgentCall{}
618174 }
619−
620− // Idle: become the active run. Register the cancel func before
621− // dropping the lock so a Cancel that arrives between here and
622− // assistant creation is not lost.
623− runCtx := context.WithValue(ctx, tools.SessionIDContextKey, call.SessionID)
624− genCtx, cancel = context.WithCancel(runCtx)
625− a.activeRequests.Set(call.SessionID, cancel)
626− activeRegistered = true
627− call.Accepted.Close()
628− mu.Unlock()
629−
630− defer cancel()
631− defer a.activeRequests.Del(call.SessionID)
632− } else if a.IsSessionBusy(call.SessionID) {
633− // Queue the message if busy. Strip OnComplete: the caller that
634− // supplied the hook (typically coordinator.Run) has its own
635− // retry/coalesce scope that ends when it returns, so by the time
636− // the queue drains nobody is left to consume the buffered
637− // terminal event. The recursive Run will fall back to the
638− // default broker publish, which is what existing subscribers
639− // expect for queued turns.
640− a.enqueueCall(call)
175+ existing = append(existing, call)
176+ a.messageQueue.Set(call.SessionID, existing)
641177 return nil, nil
642178 }
643179
644180 // Copy mutable fields under lock to avoid races with SetTools/SetModels.
645181 agentTools := a.tools.Copy()
646− // Per-step tool snapshot reused across PrepareStep calls; only
647− // re-copied when SetTools bumps toolsGen (see PrepareStep below).
648− var (
649− stepTools []fantasy.AgentTool
650− stepToolsGen uint64
651− stepToolsInit bool
652− )
653182 largeModel := a.largeModel.Get()
654183 systemPrompt := a.systemPrompt.Get()
655184 promptPrefix := a.systemPromptPrefix.Get()
@@ -693,11 +222,11 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
693222 }
694223
695224 var wg sync.WaitGroup
696− // Generate title from the first real (non-shell) user prompt.
697− if !hasUserTextMessage(msgs) {
225+ // Generate title if first message.
226+ if len(msgs) == 0 {
698227 titleCtx := ctx // Copy to avoid race with ctx reassignment below.
699228 wg.Go(func() {
700− a.GenerateTitle(titleCtx, call.SessionID, call.Prompt)
229+ a.generateTitle(titleCtx, call.SessionID, call.Prompt)
701230 })
702231 }
703232 defer wg.Wait()
@@ -707,96 +236,29 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
707236 if err != nil {
708237 return nil, err
709238 }
710− userMsgCreated = true
711239
712240 // Add the session to the context.
713241 ctx = context.WithValue(ctx, tools.SessionIDContextKey, call.SessionID)
714242
715− // For the accepted dispatch path the run context and cancel func
716− // were already created and registered under dispatchMu above; reuse
717− // them. For the in-process path create them here, preserving the
718− // original ordering.
719− if !activeRegistered {
720− genCtx, cancel = context.WithCancel(ctx)
721− a.activeRequests.Set(call.SessionID, cancel)
722−
723− defer cancel()
724− defer a.activeRequests.Del(call.SessionID)
725− }
726− // skipRunComplete is set just before the queued-recursion path so
727− // the outer Run doesn't publish a RunComplete that would race
728− // with — and be superseded by — the recursive call's own
729− // RunComplete (each queued user prompt is its own turn and
730− // publishes exactly one terminal event).
731− var skipRunComplete bool
732− // currentAssistant is declared here so the deferred RunComplete
733− // publish below can capture the pointer that PrepareStep will
734− // later (re)assign for each streaming step. The final assistant
735− // message of the turn is the value reachable through this
736− // pointer when the defer runs.
737− var currentAssistant *message.Message
738− // Drain any debounced message updates before returning. message.Service
739− // already flushes synchronously on terminal updates, but a defer here
740− // guarantees the contract at every Run exit (success, error, panic
741− // recovery upstream) without callers needing to know.
742− //
743− // After the flush completes — meaning all per-message
744− // Publish(UpdatedEvent) calls have fired and been buffered into
745− // every subscriber's channel — publish the authoritative
746− // RunComplete event for this turn. The flush-then-publish order
747− // gives well-behaved clients the best chance of seeing the final
748− // message event before RunComplete; the embedded Text field
749− // reconciles for clients that observe the events out of order
750− // (the pubsub broker fan-in does not serialize publishes from
751− // different upstream brokers).
752− defer func() {
753− // Use a context detached from the run context: workspace
754− // shutdown cancels ctx before this goroutine returns, but the
755− // buffered streaming deltas must still land before the DB is
756− // closed. A short timeout bounds the flush.
757− flushCtx, flushCancel := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second)
758− defer flushCancel()
759− if flushErr := a.messages.FlushAll(flushCtx); flushErr != nil {
760− slog.Error("Failed to flush pending message updates after run", "error", flushErr)
761− }
762− if skipRunComplete {
763− return
764− }
765− complete := notify.RunComplete{SessionID: call.SessionID, RunID: call.RunID}
766− if currentAssistant != nil {
767− complete.MessageID = currentAssistant.ID
768− complete.Text = currentAssistant.Content().String()
769− }
770− if retErr != nil {
771− complete.Error = retErr.Error()
772− complete.Cancelled = errors.Is(retErr, context.Canceled)
773− } else if ctx.Err() != nil {
774− complete.Cancelled = true
775− }
776− // Prefer the per-call hook when supplied so the coordinator
777− // can coalesce retries (e.g. unauthorized → re-auth → retry)
778− // into a single user-visible terminal event. The fallback
779− // must-deliver publish applies bounded-blocking semantics to
780− // the authoritative terminal event so a momentarily-full
781− // subscriber channel can't silently drop it and hang
782− // non-interactive clients waiting on RunComplete.
783− a.publishRunComplete(ctx, call, complete)
784− }()
243+ genCtx, cancel := context.WithCancel(ctx)
244+ a.activeRequests.Set(call.SessionID, cancel)
245+
246+ defer cancel()
247+ defer a.activeRequests.Del(call.SessionID)
785248
786249 history, files := a.preparePrompt(msgs, largeModel.CatwalkCfg.SupportsImages, call.Attachments...)
787250
788251 startTime := time.Now()
789252 a.eventPromptSent(call.SessionID)
790253
791− var stepMessages []fantasy.Message
254+ var currentAssistant *message.Message
792255 var shouldSummarize bool
793− sanitizedToolCalls := make(map[string]bool)
794256 // Don't send MaxOutputTokens if 0 — some providers (e.g. LM Studio) reject it
795257 var maxOutputTokens *int64
796258 if call.MaxOutputTokens > 0 {
797259 maxOutputTokens = &call.MaxOutputTokens
798260 }
799− result, err = agent.Stream(genCtx, fantasy.AgentStreamCall{
261+ result, err := agent.Stream(genCtx, fantasy.AgentStreamCall{
800262 Prompt: message.PromptWithTextAttachments(call.Prompt, call.Attachments),
801263 Files: files,
802264 Messages: history,
@@ -814,29 +276,11 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
814276 }
815277
816278 // Use latest tools (updated by SetTools when MCP tools change).
817− // Reuse the previous step's copy unless SetTools has bumped the
818− // generation, so an unchanged tool set isn't re-copied every step.
819− if gen := a.toolsGen.Load(); !stepToolsInit || gen != stepToolsGen {
820− stepTools = a.tools.Copy()
821− stepToolsGen = gen
822− stepToolsInit = true
823− }
824− prepared.Tools = stepTools
825−
826− // Drain queued follow-up prompts for this step. Calls covered
827− // by a cancel recorded while they sat in the queue are dropped:
828− // a cancel that arrived after a prompt was queued must not let
829− // it run as part of this step. Coverage is per-call by accept
830− // sequence so a follow-up queued after the cancel (higher seq)
831− // is not dropped. A dropped prompt carrying a RunID still gets
832− // its terminal cancelled RunComplete so a caller waiting on it
833− // does not hang. Uncanceled prompts without a RunID are folded
834− // into this turn; uncanceled prompts with a RunID are left
835− // queued so each runs as its own turn (with its own
836− // RunComplete) via the recursive run path below.
837− fold, canceledRunIDs := a.drainQueueForStep(call.SessionID)
838− a.publishCanceledQueueDrops(canceledRunIDs)
839− for _, queued := range fold {
279+ prepared.Tools = a.tools.Copy()
280+
281+ queuedCalls, _ := a.messageQueue.Get(call.SessionID)
282+ a.messageQueue.Del(call.SessionID)
283+ for _, queued := range queuedCalls {
840284 userMessage, createErr := a.createUserMessage(callContext, queued)
841285 if createErr != nil {
842286 return callContext, prepared, createErr
@@ -866,13 +310,6 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
866310 prepared.Messages = append([]fantasy.Message{fantasy.NewSystemMessage(promptPrefix)}, prepared.Messages...)
867311 }
868312
869− // Save a reference to the prepared messages for token
870− // estimation in OnStepFinish. No clone needed here — the
871− // messages are not modified between PrepareStep and
872− // OnStepFinish (which run sequentially), and the clone is
873− // only needed when the provider returns zero usage.
874− stepMessages = prepared.Messages
875−
876313 var assistantMsg message.Message
877314 assistantMsg, err = a.messages.Create(callContext, call.SessionID, message.CreateMessageParams{
878315 Role: message.Assistant,
@@ -944,14 +381,10 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
944381 slog.Warn("Provider request failed, retrying", providerRetryLogFields(err, delay)...)
945382 },
946383 OnToolCall: func(tc fantasy.ToolCallContent) error {
947− input, wasSanitized := sanitizeToolInput(tc.ToolName, tc.ToolCallID, tc.Input)
948− if wasSanitized {
949− sanitizedToolCalls[tc.ToolCallID] = true
950− }
951384 toolCall := message.ToolCall{
952385 ID: tc.ToolCallID,
953386 Name: tc.ToolName,
954− Input: input,
387+ Input: tc.Input,
955388 ProviderExecuted: false,
956389 Finished: true,
957390 }
@@ -962,10 +395,6 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
962395 },
963396 OnToolResult: func(result fantasy.ToolResultContent) error {
964397 toolResult := a.convertToToolResult(result)
965− if sanitizedToolCalls[result.ToolCallID] {
966− toolResult.Content = "Tool call failed: arguments were not valid JSON. Please check your tool call format and try again."
967− toolResult.IsError = true
968− }
969398 // Use parent ctx instead of genCtx to ensure the message is created
970399 // even if the request is canceled mid-stream
971400 _, createMsgErr := a.messages.Create(ctx, currentAssistant.SessionID, message.CreateMessageParams{
@@ -977,9 +406,6 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
977406 return createMsgErr
978407 },
979408 OnStepFinish: func(stepResult fantasy.StepResult) error {
980− for _, w := range stepResult.Warnings {
981− slog.Warn("Provider warning", "type", w.Type, "message", w.Message)
982− }
983409 finishReason := message.FinishReasonUnknown
984410 switch stepResult.FinishReason {
985411 case fantasy.FinishReasonLength:
@@ -1009,9 +435,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1009435 if getSessionErr != nil {
1010436 return getSessionErr
1011437 }
1012− usage, estimated := fallbackStepUsage(stepMessages, stepResult)
1013− a.updateSessionUsage(largeModel, &updatedSession, usage, a.openrouterCost(stepResult.ProviderMetadata), estimated)
1014− extractHyperCredits(stepResult.ProviderMetadata)
438+ a.updateSessionUsage(largeModel, &updatedSession, stepResult.Usage, a.openrouterCost(stepResult.ProviderMetadata))
1015439 _, sessionErr := a.sessions.Save(ctx, updatedSession)
1016440 if sessionErr != nil {
1017441 return sessionErr
@@ -1053,36 +477,13 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1053477 isHyper := largeModel.ModelCfg.Provider == hyper.Name
1054478 isCancelErr := errors.Is(err, context.Canceled)
1055479 if currentAssistant == nil {
1056− // Cancel-before-assistant-creation window: the run was
1057− // canceled after activeRequests.Set but before PrepareStep
1058− // created the assistant message. Without this, the turn
1059− // would return with no FinishReasonCanceled marker and no
1060− // user-visible record. The user message was already created
1061− // above, so persistCanceledTurn only writes the assistant
1062− // record.
1063− if isCancelErr {
1064− if persistErr := a.persistCanceledTurn(ctx, call, userMsgCreated); persistErr != nil {
1065− return nil, persistErr
1066− }
1067− }
1068480 return result, err
1069481 }
1070− // Persist final state with a context detached from the run
1071− // context. The run context (ctx) is derived from the
1072− // workspace context, which workspace shutdown cancels before
1073− // agent goroutines finish; using ctx here would drop the
1074− // final assistant state. WithoutCancel keeps the values
1075− // (e.g. session ID) while ignoring cancellation, and a short
1076− // timeout bounds the cleanup writes.
1077− cleanupCtx, cleanupCancel := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second)
1078− defer cleanupCancel()
1079482 // Ensure we finish thinking on error to close the reasoning state.
1080483 currentAssistant.FinishThinking()
1081484 toolCalls := currentAssistant.ToolCalls()
1082− // INFO: we use the cleanup context here because the genCtx has been cancelled.
1083− // Only load messages from the current assistant message onward — tool
1084− // results for this turn's tool calls can only exist after it.
1085− msgs, createErr := a.messages.ListAfter(cleanupCtx, currentAssistant.SessionID, currentAssistant.ID)
485+ // INFO: we use the parent context here because the genCtx has been cancelled.
486+ msgs, createErr := a.messages.List(ctx, currentAssistant.SessionID)
1086487 if createErr != nil {
1087488 return nil, createErr
1088489 }
@@ -1091,7 +492,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1091492 tc.Finished = true
1092493 tc.Input = "{}"
1093494 currentAssistant.AddToolCall(tc)
1094− updateErr := a.messages.Update(cleanupCtx, *currentAssistant)
495+ updateErr := a.messages.Update(ctx, *currentAssistant)
1095496 if updateErr != nil {
1096497 return nil, updateErr
1097498 }
@@ -1124,7 +525,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1124525 Content: content,
1125526 IsError: true,
1126527 }
1127− _, createErr = a.messages.Create(cleanupCtx, currentAssistant.SessionID, message.CreateMessageParams{
528+ _, createErr = a.messages.Create(ctx, currentAssistant.SessionID, message.CreateMessageParams{
1128529 Role: message.Tool,
1129530 Parts: []message.ContentPart{
1130531 toolResult,
@@ -1142,6 +543,14 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1142543 currentAssistant.AddFinish(message.FinishReasonCanceled, "User canceled request", "")
1143544 } else if isHyper && errors.As(err, &providerErr) && providerErr.StatusCode == http.StatusUnauthorized {
1144545 currentAssistant.AddFinish(message.FinishReasonError, "Unauthorized", `Please re-authenticate with Hyper. You can also run "crush auth" to re-authenticate.`)
546+ if a.notify != nil {
547+ a.notify.Publish(pubsub.CreatedEvent, notify.Notification{
548+ SessionID: call.SessionID,
549+ SessionTitle: currentSession.Title,
550+ Type: notify.TypeReAuthenticate,
551+ ProviderID: largeModel.ModelCfg.Provider,
552+ })
553+ }
1145554 } else if isHyper && errors.As(err, &providerErr) && providerErr.StatusCode == http.StatusPaymentRequired {
1146555 url := hyper.BaseURL()
1147556 link := linkStyle.Hyperlink(url, "id=hyper").Render(url)
@@ -1163,9 +572,9 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1163572 } else {
1164573 currentAssistant.AddFinish(message.FinishReasonError, defaultTitle, err.Error())
1165574 }
1166− // Note: we use the cleanup context here because the genCtx has been
575+ // Note: we use the parent context here because the genCtx has been
1167576 // cancelled.
1168− updateErr := a.messages.Update(cleanupCtx, *currentAssistant)
577+ updateErr := a.messages.Update(ctx, *currentAssistant)
1169578 if updateErr != nil {
1170579 return nil, updateErr
1171580 }
@@ -1206,106 +615,13 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1206615 })
1207616 }
1208617
1209− // Hand off to the next queued prompt (if any) under dispatchMu so
1210− // the transition from this finished run to the queued run is atomic
1211− // against a concurrent Cancel. activeRequests for this session was
1212− // just deleted above, so without the lock there is a window in
1213− // which the session looks idle and a cancel becomes a no-op that
1214− // fails to stop the queued prompt. Holding the lock lets us observe
1215− // a pending cancel recorded against the session and drop the queue
1216− // instead of running it, and (for the recursion) hand a fresh
1217− // accept reservation to the dequeued call so acceptedRuns stays > 0
1218− // across the recursive Run's own dispatch handoff — keeping the
1219− // session observable to Cancel for the entire transition and
1220− // closing the dequeue -> re-register window.
1221− mu := a.sessionMu(call.SessionID)
1222− mu.Lock()
1223− queuedMessages, _ := a.messageQueue.Get(call.SessionID)
1224− if mark, ok := a.cancelMark.Get(call.SessionID); ok && mark > 0 && len(queuedMessages) > 0 {
1225− // A cancel was recorded for this session (e.g. it arrived while
1226− // this run was active and follow-ups had been queued). Drop the
1227− // queued prompts it covers (accept sequence at or below the
1228− // mark, or untracked); keep any queued after the cancel (higher
1229− // sequence) so they still run.
1230− var kept []SessionAgentCall
1231− var canceledRunIDDrops []SessionAgentCall
1232− for _, q := range queuedMessages {
1233− if q.acceptSeq == 0 || q.acceptSeq <= mark {
1234− if q.RunID != "" {
1235− canceledRunIDDrops = append(canceledRunIDDrops, q)
1236− }
1237− continue
1238− }
1239− kept = append(kept, q)
1240− }
1241− queuedMessages = kept
1242− a.messageQueue.Set(call.SessionID, kept)
1243− // A dropped prompt carrying a RunID must still publish its
1244− // terminal cancelled RunComplete so a caller waiting on that
1245− // RunID does not hang.
1246− a.publishCanceledQueueDrops(canceledRunIDDrops)
1247− }
1248− if len(queuedMessages) == 0 {
1249− // No queued work. Clear the cancel mark only when no accepted
1250− // run remains in flight that it might still cover; otherwise a
1251− // sibling prompt (sequence at or below the mark) waiting to
1252− // enter Run would lose its cancellation. When accepted runs are
1253− // gone, this also clears a stale mark so it can't catch a
1254− // future run.
1255− a.messageQueue.Del(call.SessionID)
1256− a.acceptedMu.Lock()
1257− inFlight, _ := a.acceptedRuns.Get(call.SessionID)
1258− a.acceptedMu.Unlock()
1259− if inFlight == 0 {
1260− a.cancelMark.Del(call.SessionID)
1261− }
1262− mu.Unlock()
618+ queuedMessages, ok := a.messageQueue.Get(call.SessionID)
619+ if !ok || len(queuedMessages) == 0 {
1263620 return result, err
1264621 }
1265− // There are queued messages, restart the loop. Suppress the outer
1266− // defer's emit: it would otherwise observe the recursive Run's retErr
1267− // (named-return clobbering through the return below) against this
1268− // turn's MessageID/Text and publish a mixed, racing event.
1269− skipRunComplete = true
1270− // Decide whether this turn still owes its own terminal RunComplete.
1271− // Each submitted prompt with a RunID has its own lifecycle, so a turn
1272− // that is finished and handing off to a *different* queued prompt must
1273− // publish its own RunComplete here — leaving it to the recursive turn
1274− // (which carries a different RunID) would hang a caller waiting on
1275− // this turn's RunID. The exception is the summarize-continuation path,
1276− // which re-queues this same call (same RunID) to resume after a
1277− // summary; in that case the eventual terminal turn for this RunID
1278− // publishes, so publishing now would double-emit.
1279− outerOwesRunComplete := call.RunID != ""
1280− if outerOwesRunComplete {
1281− for _, q := range queuedMessages {
1282− if q.RunID == call.RunID {
1283− outerOwesRunComplete = false
1284− break
1285− }
1286− }
1287− }
622+ // There are queued messages restart the loop.
1288623 firstQueuedMessage := queuedMessages[0]
1289624 a.messageQueue.Set(call.SessionID, queuedMessages[1:])
1290− // Reserve a fresh accept for the dequeued prompt before dropping the
1291− // lock so acceptedRuns > 0 across the handoff into the recursive
1292− // Run. This closes the window between this dequeue and the recursive
1293− // Run registering its activeRequests entry: a cancel arriving in
1294− // that window now records a pending cancel (acceptedRuns > 0) that
1295− // the recursive Run's accepted path observes as cancel-on-entry.
1296− firstQueuedMessage.Accepted = a.BeginAccepted(call.SessionID)
1297− mu.Unlock()
1298− if outerOwesRunComplete {
1299− complete := notify.RunComplete{SessionID: call.SessionID, RunID: call.RunID}
1300− if currentAssistant != nil {
1301− complete.MessageID = currentAssistant.ID
1302− complete.Text = currentAssistant.Content().String()
1303− }
1304− if ctx.Err() != nil {
1305− complete.Cancelled = true
1306− }
1307− a.publishRunComplete(ctx, call, complete)
1308− }
1309625 return a.Run(ctx, firstQueuedMessage)
1310626}
1311627
@@ -1337,21 +653,15 @@ func (a *sessionAgent) Summarize(ctx context.Context, sessionID string, opts fan
1337653 a.activeRequests.Set(sessionID, cancel)
1338654 defer a.activeRequests.Del(sessionID)
1339655 defer cancel()
1340− defer func() {
1341− if flushErr := a.messages.FlushAll(ctx); flushErr != nil {
1342− slog.Error("Failed to flush pending message updates after summarize", "error", flushErr)
1343− }
1344− }()
1345656
1346− agent := fantasy.NewAgent(
1347− largeModel.Model,
657+ agent := fantasy.NewAgent(largeModel.Model,
1348658 fantasy.WithSystemPrompt(string(summaryPrompt)),
1349659 fantasy.WithUserAgent(userAgent),
1350660 )
1351661 summaryMessage, err := a.messages.Create(ctx, sessionID, message.CreateMessageParams{
1352662 Role: message.Assistant,
1353− Model: largeModel.ModelCfg.Model,
1354− Provider: largeModel.ModelCfg.Provider,
663+ Model: largeModel.Model.Model(),
664+ Provider: largeModel.Model.Provider(),
1355665 IsSummaryMessage: true,
1356666 })
1357667 if err != nil {
@@ -1422,17 +732,15 @@ func (a *sessionAgent) Summarize(ctx context.Context, sessionID string, opts fan
1422732 }
1423733 openrouterCost = &newCost
1424734 }
1425− extractHyperCredits(step.ProviderMetadata)
1426735 }
1427736
1428− a.updateSessionUsage(largeModel, &currentSession, resp.TotalUsage, openrouterCost, false)
737+ a.updateSessionUsage(largeModel, &currentSession, resp.TotalUsage, openrouterCost)
1429738
1430739 // Just in case, get just the last usage info.
1431740 usage := resp.Response.Usage
1432741 currentSession.SummaryMessageID = summaryMessage.ID
1433− currentSession.CompletionTokens = summaryCompletionTokens(usage, summaryMessage)
742+ currentSession.CompletionTokens = usage.OutputTokens
1434743 currentSession.PromptTokens = 0
1435− currentSession.EstimatedUsage = usageIsZero(usage)
1436744 _, err = a.sessions.Save(genCtx, currentSession)
1437745 if err != nil {
1438746 return err
@@ -1454,10 +762,7 @@ func (a *sessionAgent) Summarize(ctx context.Context, sessionID string, opts fan
1454762 return qErr
1455763}
1456764
1457−// cacheControlOptions is computed once for the process lifetime: the env check
1458−// is constant and callers only read (never mutate) the returned map, so the
1459−// same shared value can be reused across the ~3 calls per step.
1460−var cacheControlOptions = sync.OnceValue(func() fantasy.ProviderOptions {
765+func (a *sessionAgent) getCacheControlOptions() fantasy.ProviderOptions {
1461766 if t, _ := strconv.ParseBool(os.Getenv("CRUSH_DISABLE_ANTHROPIC_CACHE")); t {
1462767 return fantasy.ProviderOptions{}
1463768 }
@@ -1472,10 +777,6 @@ var cacheControlOptions = sync.OnceValue(func() fantasy.ProviderOptions {
1472777 CacheControl: anthropic.CacheControl{Type: "ephemeral"},
1473778 },
1474779 }
1475−})
1476−
1477−func (a *sessionAgent) getCacheControlOptions() fantasy.ProviderOptions {
1478− return cacheControlOptions()
1479780}
1480781
1481782func (a *sessionAgent) createUserMessage(ctx context.Context, call SessionAgentCall) (message.Message, error) {
@@ -1496,11 +797,10 @@ func (a *sessionAgent) createUserMessage(ctx context.Context, call SessionAgentC
1496797}
1497798
1498799func (a *sessionAgent) preparePrompt(msgs []message.Message, supportsImages bool, attachments ...message.Attachment) ([]fantasy.Message, []fantasy.FilePart) {
1499− history := make([]fantasy.Message, 0, len(msgs)+1)
800+ var history []fantasy.Message
1500801 if !a.isSubAgent {
1501802 history = append(history, fantasy.NewUserMessage(
1502− fmt.Sprintf(
1503− "<system_reminder>%s</system_reminder>",
803+ fmt.Sprintf("<system_reminder>%s</system_reminder>",
1504804 `This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.
1505805If you are working on tasks that would benefit from a todo list please use the "todos" tool to create one.
1506806If not, please feel free to ignore. Again do not mention this message to the user.`,
@@ -1596,7 +896,7 @@ func filterOrphanedToolResults(m message.Message, knownToolCallIDs map[string]st
1596896 if len(aiMsgs) == 0 {
1597897 return fantasy.Message{}, false
1598898 }
1599− validParts := make([]fantasy.MessagePart, 0, len(aiMsgs[0].Content))
899+ var validParts []fantasy.MessagePart
1600900 for _, part := range aiMsgs[0].Content {
1601901 tr, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](part)
1602902 if !ok {
@@ -1606,8 +906,7 @@ func filterOrphanedToolResults(m message.Message, knownToolCallIDs map[string]st
1606906 if _, known := knownToolCallIDs[tr.ToolCallID]; known {
1607907 validParts = append(validParts, part)
1608908 } else {
1609− slog.Warn(
1610− "Dropping orphaned tool result with no matching tool call",
909+ slog.Warn("Dropping orphaned tool result with no matching tool call",
1611910 "tool_call_id", tr.ToolCallID,
1612911 )
1613912 }
@@ -1628,13 +927,12 @@ func filterOrphanedToolResults(m message.Message, knownToolCallIDs map[string]st
1628927// conversation. Returns the message and true if any synthetic results were
1629928// produced.
1630929func syntheticToolResultsForOrphanedCalls(m message.Message, knownToolResultIDs map[string]struct{}) (fantasy.Message, bool) {
1631− syntheticParts := make([]fantasy.MessagePart, 0, len(m.ToolCalls()))
930+ var syntheticParts []fantasy.MessagePart
1632931 for _, tc := range m.ToolCalls() {
1633932 if _, hasResult := knownToolResultIDs[tc.ID]; hasResult {
1634933 continue
1635934 }
1636− slog.Warn(
1637− "Injecting synthetic tool result for orphaned tool call",
935+ slog.Warn("Injecting synthetic tool result for orphaned tool call",
1638936 "tool_call_id", tc.ID,
1639937 "tool_name", tc.Name,
1640938 )
@@ -1655,66 +953,44 @@ func syntheticToolResultsForOrphanedCalls(m message.Message, knownToolResultIDs
1655953}
1656954
1657955func (a *sessionAgent) getSessionMessages(ctx context.Context, session session.Session) ([]message.Message, error) {
1658− if session.SummaryMessageID != "" {
1659− msgs, err := a.messages.ListAfter(ctx, session.ID, session.SummaryMessageID)
1660− if err != nil {
1661− return nil, fmt.Errorf("failed to list messages after summary: %w", err)
1662− }
1663− if len(msgs) > 0 {
1664− msgs[0].Role = message.User
1665− }
1666− return msgs, nil
1667− }
1668−
1669956 msgs, err := a.messages.List(ctx, session.ID)
1670957 if err != nil {
1671958 return nil, fmt.Errorf("failed to list messages: %w", err)
1672959 }
1673− return msgs, nil
1674−}
1675960
1676−// hasUserTextMessage reports whether any user message in msgs contains
1677−// text content (as opposed to only shell commands or other non-text parts).
1678−func hasUserTextMessage(msgs []message.Message) bool {
1679− for _, msg := range msgs {
1680− if msg.Role != message.User {
1681− continue
1682− }
1683− for _, part := range msg.Parts {
1684− if tc, ok := part.(message.TextContent); ok && tc.Text != "" {
1685− return true
961+ if session.SummaryMessageID != "" {
962+ summaryMsgIndex := -1
963+ for i, msg := range msgs {
964+ if msg.ID == session.SummaryMessageID {
965+ summaryMsgIndex = i
966+ break
1686967 }
1687968 }
969+ if summaryMsgIndex != -1 {
970+ msgs = msgs[summaryMsgIndex:]
971+ msgs[0].Role = message.User
972+ }
1688973 }
1689− return false
974+ return msgs, nil
1690975}
1691976
1692−// GenerateTitle generates a session title based on the initial prompt.
1693−func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, userPrompt string) {
977+// generateTitle generates a session titled based on the initial prompt.
978+func (a *sessionAgent) generateTitle(ctx context.Context, sessionID string, userPrompt string) {
1694979 if userPrompt == "" {
1695980 return
1696981 }
1697982
1698− // Ensure the session always gets a title even if every path below
1699− // fails or the context is cancelled before we finish.
1700− var titleSaved bool
1701− defer func() {
1702− if !titleSaved {
1703− fallbackCtx, cancel := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second)
1704− defer cancel()
1705− if err := a.sessions.Rename(fallbackCtx, sessionID, DefaultSessionName); err != nil {
1706− slog.Error("Failed to save fallback session title", "error", err)
1707− }
1708− }
1709− }()
1710−
1711983 smallModel := a.smallModel.Get()
1712984 largeModel := a.largeModel.Get()
1713985 systemPromptPrefix := a.systemPromptPrefix.Get()
1714986
987+ var maxOutputTokens int64 = 40
988+ if smallModel.CatwalkCfg.CanReason {
989+ maxOutputTokens = smallModel.CatwalkCfg.DefaultMaxTokens
990+ }
991+
1715992 newAgent := func(m fantasy.LanguageModel, p []byte, tok int64) fantasy.Agent {
1716− return fantasy.NewAgent(
1717− m,
993+ return fantasy.NewAgent(m,
1718994 fantasy.WithSystemPrompt(string(p)+"\n /no_think"),
1719995 fantasy.WithMaxOutputTokens(tok),
1720996 fantasy.WithUserAgent(userAgent),
@@ -1734,40 +1010,41 @@ func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, user
17341010 },
17351011 }
17361012
1737− type modelAttempt struct {
1738− name string
1739− model Model
1740− }
1741− attempts := []modelAttempt{
1742− {"small", smallModel},
1743− {"large", largeModel},
1744− }
1745−
1746− var resp *fantasy.AgentResult
1747− var err error
1748− var model Model
1749− var success bool
1750− for _, attempt := range attempts {
1751− tok := int64(40)
1752− if attempt.model.CatwalkCfg.CanReason {
1753− tok = attempt.model.CatwalkCfg.DefaultMaxTokens
1754− }
1755− agent := newAgent(attempt.model.Model, titlePrompt, tok)
1013+ // Use the small model to generate the title.
1014+ model := smallModel
1015+ agent := newAgent(model.Model, titlePrompt, maxOutputTokens)
1016+ resp, err := agent.Stream(ctx, streamCall)
1017+ if err == nil {
1018+ // We successfully generated a title with the small model.
1019+ slog.Debug("Generated title with small model")
1020+ } else {
1021+ // It didn't work. Let's try with the big model.
1022+ slog.Error("Error generating title with small model; trying big model", "err", err)
1023+ model = largeModel
1024+ agent = newAgent(model.Model, titlePrompt, maxOutputTokens)
17561025 resp, err = agent.Stream(ctx, streamCall)
1757− if err == nil && resp.Response.FinishReason != fantasy.FinishReasonLength {
1758− model = attempt.model
1759− slog.Debug("Generated title with " + attempt.name + " model")
1760− success = true
1761− break
1762− }
1763− if err != nil {
1764− slog.Error("Error generating title with "+attempt.name+" model; trying next", "err", err)
1026+ if err == nil {
1027+ slog.Debug("Generated title with large model")
17651028 } else {
1766− slog.Error("Title generation hit token limit with " + attempt.name + " model; trying next")
1029+ // Welp, the large model didn't work either. Use the default
1030+ // session name and return.
1031+ slog.Error("Error generating title with large model", "err", err)
1032+ saveErr := a.sessions.Rename(ctx, sessionID, DefaultSessionName)
1033+ if saveErr != nil {
1034+ slog.Error("Failed to save session title", "error", saveErr)
1035+ }
1036+ return
17671037 }
17681038 }
1769− if !success {
1770− // The deferred fallback will save the default session name.
1039+
1040+ if resp == nil {
1041+ // Actually, we didn't get a response so we can't. Use the default
1042+ // session name and return.
1043+ slog.Error("Response is nil; can't generate title")
1044+ saveErr := a.sessions.Rename(ctx, sessionID, DefaultSessionName)
1045+ if saveErr != nil {
1046+ slog.Error("Failed to save session title", "error", saveErr)
1047+ }
17711048 return
17721049 }
17731050
@@ -1780,17 +1057,7 @@ func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, user
17801057 title = orphanThinkTagRegex.ReplaceAllString(title, "")
17811058
17821059 title = strings.TrimSpace(title)
1783− if title == "" {
1784− // LLM returned empty content. Use the prompt itself as a
1785− // fallback title, truncated to 50 chars, before resorting to
1786− // the generic default.
1787− fallback := strings.ReplaceAll(userPrompt, "\n", " ")
1788− fallback = strings.TrimSpace(fallback)
1789− if len(fallback) > 50 {
1790− fallback = ansi.Truncate(fallback, 50, "…")
1791− }
1792− title = cmp.Or(fallback, DefaultSessionName)
1793− }
1060+ title = cmp.Or(title, DefaultSessionName)
17941061
17951062 // Calculate usage and cost.
17961063 var openrouterCost *float64
@@ -1803,7 +1070,6 @@ func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, user
18031070 }
18041071 openrouterCost = &newCost
18051072 }
1806− extractHyperCredits(step.ProviderMetadata)
18071073 }
18081074
18091075 modelConfig := model.CatwalkCfg
@@ -1832,7 +1098,6 @@ func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, user
18321098 slog.Error("Failed to save session title and usage", "error", saveErr)
18331099 return
18341100 }
1835− titleSaved = true
18361101}
18371102
18381103func (a *sessionAgent) openrouterCost(metadata fantasy.ProviderMetadata) *float64 {
@@ -1848,85 +1113,31 @@ func (a *sessionAgent) openrouterCost(metadata fantasy.ProviderMetadata) *float6
18481113 return &opts.Usage.Cost
18491114}
18501115
1851−// extractHyperCredits reads usage.remaining.hypercredits from OpenAI
1852−// provider metadata and stores it for the next FetchCredits call.
1853−func extractHyperCredits(metadata fantasy.ProviderMetadata) {
1854− openaiMeta, ok := metadata[openai.Name]
1855− if !ok {
1856− return
1857− }
1858− pm, ok := openaiMeta.(*openai.ProviderMetadata)
1859− if !ok {
1860− return
1861− }
1862− var remaining struct {
1863− Hypercredits float64 `json:"hypercredits"`
1864− }
1865− if pm.ExtraField("remaining", &remaining) && remaining.Hypercredits > 0 {
1866− hyper.SetBalance(int(math.Round(remaining.Hypercredits)))
1867− }
1868−}
1869−
1870−func (a *sessionAgent) updateSessionUsage(model Model, session *session.Session, usage fantasy.Usage, overrideCost *float64, estimated bool) {
1871− if !usageIsZero(usage) {
1872− session.EstimatedUsage = estimated
1873− }
1874−
1116+func (a *sessionAgent) updateSessionUsage(model Model, session *session.Session, usage fantasy.Usage, overrideCost *float64) {
18751117 modelConfig := model.CatwalkCfg
18761118 cost := modelConfig.CostPer1MInCached/1e6*float64(usage.CacheCreationTokens) +
18771119 modelConfig.CostPer1MOutCached/1e6*float64(usage.CacheReadTokens) +
18781120 modelConfig.CostPer1MIn/1e6*float64(usage.InputTokens) +
18791121 modelConfig.CostPer1MOut/1e6*float64(usage.OutputTokens)
18801122
1881− if !estimated {
1882− a.eventTokensUsed(session.ID, model, usage, cost)
1123+ a.eventTokensUsed(session.ID, model, usage, cost)
1124+
1125+ // Use override cost if available (e.g., from OpenRouter).
1126+ if overrideCost != nil {
1127+ cost = *overrideCost
18831128 }
18841129
1885− if estimated {
1130+ // Skip cost accumulation
1131+ if model.FlatRate {
18861132 cost = 0
1887− } else {
1888− // Use override cost if available (e.g., from OpenRouter).
1889− if overrideCost != nil {
1890− cost = *overrideCost
1891− }
1892−
1893− // Skip cost accumulation
1894− if model.FlatRate {
1895− cost = 0
1896− }
18971133 }
18981134
18991135 session.Cost += cost
1900− updateSessionTokenCounters(session, usage)
1901−}
1902−
1903−func updateSessionTokenCounters(session *session.Session, usage fantasy.Usage) {
1904− if usage.OutputTokens != 0 {
1905− session.CompletionTokens = usage.OutputTokens
1906− }
1907− if promptTokens := usage.InputTokens + usage.CacheReadTokens; promptTokens != 0 {
1908− session.PromptTokens = promptTokens
1909− }
1910−}
1911−
1912−func summaryCompletionTokens(usage fantasy.Usage, summaryMessage message.Message) int64 {
1913− if usage.OutputTokens != 0 {
1914− return usage.OutputTokens
1915− }
1916− return approxTokenCount(summaryMessage.Content().Text) + approxTokenCount(summaryMessage.ReasoningContent().String())
1136+ session.CompletionTokens = usage.OutputTokens
1137+ session.PromptTokens = usage.InputTokens + usage.CacheReadTokens
19171138}
19181139
19191140func (a *sessionAgent) Cancel(sessionID string) {
1920− // Serialize against the dispatch handoff in Run so the accepted ->
1921− // (cancel-on-entry | queued | active) transition is atomic against
1922− // this cancel. Every cancel observes at least one of: an active
1923− // request, an accepted run (recorded as a pending cancel), or a
1924− // queue entry it then clears. If none of those hold, an idle Escape
1925− // is a true no-op and must not poison the next prompt.
1926− mu := a.sessionMu(sessionID)
1927− mu.Lock()
1928− defer mu.Unlock()
1929−
19301141 // Cancel regular requests. Don't use Take() here - we need the entry to
19311142 // remain in activeRequests so IsBusy() returns true until the goroutine
19321143 // fully completes (including error handling that may access the DB).
@@ -1942,40 +1153,16 @@ func (a *sessionAgent) Cancel(sessionID string) {
19421153 cancel()
19431154 }
19441155
1945− // Record a pending cancel only when a dispatched-but-not-yet-active
1946− // run exists. This catches runs still in the goroutine scheduler or
1947− // about to enter Run's busy-queue branch, while leaving an idle
1948− // session untouched. Active and accepted are not mutually exclusive:
1949− // when a run is active and a follow-up has been accepted, both the
1950− // cancel above and this pending record fire.
1951− //
1952− // Raise the session's cancel mark to the latest accept sequence
1953− // assigned so far. Every prompt currently accepted-but-not-yet-
1954− // active has a sequence at or below that value, so one cancel covers
1955− // all of them; a prompt accepted after this cancel gets a strictly
1956− // higher sequence and is never poisoned. Using max keeps repeated
1957− // cancels idempotent while the same prompts are in flight and lets a
1958− // later cancel extend coverage to prompts accepted since.
1959− a.acceptedMu.Lock()
1960− count, ok := a.acceptedRuns.Get(sessionID)
1961− mark := a.acceptSeqGen
1962− a.acceptedMu.Unlock()
1963− if ok && count > 0 {
1964− slog.Debug("Recording cancel mark for accepted runs", "session_id", sessionID, "count", count, "mark", mark)
1965− existing, _ := a.cancelMark.Get(sessionID)
1966− a.cancelMark.Set(sessionID, max(existing, mark))
1967− }
1968−
19691156 if a.QueuedPrompts(sessionID) > 0 {
19701157 slog.Debug("Clearing queued prompts", "session_id", sessionID)
1971− a.clearQueueAndNotify(sessionID)
1158+ a.messageQueue.Del(sessionID)
19721159 }
19731160}
19741161
19751162func (a *sessionAgent) ClearQueue(sessionID string) {
19761163 if a.QueuedPrompts(sessionID) > 0 {
19771164 slog.Debug("Clearing queued prompts", "session_id", sessionID)
1978− a.clearQueueAndNotify(sessionID)
1165+ a.messageQueue.Del(sessionID)
19791166 }
19801167}
19811168
@@ -1999,10 +1186,14 @@ func (a *sessionAgent) CancelAll() {
19991186}
20001187
20011188func (a *sessionAgent) IsBusy() bool {
2002− // activeRequests only ever holds non-nil cancel funcs (Set with a
2003− // real func, removed via Del), so a length check is exact — and it
2004− // avoids cloning the whole map, which Seq() does on every call.
2005− return a.activeRequests.Len() > 0
1189+ var busy bool
1190+ for cancelFunc := range a.activeRequests.Seq() {
1191+ if cancelFunc != nil {
1192+ busy = true
1193+ break
1194+ }
1195+ }
1196+ return busy
20061197}
20071198
20081199func (a *sessionAgent) IsSessionBusy(sessionID string) bool {
@@ -2037,7 +1228,6 @@ func (a *sessionAgent) SetModels(large Model, small Model) {
20371228
20381229func (a *sessionAgent) SetTools(tools []fantasy.AgentTool) {
20391230 a.tools.SetSlice(tools)
2040− a.toolsGen.Add(1)
20411231}
20421232
20431233func (a *sessionAgent) SetSystemPrompt(systemPrompt string) {
@@ -2069,8 +1259,7 @@ func (a *sessionAgent) convertToToolResult(result fantasy.ToolResultContent) mes
20691259 case fantasy.ToolResultContentTypeMedia:
20701260 if r, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentMedia](result.Result); ok {
20711261 if !stringext.IsValidBase64(r.Data) {
2072− slog.Warn(
2073− "Tool returned media with invalid base64 data, discarding image",
1262+ slog.Warn("Tool returned media with invalid base64 data, discarding image",
20741263 "tool", result.ToolName,
20751264 "tool_call_id", result.ToolCallID,
20761265 )
@@ -2114,15 +1303,12 @@ func (a *sessionAgent) convertToToolResult(result fantasy.ToolResultContent) mes
21141303// AFTER: [tool result: "Image loaded - see attached"], [user: image attachment]
21151304func (a *sessionAgent) workaroundProviderMediaLimitations(messages []fantasy.Message, largeModel Model) []fantasy.Message {
21161305 providerSupportsMedia := largeModel.ModelCfg.Provider == string(catwalk.InferenceProviderAnthropic) ||
2117− largeModel.ModelCfg.Provider == string(catwalk.InferenceProviderBedrock) ||
2118− largeModel.ModelCfg.Provider == string(catwalk.InferenceProviderBedrockEurope)
1306+ largeModel.ModelCfg.Provider == string(catwalk.InferenceProviderBedrock)
21191307
21201308 if providerSupportsMedia {
21211309 return messages
21221310 }
21231311
2124− supportsImages := largeModel.CatwalkCfg.SupportsImages
2125−
21261312 convertedMessages := make([]fantasy.Message, 0, len(messages))
21271313
21281314 for _, msg := range messages {
@@ -2142,21 +1328,6 @@ func (a *sessionAgent) workaroundProviderMediaLimitations(messages []fantasy.Mes
21421328 }
21431329
21441330 if media, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentMedia](toolResult.Output); ok {
2145− if !supportsImages {
2146− // Model cannot process images. Replace with a text
2147− // placeholder and skip creating a synthetic user
2148− // message with FilePart, which would brick the
2149− // session on text-only models.
2150− textParts = append(textParts, fantasy.ToolResultPart{
2151− ToolCallID: toolResult.ToolCallID,
2152− Output: fantasy.ToolResultOutputContentText{
2153− Text: "[Image/media content not supported by this model]",
2154− },
2155− ProviderOptions: toolResult.ProviderOptions,
2156− })
2157− continue
2158− }
2159−
21601331 decoded, err := base64.StdEncoding.DecodeString(media.Data)
21611332 if err != nil {
21621333 slog.Warn("Failed to decode media data", "error", err)
@@ -2229,20 +1400,3 @@ func providerRetryLogFields(err *fantasy.ProviderError, delay time.Duration) []a
22291400 }
22301401 return fields
22311402}
2232−
2233−// sanitizeToolInput validates tool call JSON from the provider.
2234−// Malformed input is replaced with an empty object to prevent
2235−// stuck conversations from truncated or malformed model output.
2236−// The second return value indicates whether sanitization occurred.
2237−func sanitizeToolInput(toolName, toolCallID, input string) (string, bool) {
2238− if !json.Valid([]byte(input)) {
2239− slog.Warn(
2240− "Malformed tool call JSON from provider, replacing with empty object",
2241− "tool", toolName,
2242− "id", toolCallID,
2243− "input_len", len(input),
2244− )
2245− return "{}", true
2246− }
2247− return input, false
2248−}
internal/agent/agent_test.go−143
@@ -1,7 +1,6 @@
11package agent
22
33import (
4− "encoding/base64"
54 "fmt"
65 "log/slog"
76 "os"
@@ -11,11 +10,9 @@ import (
1110 "testing"
1211 "time"
1312
14− "charm.land/catwalk/pkg/catwalk"
1513 "charm.land/fantasy"
1614 "charm.land/x/vcr"
1715 "github.com/charmbracelet/crush/internal/agent/tools"
18− "github.com/charmbracelet/crush/internal/config"
1916 "github.com/charmbracelet/crush/internal/message"
2017 "github.com/charmbracelet/crush/internal/session"
2118 "github.com/stretchr/testify/assert"
@@ -843,146 +840,6 @@ func TestPreparePrompt_OrphanedToolUseMixed(t *testing.T) {
843840 require.Equal(t, 1, syntheticCount, "expected exactly one synthetic result for the orphaned call")
844841}
845842
846−func TestWorkaroundProviderMediaLimitations_TextOnlyModel(t *testing.T) {
847− env := testEnv(t)
848− sa := testSessionAgent(env, nil, nil, "test prompt")
849− agent := sa.(*sessionAgent)
850−
851− pngBase64 := base64.StdEncoding.EncodeToString([]byte("fake-png-data"))
852−
853− messages := []fantasy.Message{
854− {
855− Role: fantasy.MessageRoleTool,
856− Content: []fantasy.MessagePart{
857− fantasy.ToolResultPart{
858− ToolCallID: "call_1",
859− Output: fantasy.ToolResultOutputContentMedia{
860− Data: pngBase64,
861− MediaType: "image/png",
862− },
863− },
864− },
865− },
866− }
867−
868− // Non-Anthropic provider, no image support — should replace media with
869− // a text placeholder and not create a synthetic user message.
870− largeModel := Model{
871− ModelCfg: config.SelectedModel{Provider: "openai"},
872− CatwalkCfg: catwalk.Model{
873− SupportsImages: false,
874− },
875− }
876−
877− result := agent.workaroundProviderMediaLimitations(messages, largeModel)
878−
879− // Should produce exactly one message: the tool message with a text
880− // placeholder. No synthetic user message with FilePart.
881− require.Len(t, result, 1)
882− require.Equal(t, fantasy.MessageRoleTool, result[0].Role)
883−
884− tr, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](result[0].Content[0])
885− require.True(t, ok)
886− _, ok = fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentText](tr.Output)
887− require.True(t, ok)
888−}
889−
890−func TestWorkaroundProviderMediaLimitations_VisionModel(t *testing.T) {
891− env := testEnv(t)
892− sa := testSessionAgent(env, nil, nil, "test prompt")
893− agent := sa.(*sessionAgent)
894−
895− pngBase64 := base64.StdEncoding.EncodeToString([]byte("fake-png-data"))
896−
897− messages := []fantasy.Message{
898− {
899− Role: fantasy.MessageRoleTool,
900− Content: []fantasy.MessagePart{
901− fantasy.ToolResultPart{
902− ToolCallID: "call_1",
903− Output: fantasy.ToolResultOutputContentMedia{
904− Data: pngBase64,
905− MediaType: "image/png",
906− },
907− },
908− },
909− },
910− }
911−
912− // Non-Anthropic provider, image support — should create a synthetic
913− // user message with FilePart.
914− largeModel := Model{
915− ModelCfg: config.SelectedModel{Provider: "openai"},
916− CatwalkCfg: catwalk.Model{
917− SupportsImages: true,
918− },
919− }
920−
921− result := agent.workaroundProviderMediaLimitations(messages, largeModel)
922−
923− // Should produce two messages: tool message with placeholder text,
924− // and synthetic user message with FilePart.
925− require.Len(t, result, 2)
926− require.Equal(t, fantasy.MessageRoleTool, result[0].Role)
927− require.Equal(t, fantasy.MessageRoleUser, result[1].Role)
928−
929− // The tool message should have text placeholder.
930− tr, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](result[0].Content[0])
931− require.True(t, ok)
932− textOutput, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentText](tr.Output)
933− require.True(t, ok)
934− require.Contains(t, textOutput.Text, "see attached file")
935−
936− // The synthetic user message should contain a TextPart and a FilePart.
937− require.Len(t, result[1].Content, 2)
938− file, ok := fantasy.AsMessagePart[fantasy.FilePart](result[1].Content[1])
939− require.True(t, ok)
940− require.Equal(t, "image/png", file.MediaType)
941−}
942−
943−func TestWorkaroundProviderMediaLimitations_AnthropicProvider(t *testing.T) {
944− env := testEnv(t)
945− sa := testSessionAgent(env, nil, nil, "test prompt")
946− agent := sa.(*sessionAgent)
947−
948− pngBase64 := base64.StdEncoding.EncodeToString([]byte("fake-png-data"))
949−
950− messages := []fantasy.Message{
951− {
952− Role: fantasy.MessageRoleTool,
953− Content: []fantasy.MessagePart{
954− fantasy.ToolResultPart{
955− ToolCallID: "call_1",
956− Output: fantasy.ToolResultOutputContentMedia{
957− Data: pngBase64,
958− MediaType: "image/png",
959− },
960− },
961− },
962− },
963− }
964−
965− // Anthropic provider — should return messages unchanged regardless of
966− // SupportsImages, since Anthropic handles media in tool results natively.
967− largeModel := Model{
968− ModelCfg: config.SelectedModel{Provider: string(catwalk.InferenceProviderAnthropic)},
969− CatwalkCfg: catwalk.Model{
970− SupportsImages: true,
971− },
972− }
973−
974− result := agent.workaroundProviderMediaLimitations(messages, largeModel)
975− require.Len(t, result, 1)
976− require.Equal(t, fantasy.MessageRoleTool, result[0].Role)
977−
978− // The media should still be in the tool result, untouched.
979− tr, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](result[0].Content[0])
980− require.True(t, ok)
981− media, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentMedia](tr.Output)
982− require.True(t, ok)
983− require.Equal(t, "image/png", media.MediaType)
984−}
985−
986843func TestProviderRetryLogFields(t *testing.T) {
987844 t.Run("nil provider error", func(t *testing.T) {
988845 fields := providerRetryLogFields(nil, 2*time.Second)
internal/agent/agent_tool.go+1−2
@@ -63,6 +63,5 @@ func (c *coordinator) agentTool(ctx context.Context) (fantasy.AgentTool, error)
6363 Prompt: params.Prompt,
6464 SessionTitle: "New Agent Session",
6565 })
66− },
67− ), nil
66+ }), nil
6867}
internal/agent/agentic_fetch_tool.go+3−5
@@ -80,8 +80,7 @@ func (c *coordinator) agenticFetchTool(_ context.Context, client *http.Client) (
8080 description = "Search the web and analyze results"
8181 }
8282
83− p, err := c.permissions.Request(
84− ctx,
83+ p, err := c.permissions.Request(ctx,
8584 permission.CreatePermissionRequest{
8685 SessionID: validationResult.SessionID,
8786 Path: c.cfg.WorkingDir(),
@@ -167,7 +166,7 @@ func (c *coordinator) agenticFetchTool(_ context.Context, client *http.Client) (
167166 fetchTools := []fantasy.AgentTool{
168167 webFetchTool,
169168 webSearchTool,
170− tools.NewGlobTool(tmpDir, c.cfg.Config().Tools.Glob),
169+ tools.NewGlobTool(tmpDir),
171170 tools.NewGrepTool(tmpDir, c.cfg.Config().Tools.Grep),
172171 tools.NewSourcegraphTool(client),
173172 tools.NewViewTool(c.lspManager, c.permissions, c.filetracker, nil, tmpDir),
@@ -201,6 +200,5 @@ func (c *coordinator) agenticFetchTool(_ context.Context, client *http.Client) (
201200 c.permissions.AutoApproveSession(sessionID)
202201 },
203202 })
204− },
205− ), nil
203+ }), nil
206204}
internal/agent/agenttest/coordinator.godeleted−80
@@ -1,80 +0,0 @@
1−// Package agenttest provides test-only constructors for wiring a real
2−// production agent.Coordinator without booting a full app.App. It is
3−// imported only from _test.go files (e.g. internal/backend integration
4−// tests) and is never referenced by production code, so it is compiled
5−// only under tests and never ships in the production binary or API.
6−package agenttest
7−
8−import (
9− "context"
10−
11− "charm.land/catwalk/pkg/catwalk"
12− "charm.land/fantasy/providers/openaicompat"
13− "github.com/charmbracelet/crush/internal/agent"
14− "github.com/charmbracelet/crush/internal/config"
15− "github.com/charmbracelet/crush/internal/message"
16− "github.com/charmbracelet/crush/internal/permission"
17− "github.com/charmbracelet/crush/internal/session"
18−)
19−
20−// NewCoordinator builds a real agent.Coordinator through the production
21−// agent.NewCoordinator constructor so the RunAccepted / BeginAccepted /
22−// run path (including UpdateModels) is the actual code under test.
23−//
24−// It installs a minimal config with a single openai-compatible provider
25−// whose model resolves offline. run rebuilds the model on every call, so
26−// the provider must construct without network I/O; the cancel-on-entry
27−// path this helper is built to exercise returns before any model call,
28−// so no request is ever issued. The coder agent's allowed-tools list is
29−// cleared to keep tool construction cheap and free of sub-agent wiring.
30−//
31−// The optional coordinator dependencies (history, filetracker, LSP,
32−// notify, runComplete, skills) are nil: run guards the publisher fields
33−// and the cancel-on-entry path never touches the others.
34−func NewCoordinator(
35− ctx context.Context,
36− workingDir string,
37− sessions session.Service,
38− messages message.Service,
39−) (agent.Coordinator, error) {
40− cfg, err := config.Init(workingDir, "", false)
41− if err != nil {
42− return nil, err
43− }
44−
45− const (
46− providerID = "test-openai-compat"
47− modelID = "test-model"
48− )
49− cfg.Config().Providers.Set(providerID, config.ProviderConfig{
50− ID: providerID,
51− Name: "Test",
52− Type: openaicompat.Name,
53− BaseURL: "http://127.0.0.1:0/v1",
54− APIKey: "test",
55− Models: []catwalk.Model{{ID: modelID, DefaultMaxTokens: 4096}},
56− })
57− selected := config.SelectedModel{Provider: providerID, Model: modelID}
58− cfg.OverridePreferredModel(config.SelectedModelTypeLarge, selected)
59− cfg.OverridePreferredModel(config.SelectedModelTypeSmall, selected)
60− cfg.SetupAgents()
61−
62− // Keep buildTools light: no sub-agent or agentic-fetch construction.
63− coderCfg := cfg.Config().Agents[config.AgentCoder]
64− coderCfg.AllowedTools = nil
65− cfg.Config().Agents[config.AgentCoder] = coderCfg
66−
67− return agent.NewCoordinator(
68− ctx,
69− cfg,
70− sessions,
71− messages,
72− permission.NewPermissionService(workingDir, true, nil),
73− nil,
74− nil,
75− nil,
76− nil,
77− nil,
78− nil,
79− )
80−}
internal/agent/common_test.go+1−2
@@ -152,7 +152,6 @@ func coderAgent(r *vcr.Recorder, env fakeEnv, large, small fantasy.LanguageModel
152152 cfg.Config().Options.SkillsPaths = nil
153153 cfg.Config().Options.DisabledSkills = []string{"crush-config"}
154154 cfg.Config().Options.ContextPaths = nil
155− cfg.Config().Options.GlobalContextPaths = nil
156155 cfg.Config().LSP = nil
157156
158157 systemPrompt, err := prompt.Build(context.TODO(), large.Provider(), large.Model(), cfg)
@@ -172,7 +171,7 @@ func coderAgent(r *vcr.Recorder, env fakeEnv, large, small fantasy.LanguageModel
172171 tools.NewEditTool(nil, env.permissions, env.history, *env.filetracker, env.workingDir),
173172 tools.NewMultiEditTool(nil, env.permissions, env.history, *env.filetracker, env.workingDir),
174173 tools.NewFetchTool(env.permissions, env.workingDir, r.GetDefaultClient()),
175− tools.NewGlobTool(env.workingDir, cfg.Config().Tools.Glob),
174+ tools.NewGlobTool(env.workingDir),
176175 tools.NewGrepTool(env.workingDir, cfg.Config().Tools.Grep),
177176 tools.NewLsTool(env.permissions, env.workingDir, cfg.Config().Tools.Ls),
178177 tools.NewSourcegraphTool(r.GetDefaultClient()),
internal/agent/coordinator.go+117−538
@@ -15,8 +15,6 @@ import (
1515 "path/filepath"
1616 "slices"
1717 "strings"
18− "sync"
19− "sync/atomic"
2018
2119 "charm.land/catwalk/pkg/catwalk"
2220 "charm.land/fantasy"
@@ -24,13 +22,11 @@ import (
2422 "github.com/charmbracelet/crush/internal/agent/notify"
2523 "github.com/charmbracelet/crush/internal/agent/prompt"
2624 "github.com/charmbracelet/crush/internal/agent/tools"
27− "github.com/charmbracelet/crush/internal/agent/tools/mcp"
2825 "github.com/charmbracelet/crush/internal/config"
29− "github.com/charmbracelet/crush/internal/csync"
30− "github.com/charmbracelet/crush/internal/discover"
3126 "github.com/charmbracelet/crush/internal/event"
3227 "github.com/charmbracelet/crush/internal/filetracker"
3328 "github.com/charmbracelet/crush/internal/history"
29+ "github.com/charmbracelet/crush/internal/home"
3430 "github.com/charmbracelet/crush/internal/hooks"
3531 "github.com/charmbracelet/crush/internal/log"
3632 "github.com/charmbracelet/crush/internal/lsp"
@@ -66,35 +62,10 @@ var (
6662 errSmallModelNotFound = errors.New("small model not found in provider config")
6763)
6864
69−// Copilot models that use the Responses API instead of Chat Completions.
70−var copilotResponsesModels = map[string]bool{
71− "gpt-5.2": true,
72− "gpt-5.2-codex": true,
73− "gpt-5.3-codex": true,
74− "gpt-5.4": true,
75− "gpt-5.4-mini": true,
76− "gpt-5.5": true,
77− "gpt-5-mini": true,
78−}
79−
80−// OpenCode models that user Anthropic Messages API instead of Chat Completions.
81−var opencodeMessagesModels = map[string]bool{
82− "qwen3.7-max": true,
83−}
84−
8565type Coordinator interface {
8666 // INFO: (kujtim) this is not used yet we will use this when we have multiple agents
8767 // SetMainAgent(string)
8868 Run(ctx context.Context, sessionID, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error)
89− // RunAccepted runs a call that was already accepted via
90− // BeginAccepted on the fire-and-forget dispatch path. The handle is
91− // the only carrier of accept-state across the backend.runAgent /
92− // Coordinator / sessionAgent.Run layers: it reaches
93− // sessionAgent.Run as SessionAgentCall.Accepted, where it is
94− // consumed under dispatchMu once the accepted -> (cancel-on-entry |
95− // queued | active) transition is chosen.
96− RunAccepted(ctx context.Context, accept *AcceptedRun, sessionID, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error)
97− BeginAccepted(sessionID string) *AcceptedRun
9869 Cancel(sessionID string)
9970 CancelAll()
10071 IsSessionBusy(sessionID string) bool
@@ -105,7 +76,6 @@ type Coordinator interface {
10576 Summarize(context.Context, string) error
10677 Model() Model
10778 UpdateModels(ctx context.Context) error
108− GenerateTitle(ctx context.Context, sessionID, prompt string)
10979}
11080
11181type coordinator struct {
@@ -117,7 +87,6 @@ type coordinator struct {
11787 filetracker filetracker.Service
11888 lspManager *lsp.Manager
11989 notify pubsub.Publisher[notify.Notification]
120− runComplete pubsub.Publisher[notify.RunComplete]
12190
12291 currentAgent SessionAgent
12392 agents map[string]SessionAgent
@@ -127,32 +96,6 @@ type coordinator struct {
12796 activeSkills []*skills.Skill // Post-filter: active skills only.
12897 skillTracker *skills.Tracker
12998
130− // providerClients caches built provider clients keyed by their fully
131− // resolved configuration. UpdateModels rebuilds models every turn;
132− // without this, each turn discards the provider's HTTP client and its
133− // keep-alive connection pool, forcing a fresh TLS handshake. The key
134− // captures every input buildProvider depends on, so any config/model/
135− // credential change misses the cache and rebuilds.
136− providerClients *csync.Map[string, fantasy.Provider]
137−
138− // toolsCache avoids rebuilding the tool set on every UpdateModels call.
139− // The cache is invalidated when the config pointer changes (reload or
140− // mutation) or when mcpToolsGen is bumped (MCP server connect/disconnect
141− // or tools/list_changed notification).
142− toolsCacheMu sync.Mutex
143− toolsCache []fantasy.AgentTool
144− toolsCacheCfg *config.Config
145− toolsCacheMCP uint64
146− mcpToolsGen atomic.Uint64
147−
148− // providerOptsCache avoids repeating the 3× JSON marshal + merge +
149− // unmarshal in getProviderOptions on every turn when the model and
150− // config have not changed. Keyed by config pointer + model CatwalkCfg
151− // ID + provider name.
152− providerOptsCacheMu sync.Mutex
153− providerOptsCache fantasy.ProviderOptions
154− providerOptsCacheKey string
155−
15699 readyWg errgroup.Group
157100}
158101
@@ -166,20 +109,9 @@ func NewCoordinator(
166109 filetracker filetracker.Service,
167110 lspManager *lsp.Manager,
168111 notify pubsub.Publisher[notify.Notification],
169− runComplete pubsub.Publisher[notify.RunComplete],
170− skillsMgr *skills.Manager,
171112) (Coordinator, error) {
172− // Skills are pre-discovered by the caller (see app.New /
173− // backend.CreateWorkspace) and passed in via the manager. If no
174− // manager was provided (legacy callers), fall back to an in-line
175− // discovery so the coordinator still works.
176− var allSkills, activeSkills []*skills.Skill
177− if skillsMgr != nil {
178− allSkills = skillsMgr.AllSkills()
179− activeSkills = skillsMgr.ActiveSkills()
180− } else {
181− allSkills, activeSkills = discoverSkills(cfg)
182− }
113+ // Discover skills once at session start.
114+ allSkills, activeSkills := discoverSkills(cfg)
183115 skillTracker := skills.NewTracker(activeSkills)
184116
185117 c := &coordinator{
@@ -191,13 +123,10 @@ func NewCoordinator(
191123 filetracker: filetracker,
192124 lspManager: lspManager,
193125 notify: notify,
194− runComplete: runComplete,
195126 agents: make(map[string]SessionAgent),
196127 allSkills: allSkills,
197128 activeSkills: activeSkills,
198129 skillTracker: skillTracker,
199−
200− providerClients: csync.NewMap[string, fantasy.Provider](),
201130 }
202131
203132 agentCfg, ok := cfg.Config().Agents[config.AgentCoder]
@@ -217,36 +146,11 @@ func NewCoordinator(
217146 }
218147 c.currentAgent = agent
219148 c.agents[config.AgentCoder] = agent
220−
221− // Subscribe to MCP tool-list changes so the tools cache is invalidated
222− // when MCP servers connect/disconnect or announce new tools.
223− go func() {
224− for ev := range mcp.SubscribeEvents(ctx) {
225− if ev.Payload.Type == mcp.EventToolsListChanged || ev.Payload.Type == mcp.EventStateChanged {
226− c.mcpToolsGen.Add(1)
227− }
228− }
229− }()
230−
231149 return c, nil
232150}
233151
234152// Run implements Coordinator.
235153func (c *coordinator) Run(ctx context.Context, sessionID string, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
236− return c.run(ctx, nil, sessionID, prompt, attachments...)
237−}
238−
239−// RunAccepted implements Coordinator.
240−func (c *coordinator) RunAccepted(ctx context.Context, accept *AcceptedRun, sessionID string, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
241− return c.run(ctx, accept, sessionID, prompt, attachments...)
242−}
243−
244−// run is the shared implementation behind Run and RunAccepted. When
245−// accept is non-nil it is threaded onto the SessionAgentCall as
246−// Accepted so sessionAgent.Run can consume the accept reservation under
247−// dispatchMu; when nil (the in-process/local path) no accept tracking
248−// applies.
249−func (c *coordinator) run(ctx context.Context, accept *AcceptedRun, sessionID string, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
250154 if err := c.readyWg.Wait(); err != nil {
251155 return nil, err
252156 }
@@ -278,7 +182,7 @@ func (c *coordinator) run(ctx context.Context, accept *AcceptedRun, sessionID st
278182 return nil, errModelProviderNotConfigured
279183 }
280184
281− mergedOptions, temp, topP, topK, freqPenalty, presPenalty := c.cachedMergeCallOptions(model, providerCfg)
185+ mergedOptions, temp, topP, topK, freqPenalty, presPenalty := mergeCallOptions(model, providerCfg)
282186
283187 if err := c.refreshTokenIfExpired(ctx, providerCfg); err != nil {
284188 // NOTE(@andreynering): We don't return here because the event handling to ask the user to reauthenticate
@@ -286,34 +190,9 @@ func (c *coordinator) run(ctx context.Context, accept *AcceptedRun, sessionID st
286190 slog.Error("Failed to refresh OAuth2 token. Proceeding with existing token.", "error", err)
287191 }
288192
289− // Coalesce per-attempt RunComplete payloads so only the final
290− // outcome reaches subscribers. Without this, the first attempt's
291− // failed RunComplete (unauthorized) would race ahead of the
292− // retry's success, and `crush run` would exit on the stale error
293− // before ever seeing the retry result. Each attempt's
294− // SessionAgentCall.OnComplete hook overwrites latest; we publish
295− // exactly once after retries resolve, via PublishMustDeliver, so
296− // a momentarily-full subscriber buffer can't silently drop the
297− // terminal event.
298− var (
299− latest notify.RunComplete
300− hasLatest bool
301− )
302− onComplete := func(rc notify.RunComplete) {
303− latest = rc
304− hasLatest = true
305− }
306− // Propagate the caller-supplied RunID (set via agent.WithRunID
307− // at the HTTP boundary in backend.SendMessage) onto the
308− // SessionAgentCall so the terminal RunComplete event echoes it
309− // back. Both attempts in the retry chain reuse the same RunID;
310− // the coalesce closure publishes the final outcome under that
311− // same correlator.
312− runID := RunIDFromContext(ctx)
313193 run := func() (*fantasy.AgentResult, error) {
314194 return c.currentAgent.Run(ctx, SessionAgentCall{
315195 SessionID: sessionID,
316− RunID: runID,
317196 Prompt: prompt,
318197 Attachments: attachments,
319198 MaxOutputTokens: maxTokens,
@@ -323,59 +202,21 @@ func (c *coordinator) run(ctx context.Context, accept *AcceptedRun, sessionID st
323202 TopK: topK,
324203 FrequencyPenalty: freqPenalty,
325204 PresencePenalty: presPenalty,
326− OnComplete: onComplete,
327− Accepted: accept,
328205 })
329206 }
330207 beforeLoaded := c.skillTracker.LoadedNames()
331− var result *fantasy.AgentResult
332− originalErr := c.runWithUnauthorizedRetry(ctx, providerCfg, func() error {
333− var err error
334− result, err = run()
335− return err
336− })
208+ result, originalErr := run()
337209 logTurnSkillUsage(sessionID, prompt, c.activeSkills, c.skillTracker, beforeLoaded)
338210
339− // Notify only if still unauthorized after retry — a successful
340− // retry means the user doesn't need to re-authenticate.
341− if originalErr != nil && c.isUnauthorized(originalErr) && c.notify != nil && model.ModelCfg.Provider == hyper.Name {
342− c.notify.Publish(pubsub.CreatedEvent, notify.Notification{
343− Type: notify.TypeReAuthenticate,
344− ProviderID: model.ModelCfg.Provider,
345− })
211+ if c.isUnauthorized(originalErr) {
212+ if err := c.retryAfterUnauthorized(ctx, providerCfg); err == nil {
213+ return run()
214+ }
346215 }
347216
348− if hasLatest && c.runComplete != nil {
349− c.runComplete.PublishMustDeliver(ctx, pubsub.UpdatedEvent, latest)
350− // Signal to the dispatcher (backend.runAgent) that the
351− // authoritative terminal RunComplete for this run was already
352− // emitted, so it does not publish a duplicate fallback for the
353− // error it is about to receive.
354− MarkRunCompletePublished(ctx)
355− }
356217 return result, originalErr
357218}
358219
359−// effectiveReasoningEffort returns the reasoning effort to apply for provider calls.
360−// It prefers the user-selected effort when valid, otherwise the model default when
361−// valid, and finally falls back to the first configured reasoning level.
362−func effectiveReasoningEffort(model Model) string {
363− if !model.CatwalkCfg.CanReason {
364− return ""
365− }
366−
367− if effort := model.ModelCfg.ReasoningEffort; effort != "" && slices.Contains(model.CatwalkCfg.ReasoningLevels, effort) {
368− return effort
369− }
370− if effort := model.CatwalkCfg.DefaultReasoningEffort; effort != "" && slices.Contains(model.CatwalkCfg.ReasoningLevels, effort) {
371− return effort
372− }
373− if len(model.CatwalkCfg.ReasoningLevels) > 0 {
374− return model.CatwalkCfg.ReasoningLevels[0]
375− }
376− return ""
377−}
378−
379220func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.ProviderOptions {
380221 options := fantasy.ProviderOptions{}
381222
@@ -424,16 +265,11 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
424265 return options
425266 }
426267
427− reasoningEffort := effectiveReasoningEffort(model)
428− shouldSetEffort := model.CatwalkCfg.CanReason &&
429− reasoningEffort != "" &&
430− slices.Contains(model.CatwalkCfg.ReasoningLevels, reasoningEffort)
431−
432268 switch providerCfg.Type {
433269 case openai.Name, azure.Name:
434270 _, hasReasoningEffort := mergedOptions["reasoning_effort"]
435− if !hasReasoningEffort && shouldSetEffort {
436− mergedOptions["reasoning_effort"] = reasoningEffort
271+ if !hasReasoningEffort && model.ModelCfg.ReasoningEffort != "" {
272+ mergedOptions["reasoning_effort"] = model.ModelCfg.ReasoningEffort
437273 }
438274 if openai.IsResponsesModel(model.CatwalkCfg.ID) {
439275 if openai.IsResponsesReasoningModel(model.CatwalkCfg.ID) {
@@ -450,37 +286,17 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
450286 options[openai.Name] = parsed
451287 }
452288 }
453−
454− case anthropic.Name, bedrock.Name:
289+ case anthropic.Name:
455290 var (
456291 _, hasEffort = mergedOptions["effort"]
457292 _, hasThink = mergedOptions["thinking"]
458− extraBody = make(map[string]any)
459293 )
460−
461− switch providerCfg.ID {
462− case string(catwalk.InferenceProviderAlibabaSingapore), string(catwalk.InferenceProviderAlibabaUS):
463− switch {
464− case !hasEffort && shouldSetEffort:
465− extraBody["reasoning_effort"] = reasoningEffort
466− case !hasThink && model.CatwalkCfg.CanReason:
467− if model.ModelCfg.Think {
468− extraBody["thinking"] = map[string]any{"type": "enabled"}
469− } else {
470− extraBody["thinking"] = map[string]any{"type": "disabled"}
471− }
472− }
473− mergedOptions["extra_body"] = extraBody
474−
475− default:
476− switch {
477− case !hasEffort && shouldSetEffort:
478− mergedOptions["effort"] = reasoningEffort
479− case !hasThink && model.ModelCfg.Think:
480− mergedOptions["thinking"] = map[string]any{"budget_tokens": 2000}
481− }
294+ switch {
295+ case !hasEffort && model.ModelCfg.ReasoningEffort != "":
296+ mergedOptions["effort"] = model.ModelCfg.ReasoningEffort
297+ case !hasThink && model.ModelCfg.Think:
298+ mergedOptions["thinking"] = map[string]any{"budget_tokens": 2000}
482299 }
483−
484300 parsed, err := anthropic.ParseOptions(mergedOptions)
485301 if err == nil {
486302 options[anthropic.Name] = parsed
@@ -488,30 +304,28 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
488304
489305 case openrouter.Name:
490306 _, hasReasoning := mergedOptions["reasoning"]
491− if !hasReasoning && shouldSetEffort {
307+ if !hasReasoning && model.ModelCfg.ReasoningEffort != "" {
492308 mergedOptions["reasoning"] = map[string]any{
493309 "enabled": true,
494− "effort": reasoningEffort,
310+ "effort": model.ModelCfg.ReasoningEffort,
495311 }
496312 }
497313 parsed, err := openrouter.ParseOptions(mergedOptions)
498314 if err == nil {
499315 options[openrouter.Name] = parsed
500316 }
501−
502317 case vercel.Name:
503318 _, hasReasoning := mergedOptions["reasoning"]
504− if !hasReasoning && shouldSetEffort {
319+ if !hasReasoning && model.ModelCfg.ReasoningEffort != "" {
505320 mergedOptions["reasoning"] = map[string]any{
506321 "enabled": true,
507− "effort": reasoningEffort,
322+ "effort": model.ModelCfg.ReasoningEffort,
508323 }
509324 }
510325 parsed, err := vercel.ParseOptions(mergedOptions)
511326 if err == nil {
512327 options[vercel.Name] = parsed
513328 }
514−
515329 case google.Name:
516330 _, hasReasoning := mergedOptions["thinking_config"]
517331 if !hasReasoning {
@@ -522,7 +336,7 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
522336 }
523337 } else {
524338 mergedOptions["thinking_config"] = map[string]any{
525− "thinking_level": reasoningEffort,
339+ "thinking_level": model.ModelCfg.ReasoningEffort,
526340 "include_thoughts": true,
527341 }
528342 }
@@ -531,20 +345,14 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
531345 if err == nil {
532346 options[google.Name] = parsed
533347 }
534−
535348 case openaicompat.Name, hyper.Name:
536− extraBody := make(map[string]any)
537−
538349 _, hasReasoningEffort := mergedOptions["reasoning_effort"]
539− if !hasReasoningEffort && shouldSetEffort {
540− switch providerCfg.ID {
541− case string(catwalk.InferenceProviderIoNet):
542− extraBody["reasoning"] = map[string]string{"effort": reasoningEffort}
543− default:
544− mergedOptions["reasoning_effort"] = reasoningEffort
545− }
350+ if !hasReasoningEffort && model.ModelCfg.ReasoningEffort != "" {
351+ mergedOptions["reasoning_effort"] = model.ModelCfg.ReasoningEffort
546352 }
547353
354+ extraBody := make(map[string]any)
355+
548356 // "reasoning effort" is a standard OpenAI field, but "thinking" is not.
549357 // Setting it in the right way for each provider.
550358 // TODO: Abstract this in Fantasy somehow?
@@ -553,40 +361,19 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
553361 case hyper.Name:
554362 extraBody["thinking"] = model.ModelCfg.Think
555363 case string(catwalk.InferenceProviderIoNet):
556− if _, ok := extraBody["reasoning"]; !ok && model.CatwalkCfg.CanReason {
557− if model.ModelCfg.Think {
558− extraBody["reasoning"] = map[string]string{"effort": "medium"}
559− } else {
560− extraBody["reasoning"] = map[string]string{"effort": "none"}
561− }
364+ extraBody["chat_template_kwargs"] = map[string]any{
365+ "thinking": model.ModelCfg.Think,
562366 }
563−
564− case string(catwalk.InferenceProviderZAI), string(catwalk.InferenceProviderDeepSeek):
565− if model.ModelCfg.Think || reasoningEffort != "" {
566− extraBody["thinking"] = map[string]any{"type": "enabled"}
367+ case string(catwalk.InferenceProviderZAI):
368+ if model.ModelCfg.Think {
369+ extraBody["thinking"] = map[string]any{
370+ "type": "enabled",
371+ }
567372 } else {
568− extraBody["thinking"] = map[string]any{"type": "disabled"}
569− }
570−
571− case string(catwalk.InferenceProviderFireworks):
572− // NOTE: Fireworks break if we set both `reasoning_effort` and `thinking`.
573− if reasoningEffort == "" {
574− if model.ModelCfg.Think {
575− extraBody["thinking"] = map[string]any{"type": "enabled"}
576− } else {
577− extraBody["thinking"] = map[string]any{"type": "disabled"}
373+ extraBody["thinking"] = map[string]any{
374+ "type": "disabled",
578375 }
579376 }
580−
581− case string(catwalk.InferenceProviderBaseten):
582− extraBody["chat_template_args"] = map[string]any{
583− "enable_thinking": model.ModelCfg.Think || reasoningEffort != "",
584− }
585−
586− case string(catwalk.InferenceProviderAlibabaSingapore), string(catwalk.InferenceProviderAlibabaUS):
587− if model.CatwalkCfg.CanReason {
588− extraBody["enable_thinking"] = model.ModelCfg.Think || reasoningEffort != ""
589− }
590377 }
591378
592379 mergedOptions["extra_body"] = extraBody
@@ -595,16 +382,6 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
595382 if err == nil {
596383 options[openaicompat.Name] = parsed
597384 }
598−
599− default:
600− // Known custom providers (litellm, ollama, omlx) are
601− // openai-compat under the hood.
602− if discover.IsKnownCustomProvider(string(providerCfg.Type)) {
603− parsed, err := openaicompat.ParseOptions(mergedOptions)
604− if err == nil {
605− options[openaicompat.Name] = parsed
606− }
607− }
608385 }
609386
610387 return options
@@ -620,39 +397,6 @@ func mergeCallOptions(model Model, cfg config.ProviderConfig) (fantasy.ProviderO
620397 return modelOptions, temp, topP, topK, freqPenalty, presPenalty
621398}
622399
623−// cachedMergeCallOptions wraps mergeCallOptions with a memoization cache.
624−// The provider options JSON merge is expensive (3× marshal + merge +
625−// unmarshal) and the inputs rarely change between turns. The cache key
626−// combines the config pointer identity with the model's catwalk ID and
627−// provider name so any config reload or model switch misses the cache.
628−func (c *coordinator) cachedMergeCallOptions(model Model, cfg config.ProviderConfig) (fantasy.ProviderOptions, *float64, *float64, *int64, *float64, *float64) {
629− key := fmt.Sprintf("%p|%s|%s", c.cfg.Config(), model.CatwalkCfg.ID, model.ModelCfg.Provider)
630−
631− c.providerOptsCacheMu.Lock()
632− if c.providerOptsCacheKey == key {
633− opts := c.providerOptsCache
634− c.providerOptsCacheMu.Unlock()
635− // Recompute the scalar overrides (cheap) since they don't need
636− // the JSON merge — they're just cmp.Or calls.
637− temp := cmp.Or(model.ModelCfg.Temperature, model.CatwalkCfg.Options.Temperature)
638− topP := cmp.Or(model.ModelCfg.TopP, model.CatwalkCfg.Options.TopP)
639− topK := cmp.Or(model.ModelCfg.TopK, model.CatwalkCfg.Options.TopK)
640− freqPenalty := cmp.Or(model.ModelCfg.FrequencyPenalty, model.CatwalkCfg.Options.FrequencyPenalty)
641− presPenalty := cmp.Or(model.ModelCfg.PresencePenalty, model.CatwalkCfg.Options.PresencePenalty)
642− return opts, temp, topP, topK, freqPenalty, presPenalty
643− }
644− c.providerOptsCacheMu.Unlock()
645−
646− opts, temp, topP, topK, freqPenalty, presPenalty := mergeCallOptions(model, cfg)
647−
648− c.providerOptsCacheMu.Lock()
649− c.providerOptsCache = opts
650− c.providerOptsCacheKey = key
651− c.providerOptsCacheMu.Unlock()
652−
653− return opts, temp, topP, topK, freqPenalty, presPenalty
654−}
655−
656400func (c *coordinator) buildAgent(ctx context.Context, prompt *prompt.Prompt, agent config.Agent, isSubAgent bool) (SessionAgent, error) {
657401 large, small, err := c.buildAgentModels(ctx, isSubAgent)
658402 if err != nil {
@@ -672,7 +416,6 @@ func (c *coordinator) buildAgent(ctx context.Context, prompt *prompt.Prompt, age
672416 Messages: c.messages,
673417 Tools: nil,
674418 Notify: c.notify,
675− RunComplete: c.runComplete,
676419 })
677420
678421 c.readyWg.Go(func() error {
@@ -730,8 +473,7 @@ func (c *coordinator) buildTools(ctx context.Context, agent config.Agent, isSubA
730473 hookRunner = hooks.NewRunner(preToolHooks, c.cfg.WorkingDir(), c.cfg.WorkingDir())
731474 }
732475
733− allTools = append(
734− allTools,
476+ allTools = append(allTools,
735477 tools.NewBashTool(c.permissions, c.cfg.WorkingDir(), c.cfg.Config().Options.Attribution, modelID),
736478 tools.NewCrushInfoTool(c.cfg, c.lspManager, c.allSkills, c.activeSkills, c.skillTracker),
737479 tools.NewCrushLogsTool(logFile),
@@ -741,7 +483,7 @@ func (c *coordinator) buildTools(ctx context.Context, agent config.Agent, isSubA
741483 tools.NewEditTool(c.lspManager, c.permissions, c.history, c.filetracker, c.cfg.WorkingDir()),
742484 tools.NewMultiEditTool(c.lspManager, c.permissions, c.history, c.filetracker, c.cfg.WorkingDir()),
743485 tools.NewFetchTool(c.permissions, c.cfg.WorkingDir(), nil),
744− tools.NewGlobTool(c.cfg.WorkingDir(), c.cfg.Config().Tools.Glob),
486+ tools.NewGlobTool(c.cfg.WorkingDir()),
745487 tools.NewGrepTool(c.cfg.WorkingDir(), c.cfg.Config().Tools.Grep),
746488 tools.NewLsTool(c.permissions, c.cfg.WorkingDir(), c.cfg.Config().Tools.Ls),
747489 tools.NewSourcegraphTool(nil),
@@ -979,18 +721,10 @@ func (c *coordinator) buildOpenaiCompatProvider(baseURL, apiKey string, headers
979721
980722 // Set HTTP client based on provider and debug mode.
981723 var httpClient *http.Client
982− switch providerID {
983− case string(catwalk.InferenceProviderCopilot):
984− opts = append(
985− opts,
986− openaicompat.WithUseResponsesAPI(),
987− openaicompat.WithResponsesAPIFunc(func(modelID string) bool {
988− return copilotResponsesModels[modelID]
989− }),
990− )
724+ if providerID == string(catwalk.InferenceProviderCopilot) {
725+ opts = append(opts, openaicompat.WithUseResponsesAPI())
991726 httpClient = copilot.NewClient(isSubAgent, c.cfg.Config().Options.Debug)
992− }
993− if httpClient == nil && c.cfg.Config().Options.Debug {
727+ } else if c.cfg.Config().Options.Debug {
994728 httpClient = log.NewHTTPClient()
995729 }
996730 if httpClient != nil {
@@ -1031,7 +765,7 @@ func (c *coordinator) buildAzureProvider(baseURL, apiKey string, headers map[str
1031765 return azure.New(opts...)
1032766}
1033767
1034−func (c *coordinator) buildBedrockProvider(apiKey string, headers map[string]string, providerID string) (fantasy.Provider, error) {
768+func (c *coordinator) buildBedrockProvider(apiKey string, headers map[string]string) (fantasy.Provider, error) {
1035769 var opts []bedrock.Option
1036770 if c.cfg.Config().Options.Debug {
1037771 httpClient := log.NewHTTPClient()
@@ -1040,7 +774,6 @@ func (c *coordinator) buildBedrockProvider(apiKey string, headers map[string]str
1040774 if len(headers) > 0 {
1041775 opts = append(opts, bedrock.WithHeaders(headers))
1042776 }
1043−
1044777 switch {
1045778 case apiKey != "":
1046779 opts = append(opts, bedrock.WithAPIKey(apiKey))
@@ -1049,14 +782,6 @@ func (c *coordinator) buildBedrockProvider(apiKey string, headers map[string]str
1049782 default:
1050783 // Skip, let the SDK do authentication.
1051784 }
1052−
1053− switch providerID {
1054− case string(catwalk.InferenceProviderBedrockEurope):
1055− opts = append(opts, bedrock.WithRegion("eu-west-1"))
1056− default:
1057− opts = append(opts, bedrock.WithRegion("us-east-1"))
1058− }
1059−
1060785 return bedrock.New(opts...)
1061786}
1062787
@@ -1119,82 +844,6 @@ func (c *coordinator) buildProvider(providerCfg config.ProviderConfig, model con
1119844 apiKey, _ := c.cfg.Resolve(providerCfg.APIKey)
1120845 baseURL, _ := c.cfg.Resolve(providerCfg.BaseURL)
1121846
1122− // Reuse a previously built client when nothing that affects it has
1123− // changed, so the HTTP keep-alive pool survives across turns. The key
1124− // is derived from the resolved inputs above (plus the debug flag); the
1125− // per-provider adjustments inside the switch below are deterministic
1126− // functions of these, so identical inputs always yield an identical
1127− // client.
1128− cacheKey := c.providerCacheKey(providerCfg, model, apiKey, baseURL, headers, isSubAgent)
1129− if p, ok := c.providerClients.Get(cacheKey); ok {
1130− return p, nil
1131− }
1132− provider, err := c.buildProviderUncached(providerCfg, model, apiKey, baseURL, headers, isSubAgent)
1133− if err != nil {
1134− return nil, err
1135− }
1136− c.providerClients.Set(cacheKey, provider)
1137− return provider, nil
1138−}
1139−
1140−// providerCacheKey builds a stable key from every input buildProvider's
1141−// switch consumes, so any credential, endpoint, header, or option change
1142−// produces a distinct key (and thus a rebuilt client).
1143−func (c *coordinator) providerCacheKey(providerCfg config.ProviderConfig, model config.SelectedModel, apiKey, baseURL string, headers map[string]string, isSubAgent bool) string {
1144− var b strings.Builder
1145− b.WriteString(providerCfg.ID)
1146− b.WriteByte(0)
1147− b.WriteString(string(providerCfg.Type))
1148− b.WriteByte(0)
1149− // The opencode providers pick their client type from the model, so the
1150− // model must participate in the key.
1151− b.WriteString(model.Model)
1152− b.WriteByte(0)
1153− b.WriteString(apiKey)
1154− b.WriteByte(0)
1155− // Bedrock falls back to AWS_BEARER_TOKEN_BEDROCK when no apiKey is
1156− // configured, and that token is baked into the built client. Fold it
1157− // into the key so a rotated token rebuilds the client instead of
1158− // reusing a stale one.
1159− if apiKey == "" && providerCfg.Type == bedrock.Name {
1160− b.WriteString(os.Getenv("AWS_BEARER_TOKEN_BEDROCK"))
1161− }
1162− b.WriteByte(0)
1163− b.WriteString(baseURL)
1164− b.WriteByte(0)
1165− for _, k := range slices.Sorted(maps.Keys(headers)) {
1166− b.WriteString(k)
1167− b.WriteByte('=')
1168− b.WriteString(headers[k])
1169− b.WriteByte(1)
1170− }
1171− b.WriteByte(0)
1172− if extra, err := json.Marshal(providerCfg.ExtraBody); err == nil {
1173− b.Write(extra)
1174− }
1175− b.WriteByte(0)
1176− if extra, err := json.Marshal(providerCfg.ExtraParams); err == nil {
1177− b.Write(extra)
1178− }
1179− b.WriteByte(0)
1180− if isSubAgent {
1181− b.WriteByte('s')
1182− }
1183− if c.cfg.Config().Options.Debug {
1184− b.WriteByte('d')
1185− }
1186− return b.String()
1187−}
1188−
1189−func (c *coordinator) buildProviderUncached(providerCfg config.ProviderConfig, model config.SelectedModel, apiKey, baseURL string, headers map[string]string, isSubAgent bool) (fantasy.Provider, error) {
1190− switch providerCfg.ID {
1191− case string(catwalk.InferenceProviderOpenCodeGo), string(catwalk.InferenceProviderOpenCodeZen):
1192− if opencodeMessagesModels[model.Model] {
1193− baseURL = strings.TrimSuffix(baseURL, "/v1")
1194− return c.buildAnthropicProvider(baseURL, apiKey, headers, providerCfg.ID)
1195− }
1196− }
1197−
1198847 switch providerCfg.Type {
1199848 case openai.Name:
1200849 return c.buildOpenaiProvider(baseURL, apiKey, headers)
@@ -1207,7 +856,7 @@ func (c *coordinator) buildProviderUncached(providerCfg config.ProviderConfig, m
1207856 case azure.Name:
1208857 return c.buildAzureProvider(baseURL, apiKey, headers, providerCfg.ExtraParams)
1209858 case bedrock.Name:
1210− return c.buildBedrockProvider(apiKey, headers, providerCfg.ID)
859+ return c.buildBedrockProvider(apiKey, headers)
1211860 case google.Name:
1212861 return c.buildGoogleProvider(baseURL, apiKey, headers)
1213862 case "google-vertex":
@@ -1225,11 +874,6 @@ func (c *coordinator) buildProviderUncached(providerCfg config.ProviderConfig, m
1225874 }
1226875 return c.buildOpenaiCompatProvider(baseURL, apiKey, headers, providerCfg.ExtraBody, providerCfg.ID, isSubAgent)
1227876 default:
1228− // Known custom providers (litellm, ollama, omlx) are
1229− // openai-compat under the hood.
1230− if discover.IsKnownCustomProvider(string(providerCfg.Type)) {
1231− return c.buildOpenaiCompatProvider(baseURL, apiKey, headers, providerCfg.ExtraBody, providerCfg.ID, isSubAgent)
1232− }
1233877 return nil, fmt.Errorf("provider type not supported: %q", providerCfg.Type)
1234878 }
1235879}
@@ -1245,15 +889,6 @@ func isExactoSupported(modelID string) bool {
1245889 return slices.Contains(supportedModels, modelID)
1246890}
1247891
1248−// BeginAccepted reserves an accept slot for sessionID on the active
1249−// agent and returns the ownership handle. It is the fire-and-forget
1250−// dispatch path's only way to mark a run as accepted-but-not-yet-active
1251−// so a cancel arriving before the run registers in activeRequests is not
1252−// lost.
1253−func (c *coordinator) BeginAccepted(sessionID string) *AcceptedRun {
1254− return c.currentAgent.BeginAccepted(sessionID)
1255−}
1256−
1257892func (c *coordinator) Cancel(sessionID string) {
1258893 c.currentAgent.Cancel(sessionID)
1259894}
@@ -1286,34 +921,15 @@ func (c *coordinator) UpdateModels(ctx context.Context) error {
1286921 }
1287922 c.currentAgent.SetModels(large, small)
1288923
1289− cfg := c.cfg.Config()
1290− agentCfg, ok := cfg.Agents[config.AgentCoder]
924+ agentCfg, ok := c.cfg.Config().Agents[config.AgentCoder]
1291925 if !ok {
1292926 return errCoderAgentNotConfigured
1293927 }
1294928
1295− // Fast path: reuse cached tools when neither the config nor the MCP
1296− // tool set has changed since the last build.
1297− mcpGen := c.mcpToolsGen.Load()
1298− c.toolsCacheMu.Lock()
1299− if c.toolsCache != nil && c.toolsCacheCfg == cfg && c.toolsCacheMCP == mcpGen {
1300− c.currentAgent.SetTools(c.toolsCache)
1301− c.toolsCacheMu.Unlock()
1302− return nil
1303− }
1304− c.toolsCacheMu.Unlock()
1305−
1306929 tools, err := c.buildTools(ctx, agentCfg, false)
1307930 if err != nil {
1308931 return err
1309932 }
1310−
1311− c.toolsCacheMu.Lock()
1312− c.toolsCache = tools
1313− c.toolsCacheCfg = cfg
1314− c.toolsCacheMCP = mcpGen
1315− c.toolsCacheMu.Unlock()
1316−
1317933 c.currentAgent.SetTools(tools)
1318934 return nil
1319935}
@@ -1340,15 +956,14 @@ func (c *coordinator) Summarize(ctx context.Context, sessionID string) error {
1340956 return c.currentAgent.Summarize(ctx, sessionID, getProviderOptions(c.currentAgent.Model(), providerCfg))
1341957 }
1342958
1343− return c.runWithUnauthorizedRetry(ctx, providerCfg, summarize)
1344−}
1345−
1346−// GenerateTitle generates a session title using the current agent.
1347−func (c *coordinator) GenerateTitle(ctx context.Context, sessionID, prompt string) {
1348− if c.currentAgent == nil {
1349− return
959+ err := summarize()
960+ if err != nil && c.isUnauthorized(err) {
961+ if retryErr := c.retryAfterUnauthorized(ctx, providerCfg); retryErr == nil {
962+ return summarize()
963+ }
1350964 }
1351− c.currentAgent.GenerateTitle(ctx, sessionID, prompt)
965+
966+ return err
1352967}
1353968
1354969// refreshTokenIfExpired proactively refreshes the OAuth token if it has expired.
@@ -1360,21 +975,6 @@ func (c *coordinator) refreshTokenIfExpired(ctx context.Context, providerCfg con
1360975 return c.refreshOAuth2Token(ctx, providerCfg)
1361976}
1362977
1363−// runWithUnauthorizedRetry executes fn. If fn returns a 401 error, it
1364−// attempts to refresh credentials and re-runs fn once. Returns the
1365−// final error: from the retry if a retry was attempted, otherwise from
1366−// the original run. Callers that need to notify the user on persistent
1367−// failure should check isUnauthorized on the returned error.
1368−func (c *coordinator) runWithUnauthorizedRetry(ctx context.Context, providerCfg config.ProviderConfig, fn func() error) error {
1369− err := fn()
1370− if err != nil && c.isUnauthorized(err) {
1371− if retryErr := c.retryAfterUnauthorized(ctx, providerCfg); retryErr == nil {
1372− return fn()
1373− }
1374− }
1375− return err
1376−}
1377−
1378978// retryAfterUnauthorized attempts to refresh credentials after receiving a 401
1379979// and returns nil if retry should be attempted.
1380980func (c *coordinator) retryAfterUnauthorized(ctx context.Context, providerCfg config.ProviderConfig) error {
@@ -1464,60 +1064,28 @@ func (c *coordinator) runSubAgent(ctx context.Context, params subAgentParams) (f
14641064 }
14651065
14661066 // Run the agent
1467− run := func() (*fantasy.AgentResult, error) {
1468− return params.Agent.Run(ctx, SessionAgentCall{
1469− SessionID: session.ID,
1470− Prompt: params.Prompt,
1471− MaxOutputTokens: maxTokens,
1472− ProviderOptions: getProviderOptions(model, providerCfg),
1473− Temperature: model.ModelCfg.Temperature,
1474− TopP: model.ModelCfg.TopP,
1475− TopK: model.ModelCfg.TopK,
1476− FrequencyPenalty: model.ModelCfg.FrequencyPenalty,
1477− PresencePenalty: model.ModelCfg.PresencePenalty,
1478− NonInteractive: true,
1479− })
1480− }
1481− var result *fantasy.AgentResult
1482− err = c.runWithUnauthorizedRetry(ctx, providerCfg, func() error {
1483− var runErr error
1484− result, runErr = run()
1485− return runErr
1067+ result, err := params.Agent.Run(ctx, SessionAgentCall{
1068+ SessionID: session.ID,
1069+ Prompt: params.Prompt,
1070+ MaxOutputTokens: maxTokens,
1071+ ProviderOptions: getProviderOptions(model, providerCfg),
1072+ Temperature: model.ModelCfg.Temperature,
1073+ TopP: model.ModelCfg.TopP,
1074+ TopK: model.ModelCfg.TopK,
1075+ FrequencyPenalty: model.ModelCfg.FrequencyPenalty,
1076+ PresencePenalty: model.ModelCfg.PresencePenalty,
1077+ NonInteractive: true,
14861078 })
1487− // Notify only if still unauthorized after retry.
1488− if err != nil && c.isUnauthorized(err) && c.notify != nil && model.ModelCfg.Provider == hyper.Name {
1489− c.notify.Publish(pubsub.CreatedEvent, notify.Notification{
1490− Type: notify.TypeReAuthenticate,
1491− ProviderID: model.ModelCfg.Provider,
1492− })
1493− }
14941079 if err != nil {
14951080 return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to generate response: %s", err)), nil
14961081 }
14971082
1498− // Update parent session cost on a best-effort basis. A failure here must
1499− // not discard the sub-agent output that was already produced.
1083+ // Update parent session cost
15001084 if err := c.updateParentSessionCost(ctx, session.ID, params.SessionID); err != nil {
1501− slog.Warn(
1502− "Failed to update parent session cost",
1503− "child_session", session.ID,
1504− "parent_session", params.SessionID,
1505− "error", err,
1506− )
1085+ return fantasy.ToolResponse{}, err
15071086 }
15081087
1509− output := subAgentOutput(result)
1510− if output == "" {
1511− return fantasy.NewTextErrorResponse("Sub-agent completed but produced no text output."), nil
1512− }
1513− return fantasy.NewTextResponse(output), nil
1514−}
1515−
1516−func subAgentOutput(result *fantasy.AgentResult) string {
1517− if result == nil {
1518− return ""
1519− }
1520− return result.Response.Content.Text()
1088+ return fantasy.NewTextResponse(result.Response.Content.Text()), nil
15211089}
15221090
15231091// updateParentSessionCost accumulates the cost from a child session to its parent session.
@@ -1541,31 +1109,42 @@ func (c *coordinator) updateParentSessionCost(ctx context.Context, childSessionI
15411109 return nil
15421110}
15431111
1544−// discoverSkills is a thin fallback wrapper used only when no
1545−// skills.Manager has been threaded through to the coordinator. All
1546−// production call sites (backend.CreateWorkspace, setupLocalWorkspace)
1547−// run discovery in advance and pass the results via the manager;
1548−// reaching this path means a caller bypassed both. It deliberately does
1549−// NOT publish to the package-level broker — there are no subscribers in
1550−// that case, so doing so would be misleading without delivering the
1551−// snapshot anywhere useful.
1112+// discoverSkills runs the skill discovery pipeline and returns both the
1113+// pre-filter (all discovered, after dedup) and post-filter (active) lists.
1114+// It also emits a single diagnostic log line summarising the outcome to
1115+// help track skill-loading health over time.
15521116func discoverSkills(cfg *config.ConfigStore) (allSkills, activeSkills []*skills.Skill) {
1117+ builtin, builtinStates := skills.DiscoverBuiltinWithStates()
1118+ discovered := append([]*skills.Skill(nil), builtin...)
1119+
1120+ var userStates []*skills.SkillState
1121+ var userPaths []string
1122+
15531123 opts := cfg.Config().Options
1554− var paths, disabled []string
1555− if opts != nil {
1556− paths = opts.SkillsPaths
1557− disabled = opts.DisabledSkills
1124+ if opts != nil && len(opts.SkillsPaths) > 0 {
1125+ userPaths = make([]string, 0, len(opts.SkillsPaths))
1126+ for _, pth := range opts.SkillsPaths {
1127+ expanded := home.Long(pth)
1128+ if strings.HasPrefix(expanded, "$") {
1129+ if resolved, err := cfg.Resolver().ResolveValue(expanded); err == nil {
1130+ expanded = resolved
1131+ }
1132+ }
1133+ userPaths = append(userPaths, expanded)
1134+ }
1135+ var userSkills []*skills.Skill
1136+ userSkills, userStates = skills.DiscoverWithStates(userPaths)
1137+ discovered = append(discovered, userSkills...)
15581138 }
1559− var resolver func(string) (string, error)
1560− if r := cfg.Resolver(); r != nil {
1561− resolver = r.ResolveValue
1139+
1140+ allSkills = skills.Deduplicate(discovered)
1141+ var disabledSkills []string
1142+ if opts != nil {
1143+ disabledSkills = opts.DisabledSkills
15621144 }
1563− allSkills, activeSkills, states := skills.DiscoverFromConfig(skills.DiscoveryConfig{
1564− SkillsPaths: paths,
1565− DisabledSkills: disabled,
1566− Resolver: resolver,
1567− })
1568− logDiscoveryStats(states, paths, allSkills, activeSkills, disabled)
1145+ activeSkills = skills.Filter(allSkills, disabledSkills)
1146+
1147+ logDiscoveryStats(builtin, builtinStates, userStates, userPaths, allSkills, activeSkills, disabledSkills)
15691148 return allSkills, activeSkills
15701149}
15711150
@@ -1600,8 +1179,7 @@ func logTurnSkillUsage(
16001179 }
16011180 }
16021181
1603− slog.Info(
1604− "Skill turn summary",
1182+ slog.Info("Skill turn summary",
16051183 "component", "skills",
16061184 "session_id", sessionID,
16071185 "prompt_len", len(prompt),
@@ -1613,26 +1191,28 @@ func logTurnSkillUsage(
16131191
16141192// logDiscoveryStats emits a single structured log line summarising skill
16151193// discovery for the current session. It is intentionally low-volume: one
1616−// line per session start. Builtin vs user counts are derived from the
1617−// SkillState.Path — builtin states use the "builtin/" embed prefix.
1194+// line per session start.
16181195func logDiscoveryStats(
1619− states []*skills.SkillState,
1196+ builtin []*skills.Skill,
1197+ builtinStates, userStates []*skills.SkillState,
16201198 userPaths []string,
16211199 allSkills, activeSkills []*skills.Skill,
16221200 disabled []string,
16231201) {
1624− var builtinOK, builtinErr, userOK, userErr int
1625− for _, s := range states {
1626− isBuiltin := strings.HasPrefix(s.Path, "builtin/")
1627− switch {
1628− case isBuiltin && s.State == skills.StateNormal:
1629− builtinOK++
1630− case isBuiltin && s.State == skills.StateError:
1631− builtinErr++
1632− case !isBuiltin && s.State == skills.StateNormal:
1202+ countErrors := func(states []*skills.SkillState) int {
1203+ n := 0
1204+ for _, s := range states {
1205+ if s.State == skills.StateError {
1206+ n++
1207+ }
1208+ }
1209+ return n
1210+ }
1211+
1212+ userOK := 0
1213+ for _, s := range userStates {
1214+ if s.State == skills.StateNormal {
16331215 userOK++
1634− case !isBuiltin && s.State == skills.StateError:
1635− userErr++
16361216 }
16371217 }
16381218
@@ -1643,13 +1223,12 @@ func logDiscoveryStats(
16431223
16441224 xml := skills.ToPromptXML(activeSkills)
16451225
1646− slog.Info(
1647− "Skill discovery complete",
1226+ slog.Info("Skill discovery complete",
16481227 "component", "skills",
1649− "builtin_ok", builtinOK,
1650− "builtin_errors", builtinErr,
1228+ "builtin_ok", len(builtin),
1229+ "builtin_errors", countErrors(builtinStates),
16511230 "user_ok", userOK,
1652− "user_errors", userErr,
1231+ "user_errors", countErrors(userStates),
16531232 "user_paths", len(userPaths),
16541233 "deduped_total", len(allSkills),
16551234 "active", len(activeSkills),
internal/agent/coordinator_test.go−169
@@ -7,9 +7,6 @@ import (
77
88 "charm.land/catwalk/pkg/catwalk"
99 "charm.land/fantasy"
10− "charm.land/fantasy/providers/anthropic"
11− "charm.land/fantasy/providers/bedrock"
12− "charm.land/fantasy/providers/openaicompat"
1310 "github.com/charmbracelet/crush/internal/config"
1411 "github.com/stretchr/testify/assert"
1512 "github.com/stretchr/testify/require"
@@ -26,10 +23,6 @@ func (m *mockSessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fan
2623 return m.runFunc(ctx, call)
2724}
2825
29−func (m *mockSessionAgent) BeginAccepted(sessionID string) *AcceptedRun {
30− return &AcceptedRun{sessionID: sessionID}
31−}
32−
3326func (m *mockSessionAgent) Model() Model { return m.model }
3427func (m *mockSessionAgent) SetModels(large, small Model) {}
3528func (m *mockSessionAgent) SetTools(tools []fantasy.AgentTool) {}
@@ -46,7 +39,6 @@ func (m *mockSessionAgent) ClearQueue(sessionID string) {}
4639func (m *mockSessionAgent) Summarize(context.Context, string, fantasy.ProviderOptions) error {
4740 return nil
4841}
49−func (m *mockSessionAgent) GenerateTitle(context.Context, string, string) {}
5042
5143// newTestCoordinator creates a minimal coordinator for unit testing runSubAgent.
5244func newTestCoordinator(t *testing.T, env fakeEnv, providerID string, providerCfg config.ProviderConfig) *coordinator {
@@ -56,7 +48,6 @@ func newTestCoordinator(t *testing.T, env fakeEnv, providerID string, providerCf
5648 return &coordinator{
5749 cfg: cfg,
5850 sessions: env.sessions,
59− messages: env.messages,
6051 }
6152}
6253
@@ -116,99 +107,6 @@ func TestRunSubAgent(t *testing.T) {
116107 assert.False(t, resp.IsError)
117108 })
118109
119− t.Run("cost update failure preserves output", func(t *testing.T) {
120− env := testEnv(t)
121− coord := newTestCoordinator(t, env, providerID, providerCfg)
122−
123− agent := newMockAgent(providerID, 4096, func(_ context.Context, _ SessionAgentCall) (*fantasy.AgentResult, error) {
124− return agentResultWithText("output before cost failure"), nil
125− })
126−
127− resp, err := coord.runSubAgent(t.Context(), subAgentParams{
128− Agent: agent,
129− SessionID: "missing-parent-session",
130− AgentMessageID: "msg-1",
131− ToolCallID: "call-1",
132− Prompt: "test",
133− SessionTitle: "Test",
134− })
135− require.NoError(t, err)
136− assert.False(t, resp.IsError)
137− assert.Equal(t, "output before cost failure", resp.Content)
138− })
139−
140− t.Run("response with text returns it", func(t *testing.T) {
141− env := testEnv(t)
142− coord := newTestCoordinator(t, env, providerID, providerCfg)
143−
144− parentSession, err := env.sessions.Create(t.Context(), "Parent")
145− require.NoError(t, err)
146−
147− agent := newMockAgent(providerID, 4096, func(_ context.Context, _ SessionAgentCall) (*fantasy.AgentResult, error) {
148− return agentResultWithText("the answer"), nil
149− })
150−
151− resp, err := coord.runSubAgent(t.Context(), subAgentParams{
152− Agent: agent,
153− SessionID: parentSession.ID,
154− AgentMessageID: "msg-1",
155− ToolCallID: "call-1",
156− Prompt: "test",
157− SessionTitle: "Test",
158− })
159− require.NoError(t, err)
160− assert.False(t, resp.IsError)
161− assert.Equal(t, "the answer", resp.Content)
162− })
163−
164− t.Run("nil result returns error response", func(t *testing.T) {
165− env := testEnv(t)
166− coord := newTestCoordinator(t, env, providerID, providerCfg)
167−
168− parentSession, err := env.sessions.Create(t.Context(), "Parent")
169− require.NoError(t, err)
170−
171− agent := newMockAgent(providerID, 4096, func(_ context.Context, _ SessionAgentCall) (*fantasy.AgentResult, error) {
172− return nil, nil
173− })
174−
175− resp, err := coord.runSubAgent(t.Context(), subAgentParams{
176− Agent: agent,
177− SessionID: parentSession.ID,
178− AgentMessageID: "msg-1",
179− ToolCallID: "call-1",
180− Prompt: "test",
181− SessionTitle: "Test",
182− })
183− require.NoError(t, err)
184− assert.True(t, resp.IsError)
185− assert.Equal(t, "Sub-agent completed but produced no text output.", resp.Content)
186− })
187−
188− t.Run("empty result returns error response", func(t *testing.T) {
189− env := testEnv(t)
190− coord := newTestCoordinator(t, env, providerID, providerCfg)
191−
192− parentSession, err := env.sessions.Create(t.Context(), "Parent")
193− require.NoError(t, err)
194−
195− agent := newMockAgent(providerID, 4096, func(_ context.Context, _ SessionAgentCall) (*fantasy.AgentResult, error) {
196− return &fantasy.AgentResult{}, nil
197− })
198−
199− resp, err := coord.runSubAgent(t.Context(), subAgentParams{
200− Agent: agent,
201− SessionID: parentSession.ID,
202− AgentMessageID: "msg-1",
203− ToolCallID: "call-1",
204− Prompt: "test",
205− SessionTitle: "Test",
206− })
207− require.NoError(t, err)
208− assert.True(t, resp.IsError)
209− assert.Equal(t, "Sub-agent completed but produced no text output.", resp.Content)
210− })
211−
212110 t.Run("ModelCfg.MaxTokens overrides default", func(t *testing.T) {
213111 env := testEnv(t)
214112 coord := newTestCoordinator(t, env, providerID, providerCfg)
@@ -485,70 +383,3 @@ func TestUpdateParentSessionCost(t *testing.T) {
485383 assert.InDelta(t, 0.0, updated.Cost, 1e-9)
486384 })
487385}
488−
489−func TestGetProviderOptionsReasoningEffort(t *testing.T) {
490− // Bedrock is Fantasy's Anthropic under a different provider name; options
491− // must land under anthropic.Name so the Anthropic language model picks them up.
492− tests := []struct {
493− name string
494− providerType catwalk.Type
495− }{
496− {"anthropic honors reasoning_effort", catwalk.Type(anthropic.Name)},
497− {"bedrock honors reasoning_effort", catwalk.Type(bedrock.Name)},
498− }
499− for _, tc := range tests {
500− t.Run(tc.name, func(t *testing.T) {
501− model := Model{
502− CatwalkCfg: catwalk.Model{
503− ID: "claude-opus-4-7",
504− CanReason: true,
505− ReasoningLevels: []string{"max"},
506− },
507− ModelCfg: config.SelectedModel{
508− Provider: "test",
509− ReasoningEffort: "max",
510− },
511− }
512− providerCfg := config.ProviderConfig{ID: "test", Type: tc.providerType}
513−
514− opts := getProviderOptions(model, providerCfg)
515−
516− raw, ok := opts[anthropic.Name]
517− require.True(t, ok, "options should be keyed under anthropic.Name for type %q", tc.providerType)
518− parsed, ok := raw.(*anthropic.ProviderOptions)
519− require.True(t, ok)
520− require.NotNil(t, parsed.Effort)
521− assert.Equal(t, anthropic.Effort("max"), *parsed.Effort)
522− })
523− }
524−}
525−
526−func TestGetProviderOptionsReasoningEffortFallback(t *testing.T) {
527− model := Model{
528− CatwalkCfg: catwalk.Model{
529− ID: "glm-5.2",
530− CanReason: true,
531− ReasoningLevels: []string{"high", "max"},
532− },
533− ModelCfg: config.SelectedModel{
534− Provider: "zai",
535− },
536− }
537− providerCfg := config.ProviderConfig{
538− ID: string(catwalk.InferenceProviderZAI),
539− Type: openaicompat.Name,
540− }
541−
542− opts := getProviderOptions(model, providerCfg)
543−
544− raw, ok := opts[openaicompat.Name]
545− require.True(t, ok)
546− parsed, ok := raw.(*openaicompat.ProviderOptions)
547− require.True(t, ok)
548− require.NotNil(t, parsed.ReasoningEffort)
549− assert.Equal(t, "high", string(*parsed.ReasoningEffort))
550−
551− thinking, ok := parsed.ExtraBody["thinking"].(map[string]any)
552− require.True(t, ok)
553− assert.Equal(t, "enabled", thinking["type"])
554−}
internal/agent/dispatch_cancel_test.godeleted−447
@@ -1,447 +0,0 @@
1−package agent
2−
3−import (
4− "context"
5− "errors"
6− "sync/atomic"
7− "testing"
8− "time"
9−
10− "charm.land/fantasy"
11− "github.com/charmbracelet/crush/internal/agent/notify"
12− "github.com/charmbracelet/crush/internal/message"
13− "github.com/charmbracelet/crush/internal/pubsub"
14− "github.com/stretchr/testify/assert"
15− "github.com/stretchr/testify/require"
16−)
17−
18−// finishStreamModel is a minimal fantasy.LanguageModel that streams a
19−// single text part followed by a normal (FinishReasonStop) finish. It
20−// is enough to drive sessionAgent.Run through PrepareStep and a clean
21−// completion without a recorded provider cassette.
22−type finishStreamModel struct {
23− text string
24−}
25−
26−func (m *finishStreamModel) Provider() string { return "fake" }
27−func (m *finishStreamModel) Model() string { return "fake-model" }
28−
29−func (m *finishStreamModel) Generate(ctx context.Context, call fantasy.Call) (*fantasy.Response, error) {
30− return &fantasy.Response{
31− Content: fantasy.ResponseContent{fantasy.TextContent{Text: m.text}},
32− FinishReason: fantasy.FinishReasonStop,
33− }, nil
34−}
35−
36−func (m *finishStreamModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.StreamResponse, error) {
37− text := m.text
38− return func(yield func(fantasy.StreamPart) bool) {
39− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextStart, ID: "1"}) {
40− return
41− }
42− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextDelta, ID: "1", Delta: text}) {
43− return
44− }
45− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextEnd, ID: "1"}) {
46− return
47− }
48− yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeFinish, FinishReason: fantasy.FinishReasonStop})
49− }, nil
50−}
51−
52−func (m *finishStreamModel) GenerateObject(ctx context.Context, call fantasy.ObjectCall) (*fantasy.ObjectResponse, error) {
53− return nil, errors.New("not implemented")
54−}
55−
56−func (m *finishStreamModel) StreamObject(ctx context.Context, call fantasy.ObjectCall) (fantasy.ObjectStreamResponse, error) {
57− return nil, errors.New("not implemented")
58−}
59−
60−func newStreamTestAgent(t *testing.T) (*sessionAgent, fakeEnv) {
61− t.Helper()
62− env := testEnv(t)
63− model := &finishStreamModel{text: "done"}
64− sa := testSessionAgent(env, model, model, "system").(*sessionAgent)
65− return sa, env
66−}
67−
68−// TestCancel_ActiveAndAcceptedFiresBothBranches covers the case where a
69−// session is actively running (activeRequests set) AND a follow-up has
70−// been accepted (acceptedRuns > 0). A single Cancel must fire both: it
71−// invokes the active cancel func and records a pending cancel for the
72−// accepted follow-up.
73−func TestCancel_ActiveAndAcceptedFiresBothBranches(t *testing.T) {
74− t.Parallel()
75− sa, _ := newCancelTestAgent(t)
76−
77− const sid = "sid"
78− var activeCanceled atomic.Bool
79− sa.activeRequests.Set(sid, func() { activeCanceled.Store(true) })
80−
81− accept := sa.BeginAccepted(sid)
82− defer accept.Close()
83−
84− sa.Cancel(sid)
85−
86− require.True(t, activeCanceled.Load(), "active cancel func must fire")
87− require.True(t, sa.hasPendingCancel(sid), "accepted follow-up must record a pending cancel")
88−}
89−
90−// TestRun_BusyWithPendingCancelTakesCancelOnEntry covers the busy-queue
91−// branch consulting pendingCancels: when the session is busy AND a
92−// cancel has been recorded for an accepted follow-up, Run must take the
93−// cancel-on-entry path (persist a canceled turn) instead of enqueueing
94−// the call behind the active run.
95−func TestRun_BusyWithPendingCancelTakesCancelOnEntry(t *testing.T) {
96− t.Parallel()
97− sa, env := newCancelTestAgent(t)
98−
99− sess, err := env.sessions.Create(t.Context(), "session")
100− require.NoError(t, err)
101−
102− // Make the session look busy: an earlier prompt is active.
103− sa.activeRequests.Set(sess.ID, func() {})
104−
105− accept := sa.BeginAccepted(sess.ID)
106− // A cancel arrives while this follow-up is accepted-but-not-active.
107− sa.Cancel(sess.ID)
108− require.True(t, sa.hasPendingCancel(sess.ID))
109−
110− result, err := sa.Run(t.Context(), SessionAgentCall{
111− SessionID: sess.ID,
112− Prompt: "follow-up",
113− Accepted: accept,
114− })
115− require.NoError(t, err)
116− require.Nil(t, result)
117−
118− // The follow-up was canceled on entry, not enqueued.
119− require.Equal(t, 0, sa.QueuedPrompts(sess.ID),
120− "cancel-on-entry must not enqueue the follow-up behind the active run")
121− require.False(t, sa.hasPendingCancel(sess.ID), "pending cancel must be consumed")
122− require.Equal(t, 0, sa.acceptedCount(sess.ID), "accept reservation must be released")
123−
124− msgs, err := env.messages.List(t.Context(), sess.ID)
125− require.NoError(t, err)
126− require.Len(t, msgs, 2)
127− assert.Equal(t, message.User, msgs[0].Role)
128− assert.Equal(t, message.Assistant, msgs[1].Role)
129− assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
130−}
131−
132−// TestRun_PrepareStepDrainSkipsQueuedOnPendingCancel verifies that the
133−// queue drain inside PrepareStep skips queued follow-up prompts when a
134−// cancel has been recorded for the session: the queued prompt must not
135−// be folded into the active turn as an extra user message.
136−func TestRun_PrepareStepDrainSkipsQueuedOnPendingCancel(t *testing.T) {
137− t.Parallel()
138− sa, env := newStreamTestAgent(t)
139−
140− sess, err := env.sessions.Create(t.Context(), "session")
141− require.NoError(t, err)
142−
143− // A follow-up prompt sits queued for the session.
144− sa.enqueueCall(SessionAgentCall{SessionID: sess.ID, Prompt: "queued-followup"})
145− // A cancel was recorded for the session while it sat in the queue.
146− sa.cancelMark.Set(sess.ID, 1)
147−
148− result, err := sa.Run(t.Context(), SessionAgentCall{
149− SessionID: sess.ID,
150− Prompt: "main",
151− })
152− require.NoError(t, err)
153− require.NotNil(t, result)
154−
155− // Only the main prompt produced a user message; the queued
156− // follow-up was skipped, not folded into the turn.
157− msgs, err := env.messages.List(t.Context(), sess.ID)
158− require.NoError(t, err)
159− var userMsgs []message.Message
160− for _, m := range msgs {
161− if m.Role == message.User {
162− userMsgs = append(userMsgs, m)
163− }
164− }
165− require.Len(t, userMsgs, 1, "queued follow-up must not create a user message")
166− assert.Equal(t, "main", userMsgs[0].Content().String())
167−
168− // The queue was drained and the pending cancel consumed.
169− require.Equal(t, 0, sa.QueuedPrompts(sess.ID))
170− require.False(t, sa.hasPendingCancel(sess.ID))
171−}
172−
173−// TestRun_NormalCompletionClearsStalePendingCancel verifies that a Run
174−// which completes normally clears any stale pending-cancel entry for the
175−// session, so it cannot catch a future run.
176−func TestRun_NormalCompletionClearsStalePendingCancel(t *testing.T) {
177− t.Parallel()
178− sa, env := newStreamTestAgent(t)
179−
180− sess, err := env.sessions.Create(t.Context(), "session")
181− require.NoError(t, err)
182−
183− // A stale cancel mark lingers (no queued work, no accepted run).
184− sa.cancelMark.Set(sess.ID, 1)
185−
186− result, err := sa.Run(t.Context(), SessionAgentCall{
187− SessionID: sess.ID,
188− Prompt: "main",
189− })
190− require.NoError(t, err)
191− require.NotNil(t, result)
192−
193− require.False(t, sa.hasPendingCancel(sess.ID),
194− "normal completion must clear the stale pending cancel")
195−
196− msgs, err := env.messages.List(t.Context(), sess.ID)
197− require.NoError(t, err)
198− require.Len(t, msgs, 2)
199− assert.Equal(t, message.Assistant, msgs[1].Role)
200− assert.Equal(t, message.FinishReasonEndTurn, msgs[1].FinishReason())
201−}
202−
203−// newCancelTestAgentWithRunComplete builds a DB-backed sessionAgent wired
204−// to a RunComplete broker so tests can observe the terminal event a
205−// RunID-bearing caller (e.g. `crush run`) blocks on.
206−func newCancelTestAgentWithRunComplete(t *testing.T) (*sessionAgent, fakeEnv, *pubsub.Broker[notify.RunComplete]) {
207− t.Helper()
208− env := testEnv(t)
209− broker := pubsub.NewBroker[notify.RunComplete]()
210− t.Cleanup(broker.Shutdown)
211− sa := NewSessionAgent(SessionAgentOptions{
212− Sessions: env.sessions,
213− Messages: env.messages,
214− RunComplete: broker,
215− }).(*sessionAgent)
216− return sa, env, broker
217−}
218−
219−// TestRun_CancelOnEntryPublishesRunComplete covers the first review
220−// finding: the cancel-on-entry path returned before the streaming defer
221−// that publishes RunComplete was installed. A caller that dispatches a
222−// run with a RunID and blocks on RunComplete (ignoring message events,
223−// like `crush run`) would hang on an immediately-canceled accepted run.
224−// The cancel-on-entry path must publish a terminal RunComplete carrying
225−// the originating RunID.
226−func TestRun_CancelOnEntryPublishesRunComplete(t *testing.T) {
227− t.Parallel()
228− sa, env, broker := newCancelTestAgentWithRunComplete(t)
229−
230− sess, err := env.sessions.Create(t.Context(), "session")
231− require.NoError(t, err)
232−
233− ctx, cancel := context.WithCancel(t.Context())
234− defer cancel()
235− ch := broker.Subscribe(ctx)
236−
237− accept := sa.BeginAccepted(sess.ID)
238− // A cancel arrives in the accepted-but-not-yet-active window.
239− sa.Cancel(sess.ID)
240− require.True(t, sa.hasPendingCancel(sess.ID))
241−
242− result, err := sa.Run(t.Context(), SessionAgentCall{
243− SessionID: sess.ID,
244− RunID: "run-cancel-on-entry",
245− Prompt: "hello",
246− Accepted: accept,
247− })
248− require.NoError(t, err)
249− require.Nil(t, result)
250−
251− select {
252− case got := <-ch:
253− assert.Equal(t, "run-cancel-on-entry", got.Payload.RunID,
254− "RunComplete must echo the originating RunID")
255− assert.Equal(t, sess.ID, got.Payload.SessionID)
256− assert.True(t, got.Payload.Cancelled,
257− "cancel-on-entry RunComplete must be marked cancelled")
258− case <-time.After(2 * time.Second):
259− t.Fatal("cancel-on-entry must publish RunComplete; a RunID caller would hang otherwise")
260− }
261−}
262−
263−// TestCancel_TwoAcceptedBothObserveCancellation covers the second review
264−// finding: a single cancel with two accepted-not-yet-active prompts must
265−// cancel both. The cancel raises the session's high-water mark to the
266−// latest accept sequence, so every prompt accepted-but-not-yet-active at
267−// cancel time is covered and both take the cancel-on-entry path.
268−func TestCancel_TwoAcceptedBothObserveCancellation(t *testing.T) {
269− t.Parallel()
270− sa, env := newCancelTestAgent(t)
271−
272− sess, err := env.sessions.Create(t.Context(), "session")
273− require.NoError(t, err)
274−
275− // Two prompts are accepted-but-not-yet-active for the same session.
276− accept1 := sa.BeginAccepted(sess.ID)
277− accept2 := sa.BeginAccepted(sess.ID)
278− require.Equal(t, 2, sa.acceptedCount(sess.ID))
279−
280− // A single cancel arrives before either becomes active.
281− sa.Cancel(sess.ID)
282− require.Equal(t, accept2.seq, sa.pendingCancelMark(sess.ID),
283− "one cancel must mark every currently-accepted prompt as canceled")
284− require.GreaterOrEqual(t, sa.pendingCancelMark(sess.ID), accept1.seq,
285− "the mark must cover the earlier accepted prompt too")
286−
287− // Both prompts enter Run; each must take cancel-on-entry, not run.
288− r1, err := sa.Run(t.Context(), SessionAgentCall{
289− SessionID: sess.ID,
290− Prompt: "first",
291− Accepted: accept1,
292− })
293− require.NoError(t, err)
294− require.Nil(t, r1)
295−
296− r2, err := sa.Run(t.Context(), SessionAgentCall{
297− SessionID: sess.ID,
298− Prompt: "second",
299− Accepted: accept2,
300− })
301− require.NoError(t, err)
302− require.Nil(t, r2)
303−
304− require.False(t, sa.hasPendingCancel(sess.ID),
305− "both reserved units must be consumed")
306− require.Equal(t, 0, sa.acceptedCount(sess.ID),
307− "both accept reservations must be released")
308−
309− // Each canceled-on-entry turn writes a user + canceled assistant
310− // message, and neither prompt was enqueued to run normally.
311− require.Equal(t, 0, sa.QueuedPrompts(sess.ID),
312− "neither accepted prompt may be enqueued to run normally")
313− msgs, err := env.messages.List(t.Context(), sess.ID)
314− require.NoError(t, err)
315− require.Len(t, msgs, 4, "two canceled turns produce two user + two assistant messages")
316− var canceled int
317− for _, m := range msgs {
318− if m.Role == message.Assistant {
319− assert.Equal(t, message.FinishReasonCanceled, m.FinishReason())
320− canceled++
321− }
322− }
323− require.Equal(t, 2, canceled, "both turns must finish canceled")
324−}
325−
326−// TestRun_IdleCancelDoesNotPoisonNextPrompt covers the idle-cancel
327−// no-op guarantee end-to-end: an Escape on an idle session must not
328−// record a pending cancel that leaks into the next accepted prompt, which
329−// must run normally to completion.
330−func TestRun_IdleCancelDoesNotPoisonNextPrompt(t *testing.T) {
331− t.Parallel()
332− sa, env := newStreamTestAgent(t)
333−
334− sess, err := env.sessions.Create(t.Context(), "session")
335− require.NoError(t, err)
336−
337− // Idle Escape: no accepted run, no active request.
338− sa.Cancel(sess.ID)
339− require.False(t, sa.hasPendingCancel(sess.ID),
340− "idle cancel must not record a pending cancel")
341−
342− // The next accepted prompt must run normally, not cancel on entry.
343− accept := sa.BeginAccepted(sess.ID)
344− result, err := sa.Run(t.Context(), SessionAgentCall{
345− SessionID: sess.ID,
346− Prompt: "next",
347− Accepted: accept,
348− })
349− require.NoError(t, err)
350− require.NotNil(t, result, "next prompt must run normally after an idle cancel")
351−
352− msgs, err := env.messages.List(t.Context(), sess.ID)
353− require.NoError(t, err)
354− require.Len(t, msgs, 2)
355− assert.Equal(t, message.User, msgs[0].Role)
356− assert.Equal(t, message.Assistant, msgs[1].Role)
357− assert.Equal(t, message.FinishReasonEndTurn, msgs[1].FinishReason(),
358− "the prompt must finish normally, not canceled")
359−}
360−
361−// TestCancel_AcceptedAfterCancelIsNotPoisoned is the regression test for
362−// the reviewer's finding: a counted session-level pending cancel let a
363−// prompt accepted after the cancel enter Run first and consume a unit
364−// reserved for the earlier prompts. With a sequence high-water mark, a
365−// single cancel covers exactly the prompts accepted-but-not-yet-active at
366−// cancel time (A and B); a prompt accepted afterwards (C) gets a higher
367−// sequence and must run normally without consuming A or B's cancellation.
368−// C is run first to prove it neither cancels nor drains the mark, then A
369−// and B are run and must both cancel on entry.
370−func TestCancel_AcceptedAfterCancelIsNotPoisoned(t *testing.T) {
371− t.Parallel()
372− sa, env := newStreamTestAgent(t)
373−
374− sess, err := env.sessions.Create(t.Context(), "session")
375− require.NoError(t, err)
376−
377− // A and B are accepted-but-not-yet-active.
378− acceptA := sa.BeginAccepted(sess.ID)
379− acceptB := sa.BeginAccepted(sess.ID)
380−
381− // One cancel arrives covering both A and B.
382− sa.Cancel(sess.ID)
383− require.True(t, sa.hasPendingCancel(sess.ID))
384− require.Equal(t, acceptB.seq, sa.pendingCancelMark(sess.ID),
385− "the mark must cover every prompt accepted before the cancel")
386−
387− // C is accepted AFTER the cancel; its sequence is above the mark.
388− acceptC := sa.BeginAccepted(sess.ID)
389− require.Greater(t, acceptC.seq, sa.pendingCancelMark(sess.ID),
390− "a prompt accepted after the cancel must not be covered by the mark")
391−
392− // Run C first. It must run normally to completion and must not
393− // consume or clear the cancellation reserved for A and B.
394− rc, err := sa.Run(t.Context(), SessionAgentCall{
395− SessionID: sess.ID,
396− Prompt: "C",
397− Accepted: acceptC,
398− })
399− require.NoError(t, err)
400− require.NotNil(t, rc, "C was accepted after the cancel and must run normally")
401− require.True(t, sa.hasPendingCancel(sess.ID),
402− "running C must not drain the cancellation reserved for A and B")
403−
404− // Now A and B run. Both were accepted before the cancel and must
405− // take the cancel-on-entry path.
406− ra, err := sa.Run(t.Context(), SessionAgentCall{
407− SessionID: sess.ID,
408− Prompt: "A",
409− Accepted: acceptA,
410− })
411− require.NoError(t, err)
412− require.Nil(t, ra, "A must cancel on entry, not run")
413−
414− rb, err := sa.Run(t.Context(), SessionAgentCall{
415− SessionID: sess.ID,
416− Prompt: "B",
417− Accepted: acceptB,
418− })
419− require.NoError(t, err)
420− require.Nil(t, rb, "B must cancel on entry, not run")
421−
422− require.False(t, sa.hasPendingCancel(sess.ID),
423− "the mark clears once all covered handles are resolved")
424− require.Equal(t, 0, sa.acceptedCount(sess.ID))
425− require.Equal(t, 0, sa.QueuedPrompts(sess.ID),
426− "neither A nor B may be enqueued to run normally")
427−
428− // C produced a normal turn; A and B each produced a canceled turn.
429− msgs, err := env.messages.List(t.Context(), sess.ID)
430− require.NoError(t, err)
431− require.Len(t, msgs, 6, "C normal + A canceled + B canceled = 3 user + 3 assistant")
432−
433− var normal, canceled int
434− for _, m := range msgs {
435− if m.Role != message.Assistant {
436− continue
437− }
438− switch m.FinishReason() {
439− case message.FinishReasonEndTurn:
440− normal++
441− case message.FinishReasonCanceled:
442− canceled++
443− }
444− }
445− require.Equal(t, 1, normal, "only C finished normally")
446− require.Equal(t, 2, canceled, "both A and B finished canceled")
447−}
internal/agent/hyper/provider.go+3−25
@@ -11,7 +11,6 @@ import (
1111 "net/http"
1212 "os"
1313 "sync"
14− "sync/atomic"
1514 "time"
1615
1716 "charm.land/catwalk/pkg/catwalk"
@@ -48,30 +47,9 @@ var BaseURL = sync.OnceValue(func() string {
4847 return cmp.Or(os.Getenv("HYPER_URL"), defaultBaseURL)
4948})
5049
51−// lastKnownBalance stores the most recently extracted hypercredit balance
52−// from API response metadata. FetchCredits checks this before making a
53−// separate HTTP call.
54−var lastKnownBalance atomic.Int64
55−
56−// hasBalance tracks whether lastKnownBalance has been set.
57−var hasBalance atomic.Bool
58−
59−// SetBalance stores a credit balance extracted from API response metadata.
60−func SetBalance(balance int) {
61− lastKnownBalance.Store(int64(balance))
62− hasBalance.Store(true)
63−}
64−
65−// FetchCredits returns the remaining hypercredit balance. It first checks
66−// for a balance extracted from the most recent API response's usage
67−// metadata. If none is available, it falls back to calling the /v1/credits
68−// endpoint directly.
50+// FetchCredits calls the Hyper /v1/credits endpoint and returns the remaining
51+// credits count.
6952func FetchCredits(ctx context.Context, apiKey string) (int, error) {
70− if hasBalance.Load() {
71− hasBalance.Store(false)
72− return int(lastKnownBalance.Load()), nil
73− }
74−
7553 req, err := http.NewRequestWithContext(
7654 ctx,
7755 http.MethodGet,
@@ -88,7 +66,7 @@ func FetchCredits(ctx context.Context, apiKey string) (int, error) {
8866 if err != nil {
8967 return 0, fmt.Errorf("failed to make request: %w", err)
9068 }
91− defer resp.Body.Close()
69+ defer resp.Body.Close() //nolint:errcheck
9270
9371 if resp.StatusCode != http.StatusOK {
9472 return 0, fmt.Errorf("unexpected status code: %d", resp.StatusCode)
internal/agent/hyper/provider.json+61−184
@@ -3,61 +3,51 @@
33 "id": "hyper",
44 "api_endpoint": "https://hyper.charm.land/api/v1/fantasy",
55 "type": "hyper",
6− "default_large_model_id": "qwen3.7-plus",
7− "default_small_model_id": "deepseek-v4-flash",
6+ "default_large_model_id": "kimi-k2.5",
7+ "default_small_model_id": "gpt-oss-120b",
88 "models": [
99 {
1010 "id": "deepseek-v4-flash",
1111 "name": "DeepSeek V4 Flash",
12− "cost_per_1m_in": 0.14,
13− "cost_per_1m_out": 0.28,
14− "cost_per_1m_in_cached": 0.0028,
12+ "cost_per_1m_in": 1.55,
13+ "cost_per_1m_out": 2.28,
14+ "cost_per_1m_in_cached": 0.38,
1515 "cost_per_1m_out_cached": 0,
16− "context_window": 1000000,
17− "default_max_tokens": 384000,
16+ "context_window": 1048576,
17+ "default_max_tokens": 104857,
1818 "can_reason": true,
19− "reasoning_levels": [
20− "high",
21− "xhigh"
22− ],
23− "default_reasoning_effort": "high",
2419 "supports_attachments": false
2520 },
2621 {
2722 "id": "deepseek-v4-pro",
2823 "name": "DeepSeek V4 Pro",
29− "cost_per_1m_in": 0.435,
30− "cost_per_1m_out": 0.87,
31− "cost_per_1m_in_cached": 0.0036,
24+ "cost_per_1m_in": 4.45,
25+ "cost_per_1m_out": 5.5,
26+ "cost_per_1m_in_cached": 0.35,
3227 "cost_per_1m_out_cached": 0,
33− "context_window": 1000000,
34− "default_max_tokens": 384000,
28+ "context_window": 1048576,
29+ "default_max_tokens": 104857,
3530 "can_reason": true,
36− "reasoning_levels": [
37− "high",
38− "xhigh"
39− ],
40− "default_reasoning_effort": "high",
4131 "supports_attachments": false
4232 },
4333 {
4434 "id": "gemma-4-26b-a4b-it",
4535 "name": "Gemma 4 26B A4B",
46− "cost_per_1m_in": 0.126,
47− "cost_per_1m_out": 0.42,
48− "cost_per_1m_in_cached": 0.063,
36+ "cost_per_1m_in": 0.145,
37+ "cost_per_1m_out": 0.5,
38+ "cost_per_1m_in_cached": 0.08,
4939 "cost_per_1m_out_cached": 0,
50− "context_window": 256000,
51− "default_max_tokens": 25600,
40+ "context_window": 32768,
41+ "default_max_tokens": 3276,
5242 "can_reason": true,
5343 "supports_attachments": false
5444 },
5545 {
5646 "id": "glm-5",
5747 "name": "GLM-5",
58− "cost_per_1m_in": 0.86,
59− "cost_per_1m_out": 2.784,
60− "cost_per_1m_in_cached": 0.43,
48+ "cost_per_1m_in": 1,
49+ "cost_per_1m_out": 3,
50+ "cost_per_1m_in_cached": 0.5,
6151 "cost_per_1m_out_cached": 0,
6252 "context_window": 202752,
6353 "default_max_tokens": 20275,
@@ -67,45 +57,22 @@
6757 {
6858 "id": "glm-5.1",
6959 "name": "GLM-5.1",
70− "cost_per_1m_in": 1.3,
71− "cost_per_1m_out": 4.3,
72− "cost_per_1m_in_cached": 0.26,
73− "cost_per_1m_out_cached": 0,
74− "context_window": 202000,
75− "default_max_tokens": 202000,
76− "can_reason": true,
77− "reasoning_levels": [
78− "low",
79− "medium",
80− "high"
81− ],
82− "default_reasoning_effort": "medium",
83− "supports_attachments": false
84− },
85− {
86− "id": "glm-5.2",
87− "name": "GLM-5.2",
8860 "cost_per_1m_in": 1.5,
89− "cost_per_1m_out": 4.5,
90− "cost_per_1m_in_cached": 0.3,
61+ "cost_per_1m_out": 4.4,
62+ "cost_per_1m_in_cached": 0.26,
9163 "cost_per_1m_out_cached": 0,
92− "context_window": 1000000,
93− "default_max_tokens": 128000,
64+ "context_window": 202752,
65+ "default_max_tokens": 20275,
9466 "can_reason": true,
95− "reasoning_levels": [
96− "high",
97− "xhigh"
98− ],
99− "default_reasoning_effort": "high",
10067 "supports_attachments": false
10168 },
10269 {
10370 "id": "gpt-oss-120b",
10471 "name": "gpt-oss-120b",
105− "cost_per_1m_in": 0.168,
106− "cost_per_1m_out": 0.562,
107− "cost_per_1m_in_cached": 0.084,
108− "cost_per_1m_out_cached": 0,
72+ "cost_per_1m_in": 0.1,
73+ "cost_per_1m_out": 0.4,
74+ "cost_per_1m_in_cached": 0.01,
75+ "cost_per_1m_out_cached": 0.04,
10976 "context_window": 131072,
11077 "default_max_tokens": 13107,
11178 "can_reason": true,
@@ -120,58 +87,34 @@
12087 {
12188 "id": "kimi-k2.5",
12289 "name": "Kimi K2.5",
123− "cost_per_1m_in": 0.51,
124− "cost_per_1m_out": 2.67,
125− "cost_per_1m_in_cached": 0.255,
126− "cost_per_1m_out_cached": 0,
90+ "cost_per_1m_in": 0.445,
91+ "cost_per_1m_out": 2,
92+ "cost_per_1m_in_cached": 0.225,
93+ "cost_per_1m_out_cached": 1.1,
12794 "context_window": 262144,
12895 "default_max_tokens": 26214,
12996 "can_reason": true,
130− "supports_attachments": false
97+ "supports_attachments": true
13198 },
13299 {
133100 "id": "kimi-k2.6",
134101 "name": "Kimi K2.6",
135− "cost_per_1m_in": 0.95,
136− "cost_per_1m_out": 4,
137− "cost_per_1m_in_cached": 0.16,
102+ "cost_per_1m_in": 0.74,
103+ "cost_per_1m_out": 3.5,
104+ "cost_per_1m_in_cached": 0.25,
138105 "cost_per_1m_out_cached": 0,
139− "context_window": 262000,
140− "default_max_tokens": 262000,
106+ "context_window": 32768,
107+ "default_max_tokens": 3276,
141108 "can_reason": true,
142− "reasoning_levels": [
143− "low",
144− "medium",
145− "high"
146− ],
147− "default_reasoning_effort": "medium",
148− "supports_attachments": true
149− },
150− {
151− "id": "kimi-k2.7-code",
152− "name": "Kimi K2.7 Code",
153− "cost_per_1m_in": 0.95,
154− "cost_per_1m_out": 4,
155− "cost_per_1m_in_cached": 0.19,
156− "cost_per_1m_out_cached": 0,
157− "context_window": 256000,
158− "default_max_tokens": 32768,
159− "can_reason": true,
160− "reasoning_levels": [
161− "low",
162− "medium",
163− "high"
164− ],
165− "default_reasoning_effort": "medium",
166109 "supports_attachments": true
167110 },
168111 {
169112 "id": "llama-3.3-70b-instruct",
170113 "name": "Llama 3.3 70B Instruct",
171− "cost_per_1m_in": 0.6066,
172− "cost_per_1m_out": 1.0386,
173− "cost_per_1m_in_cached": 0.3033,
174− "cost_per_1m_out_cached": 0,
114+ "cost_per_1m_in": 0.1,
115+ "cost_per_1m_out": 0.32,
116+ "cost_per_1m_in_cached": 0.05,
117+ "cost_per_1m_out_cached": 0.2,
175118 "context_window": 128000,
176119 "default_max_tokens": 12800,
177120 "can_reason": true,
@@ -180,100 +123,34 @@
180123 {
181124 "id": "llama-4-maverick-17b-128e-instruct-fp8",
182125 "name": "Llama 4 Maverick 17B 128E Instruct FP8",
183− "cost_per_1m_in": 0.274,
184− "cost_per_1m_out": 0.894,
185− "cost_per_1m_in_cached": 0.137,
186− "cost_per_1m_out_cached": 0,
126+ "cost_per_1m_in": 0.15,
127+ "cost_per_1m_out": 0.6,
128+ "cost_per_1m_in_cached": 0.075,
129+ "cost_per_1m_out_cached": 0.3,
187130 "context_window": 430000,
188131 "default_max_tokens": 43000,
189132 "can_reason": true,
190− "supports_attachments": false
191− },
192− {
193− "id": "minimax-m2.7",
194− "name": "MiniMax M2.7",
195− "cost_per_1m_in": 0.3,
196− "cost_per_1m_out": 1.2,
197− "cost_per_1m_in_cached": 0.06,
198− "cost_per_1m_out_cached": 0.375,
199− "context_window": 204800,
200− "default_max_tokens": 131000,
201− "can_reason": true,
202− "reasoning_levels": [
203− "low",
204− "medium",
205− "high"
206− ],
207− "default_reasoning_effort": "medium",
208− "supports_attachments": false
209− },
210− {
211− "id": "qwen3.6-flash",
212− "name": "Qwen3.6-Flash",
213− "cost_per_1m_in": 1,
214− "cost_per_1m_out": 4,
215− "cost_per_1m_in_cached": 1.25,
216− "cost_per_1m_out_cached": 0.1,
217− "context_window": 1000000,
218− "default_max_tokens": 64000,
219− "can_reason": true,
220133 "supports_attachments": true
221134 },
222135 {
223− "id": "qwen3.6-max",
224− "name": "Qwen3.6-Max",
225− "cost_per_1m_in": 2,
226− "cost_per_1m_out": 12,
227− "cost_per_1m_in_cached": 2.5,
228− "cost_per_1m_out_cached": 0.2,
229− "context_window": 256000,
230− "default_max_tokens": 64000,
231− "can_reason": true,
232− "supports_attachments": false
233− },
234− {
235− "id": "qwen3.6-plus",
236− "name": "Qwen3.6-Plus",
136+ "id": "mistral-large-instruct-2411",
137+ "name": "Mistral Large Instruct 2411",
237138 "cost_per_1m_in": 2,
238139 "cost_per_1m_out": 6,
239− "cost_per_1m_in_cached": 2.5,
240− "cost_per_1m_out_cached": 0.2,
241− "context_window": 1000000,
242− "default_max_tokens": 64000,
243− "can_reason": true,
244− "supports_attachments": true
245− },
246− {
247− "id": "qwen3.7-max",
248− "name": "Qwen3.7-Max",
249− "cost_per_1m_in": 2.5,
250− "cost_per_1m_out": 7.5,
251− "cost_per_1m_in_cached": 3.125,
252− "cost_per_1m_out_cached": 0.25,
253− "context_window": 1000000,
254− "default_max_tokens": 64000,
255− "can_reason": true,
256− "supports_attachments": false
257− },
258− {
259− "id": "qwen3.7-plus",
260− "name": "Qwen3.7-Plus",
261− "cost_per_1m_in": 1.2,
262− "cost_per_1m_out": 4.8,
263− "cost_per_1m_in_cached": 1.5,
264− "cost_per_1m_out_cached": 0.12,
265− "context_window": 1000000,
266− "default_max_tokens": 64000,
267− "can_reason": true,
140+ "cost_per_1m_in_cached": 1,
141+ "cost_per_1m_out_cached": 4,
142+ "context_window": 128000,
143+ "default_max_tokens": 12800,
144+ "can_reason": false,
268145 "supports_attachments": true
269146 },
270147 {
271148 "id": "qwen3-coder-480b-a35b-instruct-int4-mixed-ar",
272149 "name": "Qwen3 Coder 480B A35B Instruct INT4 Mixed AR",
273− "cost_per_1m_in": 0.557,
274− "cost_per_1m_out": 2.545,
275− "cost_per_1m_in_cached": 0.2785,
276− "cost_per_1m_out_cached": 0,
150+ "cost_per_1m_in": 0.22,
151+ "cost_per_1m_out": 0.95,
152+ "cost_per_1m_in_cached": 0.11,
153+ "cost_per_1m_out_cached": 0.44,
277154 "context_window": 106000,
278155 "default_max_tokens": 10600,
279156 "can_reason": false,
@@ -282,10 +159,10 @@
282159 {
283160 "id": "qwen3-next-80b-a3b-instruct",
284161 "name": "Qwen3 Next 80B A3B Instruct",
285− "cost_per_1m_in": 0.128,
286− "cost_per_1m_out": 1.28,
287− "cost_per_1m_in_cached": 0.064,
288− "cost_per_1m_out_cached": 0,
162+ "cost_per_1m_in": 0.06,
163+ "cost_per_1m_out": 0.6,
164+ "cost_per_1m_in_cached": 0.03,
165+ "cost_per_1m_out_cached": 0.12,
289166 "context_window": 262144,
290167 "default_max_tokens": 26214,
291168 "can_reason": false,
internal/agent/loop_detection.go+17−17
@@ -1,7 +1,8 @@
11package agent
22
33import (
4− "hash/fnv"
4+ "crypto/sha256"
5+ "encoding/hex"
56 "io"
67
78 "charm.land/fantasy"
@@ -21,11 +22,11 @@ func hasRepeatedToolCalls(steps []fantasy.StepResult, windowSize, maxRepeats int
2122 }
2223
2324 window := steps[len(steps)-windowSize:]
24− counts := make(map[uint64]int, windowSize)
25+ counts := make(map[string]int)
2526
2627 for _, step := range window {
2728 sig := getToolInteractionSignature(step.Content)
28− if sig == 0 {
29+ if sig == "" {
2930 continue
3031 }
3132 counts[sig]++
@@ -39,35 +40,34 @@ func hasRepeatedToolCalls(steps []fantasy.StepResult, windowSize, maxRepeats int
3940
4041// getToolInteractionSignature computes a hash signature for the tool
4142// interactions in a single step's content. It pairs tool calls with their
42−// results (matched by ToolCallID) and returns an FNV-1a hash. FNV is ~10x
43−// faster than SHA-256 and collision risk is negligible for loop detection
44−// over a 10-step window. If the step contains no tool calls, it returns 0.
45−func getToolInteractionSignature(content fantasy.ResponseContent) uint64 {
43+// results (matched by ToolCallID) and returns a hex-encoded SHA-256 hash.
44+// If the step contains no tool calls, it returns "".
45+func getToolInteractionSignature(content fantasy.ResponseContent) string {
4646 toolCalls := content.ToolCalls()
4747 if len(toolCalls) == 0 {
48− return 0
48+ return ""
4949 }
5050
5151 // Index tool results by their ToolCallID for fast lookup.
52− resultsByID := make(map[string]fantasy.ToolResultContent, len(toolCalls))
52+ resultsByID := make(map[string]fantasy.ToolResultContent)
5353 for _, tr := range content.ToolResults() {
5454 resultsByID[tr.ToolCallID] = tr
5555 }
5656
57− h := fnv.New64a()
57+ h := sha256.New()
5858 for _, tc := range toolCalls {
5959 output := ""
6060 if tr, ok := resultsByID[tc.ToolCallID]; ok {
6161 output = toolResultOutputString(tr.Result)
6262 }
63− _, _ = io.WriteString(h, tc.ToolName)
64− h.Write([]byte{0})
65− _, _ = io.WriteString(h, tc.Input)
66− h.Write([]byte{0})
67− _, _ = io.WriteString(h, output)
68− h.Write([]byte{0})
63+ io.WriteString(h, tc.ToolName)
64+ io.WriteString(h, "\x00")
65+ io.WriteString(h, tc.Input)
66+ io.WriteString(h, "\x00")
67+ io.WriteString(h, output)
68+ io.WriteString(h, "\x00")
6969 }
70− return h.Sum64()
70+ return hex.EncodeToString(h.Sum(nil))
7171}
7272
7373// toolResultOutputString converts a ToolResultOutputContent to a stable string
internal/agent/loop_detection_test.go+8−8
@@ -145,18 +145,18 @@ func TestHasRepeatedToolCalls(t *testing.T) {
145145func TestGetToolInteractionSignature(t *testing.T) {
146146 t.Run("empty content returns empty string", func(t *testing.T) {
147147 sig := getToolInteractionSignature(fantasy.ResponseContent{})
148− if sig != 0 {
149− t.Errorf("expected zero signature, got %d", sig)
148+ if sig != "" {
149+ t.Errorf("expected empty string, got %q", sig)
150150 }
151151 })
152152
153− t.Run("text only content returns zero signature", func(t *testing.T) {
153+ t.Run("text only content returns empty string", func(t *testing.T) {
154154 content := fantasy.ResponseContent{
155155 fantasy.TextContent{Text: "hello"},
156156 }
157157 sig := getToolInteractionSignature(content)
158− if sig != 0 {
159− t.Errorf("expected zero signature, got %d", sig)
158+ if sig != "" {
159+ t.Errorf("expected empty string, got %q", sig)
160160 }
161161 })
162162
@@ -166,8 +166,8 @@ func TestGetToolInteractionSignature(t *testing.T) {
166166 fantasy.ToolResultContent{ToolCallID: "1", ToolName: "read", Result: fantasy.ToolResultOutputContentText{Text: "content"}},
167167 }
168168 sig := getToolInteractionSignature(content)
169− if sig == 0 {
170− t.Error("expected non-zero signature")
169+ if sig == "" {
170+ t.Error("expected non-empty signature")
171171 }
172172 })
173173
@@ -183,7 +183,7 @@ func TestGetToolInteractionSignature(t *testing.T) {
183183 sig1 := getToolInteractionSignature(content1)
184184 sig2 := getToolInteractionSignature(content2)
185185 if sig1 != sig2 {
186− t.Errorf("expected same signature for same interactions, got %d and %d", sig1, sig2)
186+ t.Errorf("expected same signature for same interactions, got %q and %q", sig1, sig2)
187187 }
188188 })
189189
internal/agent/notify/notify.go−40
@@ -12,9 +12,6 @@ const (
1212 // TypeReAuthenticate indicates the agent encountered an
1313 // authentication error and the user needs to re-authenticate.
1414 TypeReAuthenticate Type = "re_authenticate"
15− // TypeAgentError indicates the agent's turn terminated with an
16− // error. The error text is carried in Notification.Message.
17− TypeAgentError Type = "error"
1815)
1916
2017// Notification represents a domain event published by the agent.
@@ -23,41 +20,4 @@ type Notification struct {
2320 SessionTitle string
2421 Type Type
2522 ProviderID string
26− // RunID, when non-empty, is the caller-supplied correlator
27− // (proto.AgentMessage.RunID) for the run that produced this
28− // notification. It lets observers attribute a TypeAgentError to a
29− // specific request rather than to any in-flight run on the
30− // session. Empty when no caller set one.
31− RunID string
32− // Message carries the error text for TypeAgentError. Other
33− // notification types ignore it.
34− Message string
35−}
36−
37−// RunComplete is the authoritative end-of-run signal for a session.
38−// It is published exactly once per top-level agent run (per
39−// [sessionAgent.Run] invocation that actually executed) after all
40−// message updates for the turn have been flushed via
41−// message.Service.FlushAll. Carries the final assistant text and
42−// message ID so non-interactive clients can reconcile stdout even if
43−// SSE events arrive out of order or are dropped by the broker. Error
44−// is non-empty when the run terminated with an error; Cancelled is
45−// true when the run terminated due to context cancellation. The two
46−// are mutually exclusive in the success case but may overlap when a
47−// cancel triggers a downstream error.
48−//
49−// RunID identifies the specific request that produced this event.
50−// It is the value the caller set on `proto.AgentMessage.RunID` (or
51−// equivalently propagated via agent.WithRunID on the context that
52−// reaches the coordinator); empty when no caller set one. Filtering
53−// by RunID lets a client correlate a SendMessage call with its
54−// terminal event even when the session is busy and other turns are
55−// finishing on the same session.
56−type RunComplete struct {
57− SessionID string
58− RunID string
59− MessageID string
60− Text string
61− Error string
62− Cancelled bool
6323}
internal/agent/prompt/prompt.go+22−31
@@ -29,17 +29,16 @@ type Prompt struct {
2929}
3030
3131type PromptDat struct {
32− Provider string
33− Model string
34− Config config.Config
35− WorkingDir string
36− IsGitRepo bool
37− Platform string
38− Date string
39− GitStatus string
40− ContextFiles []ContextFile
41− GlobalContextFiles []ContextFile
42− AvailSkillXML string
32+ Provider string
33+ Model string
34+ Config config.Config
35+ WorkingDir string
36+ IsGitRepo bool
37+ Platform string
38+ Date string
39+ GitStatus string
40+ ContextFiles []ContextFile
41+ AvailSkillXML string
4342}
4443
4544type ContextFile struct {
@@ -115,7 +114,7 @@ func processContextPath(p string, store *config.ConfigStore) []ContextFile {
115114 return contexts
116115 }
117116 if info.IsDir() {
118− _ = filepath.WalkDir(fullPath, func(path string, d os.DirEntry, err error) error {
117+ filepath.WalkDir(fullPath, func(path string, d os.DirEntry, err error) error {
119118 if err != nil {
120119 return err
121120 }
@@ -148,27 +147,22 @@ func expandPath(path string, store *config.ConfigStore) string {
148147 return path
149148}
150149
151−// loadContextFiles loads and deduplicates context files from a list of paths.
152−func loadContextFiles(paths []string, store *config.ConfigStore) map[string][]ContextFile {
150+func (p *Prompt) promptData(ctx context.Context, provider, model string, store *config.ConfigStore) (PromptDat, error) {
151+ workingDir := cmp.Or(p.workingDir, store.WorkingDir())
152+ platform := cmp.Or(p.platform, runtime.GOOS)
153+
153154 files := map[string][]ContextFile{}
154− for _, pth := range paths {
155+
156+ cfg := store.Config()
157+ for _, pth := range cfg.Options.ContextPaths {
155158 expanded := expandPath(pth, store)
156159 pathKey := strings.ToLower(expanded)
157160 if _, ok := files[pathKey]; ok {
158161 continue
159162 }
160− files[pathKey] = processContextPath(expanded, store)
163+ content := processContextPath(expanded, store)
164+ files[pathKey] = content
161165 }
162− return files
163−}
164−
165−func (p *Prompt) promptData(ctx context.Context, provider, model string, store *config.ConfigStore) (PromptDat, error) {
166− workingDir := cmp.Or(p.workingDir, store.WorkingDir())
167− platform := cmp.Or(p.platform, runtime.GOOS)
168−
169− cfg := store.Config()
170− contextFiles := loadContextFiles(cfg.Options.ContextPaths, store)
171− globalContextFiles := loadContextFiles(cfg.Options.GlobalContextPaths, store)
172166
173167 // Discover and load skills metadata.
174168 var availSkillXML string
@@ -223,11 +217,8 @@ func (p *Prompt) promptData(ctx context.Context, provider, model string, store *
223217 }
224218 }
225219
226− for _, files := range contextFiles {
227− data.ContextFiles = append(data.ContextFiles, files...)
228− }
229− for _, files := range globalContextFiles {
230− data.GlobalContextFiles = append(data.GlobalContextFiles, files...)
220+ for _, contextFiles := range files {
221+ data.ContextFiles = append(data.ContextFiles, contextFiles...)
231222 }
232223 return data, nil
233224}
internal/agent/queued_runid_test.godeleted−181
@@ -1,181 +0,0 @@
1−package agent
2−
3−import (
4− "context"
5− "errors"
6− "sync/atomic"
7− "testing"
8− "time"
9−
10− "charm.land/catwalk/pkg/catwalk"
11− "charm.land/fantasy"
12− "github.com/charmbracelet/crush/internal/agent/notify"
13− "github.com/charmbracelet/crush/internal/message"
14− "github.com/charmbracelet/crush/internal/pubsub"
15− "github.com/stretchr/testify/require"
16−)
17−
18−// gatedStreamModel streams a single text part followed by a clean finish,
19−// but blocks the very first Stream call until its gate is released. That
20−// lets a test hold a run "active" (past PrepareStep, inside Stream) just
21−// long enough to enqueue a follow-up prompt behind the busy session.
22−// Subsequent Stream calls (e.g. the recursive run draining the queue)
23−// proceed immediately.
24−type gatedStreamModel struct {
25− text string
26− gate chan struct{}
27− entered chan struct{}
28− calls atomic.Int64
29−}
30−
31−func (m *gatedStreamModel) Provider() string { return "fake" }
32−func (m *gatedStreamModel) Model() string { return "fake-model" }
33−
34−func (m *gatedStreamModel) Generate(ctx context.Context, call fantasy.Call) (*fantasy.Response, error) {
35− return &fantasy.Response{
36− Content: fantasy.ResponseContent{fantasy.TextContent{Text: m.text}},
37− FinishReason: fantasy.FinishReasonStop,
38− }, nil
39−}
40−
41−func (m *gatedStreamModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.StreamResponse, error) {
42− if m.calls.Add(1) == 1 {
43− close(m.entered)
44− select {
45− case <-m.gate:
46− case <-ctx.Done():
47− }
48− }
49− text := m.text
50− return func(yield func(fantasy.StreamPart) bool) {
51− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextStart, ID: "1"}) {
52− return
53− }
54− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextDelta, ID: "1", Delta: text}) {
55− return
56− }
57− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextEnd, ID: "1"}) {
58− return
59− }
60− yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeFinish, FinishReason: fantasy.FinishReasonStop})
61− }, nil
62−}
63−
64−func (m *gatedStreamModel) GenerateObject(ctx context.Context, call fantasy.ObjectCall) (*fantasy.ObjectResponse, error) {
65− return nil, errors.New("not implemented")
66−}
67−
68−func (m *gatedStreamModel) StreamObject(ctx context.Context, call fantasy.ObjectCall) (fantasy.ObjectStreamResponse, error) {
69− return nil, errors.New("not implemented")
70−}
71−
72−// TestRun_QueuedRunIDPromptRunsRecursivelyAndPublishesRunComplete is the
73−// end-to-end proof of fix 2: a prompt carrying a RunID that is queued
74−// behind a busy session must NOT be silently folded into the active turn.
75−// It runs as its own turn via the recursive run path and publishes its
76−// own terminal RunComplete, so a `crush run` caller blocking on that
77−// RunID does not hang. The active turn keeps its own RunComplete too.
78−func TestRun_QueuedRunIDPromptRunsRecursivelyAndPublishesRunComplete(t *testing.T) {
79− t.Parallel()
80−
81− env := testEnv(t)
82− broker := pubsub.NewBroker[notify.RunComplete]()
83− t.Cleanup(broker.Shutdown)
84−
85− large := &gatedStreamModel{
86− text: "done",
87− gate: make(chan struct{}),
88− entered: make(chan struct{}),
89− }
90− small := &finishStreamModel{text: "title"}
91−
92− sa := NewSessionAgent(SessionAgentOptions{
93− LargeModel: Model{Model: large, CatwalkCfg: catwalk.Model{ContextWindow: 200000, DefaultMaxTokens: 10000}},
94− SmallModel: Model{Model: small, CatwalkCfg: catwalk.Model{ContextWindow: 200000, DefaultMaxTokens: 10000}},
95− IsYolo: true,
96− Sessions: env.sessions,
97− Messages: env.messages,
98− RunComplete: broker,
99− }).(*sessionAgent)
100−
101− sess, err := env.sessions.Create(t.Context(), "session")
102− require.NoError(t, err)
103−
104− subCtx, subCancel := context.WithCancel(t.Context())
105− defer subCancel()
106− ch := broker.Subscribe(subCtx)
107−
108− // Start the main turn; it blocks inside Stream once active.
109− mainDone := make(chan error, 1)
110− go func() {
111− _, runErr := sa.Run(t.Context(), SessionAgentCall{
112− SessionID: sess.ID,
113− RunID: "run-main",
114− Prompt: "main",
115− })
116− mainDone <- runErr
117− }()
118−
119− // Wait until the main turn is active (inside Stream).
120− select {
121− case <-large.entered:
122− case <-time.After(5 * time.Second):
123− t.Fatal("main run never entered Stream")
124− }
125− require.True(t, sa.IsSessionBusy(sess.ID), "main run must be active before enqueueing the follow-up")
126−
127− // Enqueue a RunID-bearing follow-up behind the busy session.
128− res, err := sa.Run(t.Context(), SessionAgentCall{
129− SessionID: sess.ID,
130− RunID: "run-follow",
131− Prompt: "follow",
132− })
133− require.NoError(t, err)
134− require.Nil(t, res, "a busy-session follow-up must enqueue and return (nil, nil)")
135− require.Equal(t, 1, sa.QueuedPrompts(sess.ID), "the follow-up must be queued, not folded")
136−
137− // Release the main turn so it completes and hands off to the queue.
138− close(large.gate)
139− require.NoError(t, <-mainDone)
140−
141− // Both turns must publish their own terminal RunComplete.
142− got := map[string]notify.RunComplete{}
143− deadline := time.After(5 * time.Second)
144− for len(got) < 2 {
145− select {
146− case ev := <-ch:
147− got[ev.Payload.RunID] = ev.Payload
148− case <-deadline:
149− t.Fatalf("timed out waiting for both RunCompletes; got %v", got)
150− }
151− }
152−
153− main, ok := got["run-main"]
154− require.True(t, ok, "the active turn must publish its own RunComplete")
155− require.Empty(t, main.Error)
156− require.False(t, main.Cancelled)
157−
158− follow, ok := got["run-follow"]
159− require.True(t, ok,
160− "the queued RunID prompt must publish its own RunComplete instead of being folded silently")
161− require.Empty(t, follow.Error)
162− require.False(t, follow.Cancelled)
163− require.Equal(t, "done", follow.Text, "the queued prompt ran as its own turn")
164−
165− // Two distinct assistant turns prove the follow-up was not folded.
166− msgs, err := env.messages.List(t.Context(), sess.ID)
167− require.NoError(t, err)
168− var assistants, follows int
169− for _, m := range msgs {
170− switch m.Role {
171− case message.Assistant:
172− assistants++
173− case message.User:
174− if m.Content().String() == "follow" {
175− follows++
176− }
177− }
178− }
179− require.Equal(t, 2, assistants, "the active turn and the recursive turn each produce one assistant message")
180− require.Equal(t, 1, follows, "the follow-up prompt is its own user turn")
181−}
internal/agent/run_complete_test.godeleted−322
@@ -1,322 +0,0 @@
1−package agent
2−
3−import (
4− "context"
5− "testing"
6− "time"
7−
8− "github.com/charmbracelet/crush/internal/agent/notify"
9− "github.com/charmbracelet/crush/internal/pubsub"
10− "github.com/stretchr/testify/require"
11−)
12−
13−// TestSessionAgentRun_QueueStripsOnComplete verifies that when a Run
14−// call is enqueued (because the session is already busy), the
15−// OnComplete hook is NOT propagated onto the queued copy. The hook
16−// belongs to the caller's retry/coalesce scope (typically
17−// coordinator.Run) which has already returned by the time the queue
18−// drains; carrying it forward would silently funnel the terminal
19−// event into a closure nobody reads, and subscribers (`crush run`)
20−// would hang waiting for a RunComplete that never publishes.
21−func TestSessionAgentRun_QueueStripsOnComplete(t *testing.T) {
22− t.Parallel()
23−
24− env := testEnv(t)
25− a := NewSessionAgent(SessionAgentOptions{
26− Sessions: env.sessions,
27− Messages: env.messages,
28− }).(*sessionAgent)
29−
30− const sessionID = "queued-session"
31− // Mark the session as busy so Run takes the queue branch
32− // without needing a real model.
33− a.activeRequests.Set(sessionID, func() {})
34−
35− var called bool
36− hook := func(notify.RunComplete) { called = true }
37−
38− res, err := a.Run(t.Context(), SessionAgentCall{
39− SessionID: sessionID,
40− RunID: "run-xyz",
41− Prompt: "queued prompt",
42− OnComplete: hook,
43− })
44− require.NoError(t, err)
45− require.Nil(t, res, "queued Run must return (nil, nil)")
46− require.False(t, called,
47− "OnComplete must not fire on the enqueue path; the caller's scope is still live")
48−
49− queued, ok := a.messageQueue.Get(sessionID)
50− require.True(t, ok)
51− require.Len(t, queued, 1)
52− require.Nil(t, queued[0].OnComplete,
53− "queued SessionAgentCall must have OnComplete stripped so the drain falls back to the default broker publish")
54− require.Equal(t, "queued prompt", queued[0].Prompt,
55− "all other fields must be preserved on the queued copy")
56− require.Equal(t, "run-xyz", queued[0].RunID,
57− "RunID must be preserved on the queued copy so the drained turn's "+
58− "RunComplete still correlates with the originating SendMessage")
59−}
60−
61−// TestDrainQueueForStep_FiltersUnderDispatchLock verifies that the queue
62−// drain evaluates the per-session cancel mark while holding the dispatch
63−// mutex (canceledBySeq's documented precondition). Queued calls at or
64−// below the cancel high-water mark are dropped, calls queued after the
65−// cancel (higher seq) are folded, untracked enqueues (seq == 0) are
66−// dropped whenever any mark is present, and the queue is cleared. These
67−// calls carry no RunID, so all foldable survivors are returned for
68−// folding (the existing follow-up behavior).
69−func TestDrainQueueForStep_FiltersUnderDispatchLock(t *testing.T) {
70− t.Parallel()
71−
72− env := testEnv(t)
73− a := NewSessionAgent(SessionAgentOptions{
74− Sessions: env.sessions,
75− Messages: env.messages,
76− }).(*sessionAgent)
77−
78− const sessionID = "drain-session"
79− a.messageQueue.Set(sessionID, []SessionAgentCall{
80− {SessionID: sessionID, Prompt: "below", acceptSeq: 1},
81− {SessionID: sessionID, Prompt: "at-mark", acceptSeq: 2},
82− {SessionID: sessionID, Prompt: "after", acceptSeq: 3},
83− {SessionID: sessionID, Prompt: "untracked", acceptSeq: 0},
84− })
85− // Cancel high-water mark at seq 2: seq <= 2 and seq == 0 are covered.
86− a.cancelMark.Set(sessionID, 2)
87−
88− fold, canceledWithRunID := a.drainQueueForStep(sessionID)
89−
90− require.Len(t, fold, 1,
91− "only the follow-up queued after the cancel (seq > mark) must be folded")
92− require.Equal(t, "after", fold[0].Prompt)
93− require.Empty(t, canceledWithRunID,
94− "no dropped call carried a RunID, so none need a terminal RunComplete")
95−
96− _, ok := a.messageQueue.Get(sessionID)
97− require.False(t, ok, "drain must clear the session message queue when nothing is kept")
98−}
99−
100−// TestDrainQueueForStep_NoMarkFoldsAllNonRunID verifies that with no
101−// cancel mark recorded, every queued call without a RunID is folded.
102−func TestDrainQueueForStep_NoMarkFoldsAllNonRunID(t *testing.T) {
103− t.Parallel()
104−
105− env := testEnv(t)
106− a := NewSessionAgent(SessionAgentOptions{
107− Sessions: env.sessions,
108− Messages: env.messages,
109− }).(*sessionAgent)
110−
111− const sessionID = "drain-nomark"
112− a.messageQueue.Set(sessionID, []SessionAgentCall{
113− {SessionID: sessionID, Prompt: "a", acceptSeq: 0},
114− {SessionID: sessionID, Prompt: "b", acceptSeq: 5},
115− })
116−
117− fold, canceledWithRunID := a.drainQueueForStep(sessionID)
118− require.Len(t, fold, 2, "no cancel mark means all non-RunID queued calls are folded")
119− require.Empty(t, canceledWithRunID)
120−}
121−
122−// TestDrainQueueForStep_KeepsRunIDPromptsQueued is the core of fix 2: a
123−// queued prompt that carries a RunID must NOT be folded into the active
124−// turn. Folding it would silently absorb it into another turn and never
125−// publish a RunComplete for its RunID, hanging a `crush run` caller that
126−// blocks on that event. Such prompts are left in the queue so the
127−// recursive run path gives each its own turn and its own RunComplete.
128−// Non-RunID prompts are still folded.
129−func TestDrainQueueForStep_KeepsRunIDPromptsQueued(t *testing.T) {
130− t.Parallel()
131−
132− env := testEnv(t)
133− a := NewSessionAgent(SessionAgentOptions{
134− Sessions: env.sessions,
135− Messages: env.messages,
136− }).(*sessionAgent)
137−
138− const sessionID = "drain-runid"
139− a.messageQueue.Set(sessionID, []SessionAgentCall{
140− {SessionID: sessionID, Prompt: "fold-me", acceptSeq: 1},
141− {SessionID: sessionID, RunID: "run-a", Prompt: "keep-me", acceptSeq: 2},
142− {SessionID: sessionID, RunID: "run-b", Prompt: "keep-me-too", acceptSeq: 3},
143− })
144−
145− fold, canceledWithRunID := a.drainQueueForStep(sessionID)
146−
147− require.Len(t, fold, 1, "only the non-RunID prompt is folded into the active turn")
148− require.Equal(t, "fold-me", fold[0].Prompt)
149− require.Empty(t, canceledWithRunID)
150−
151− kept, ok := a.messageQueue.Get(sessionID)
152− require.True(t, ok, "RunID-bearing prompts must remain queued for the recursive run path")
153− require.Len(t, kept, 2)
154− require.Equal(t, "run-a", kept[0].RunID)
155− require.Equal(t, "run-b", kept[1].RunID)
156−}
157−
158−// TestDrainQueueForStep_ReportsCanceledRunIDDrops verifies that a queued
159−// prompt carrying a RunID that is dropped because a cancel covers it is
160−// reported in canceledWithRunID so the caller can publish its terminal
161−// cancelled RunComplete. A canceled prompt without a RunID is dropped
162−// silently as before.
163−func TestDrainQueueForStep_ReportsCanceledRunIDDrops(t *testing.T) {
164− t.Parallel()
165−
166− env := testEnv(t)
167− a := NewSessionAgent(SessionAgentOptions{
168− Sessions: env.sessions,
169− Messages: env.messages,
170− }).(*sessionAgent)
171−
172− const sessionID = "drain-cancel-runid"
173− a.messageQueue.Set(sessionID, []SessionAgentCall{
174− {SessionID: sessionID, RunID: "run-canceled", Prompt: "canceled", acceptSeq: 1},
175− {SessionID: sessionID, Prompt: "canceled-no-runid", acceptSeq: 1},
176− {SessionID: sessionID, RunID: "run-survives", Prompt: "survives", acceptSeq: 5},
177− })
178− a.cancelMark.Set(sessionID, 2)
179−
180− fold, canceledWithRunID := a.drainQueueForStep(sessionID)
181−
182− require.Empty(t, fold, "no uncanceled non-RunID prompts to fold")
183− require.Len(t, canceledWithRunID, 1,
184− "only the dropped RunID-bearing prompt needs a terminal RunComplete")
185− require.Equal(t, "run-canceled", canceledWithRunID[0].RunID)
186−
187− kept, ok := a.messageQueue.Get(sessionID)
188− require.True(t, ok)
189− require.Len(t, kept, 1, "the uncanceled RunID prompt stays queued")
190− require.Equal(t, "run-survives", kept[0].RunID)
191−}
192−
193−// TestRunCompletePublisher_MustDeliverOverTakesPublish exercises the
194−// pubsub.Publisher interface change end-to-end: a Broker is the only
195−// concrete Publisher implementation and must satisfy both Publish and
196−// PublishMustDeliver. The coordinator's final RunComplete emit relies
197−// on PublishMustDeliver to apply bounded-blocking semantics so a
198−// momentarily-full subscriber buffer can't silently drop the
199−// authoritative end-of-run event.
200−func TestRunCompletePublisher_MustDeliverOverTakesPublish(t *testing.T) {
201− t.Parallel()
202−
203− broker := pubsub.NewBroker[notify.RunComplete]()
204− t.Cleanup(broker.Shutdown)
205−
206− // Subscribe before publishing so the event is delivered.
207− ctx, cancel := context.WithCancel(t.Context())
208− defer cancel()
209− ch := broker.Subscribe(ctx)
210−
211− rc := notify.RunComplete{SessionID: "S", MessageID: "m", Text: "ok"}
212− var pub pubsub.Publisher[notify.RunComplete] = broker
213− pub.PublishMustDeliver(t.Context(), pubsub.UpdatedEvent, rc)
214−
215− select {
216− case got := <-ch:
217− require.Equal(t, rc, got.Payload)
218− case <-time.After(time.Second):
219− t.Fatal("PublishMustDeliver did not deliver event")
220− }
221−}
222−
223−// requireSingleCancelledRunComplete reads exactly one RunComplete from ch,
224−// asserts it is the cancelled terminal event for runID, and verifies no
225−// second event arrives. This observes the published pubsub event rather
226−// than internal bookkeeping, which is the contract a `crush run` caller
227−// blocking on the broker actually relies on.
228−func requireSingleCancelledRunComplete(t *testing.T, ch <-chan pubsub.Event[notify.RunComplete], sessionID, runID string) {
229− t.Helper()
230− select {
231− case ev := <-ch:
232− require.Equal(t, runID, ev.Payload.RunID,
233− "the published RunComplete must carry the dropped queued prompt's RunID")
234− require.Equal(t, sessionID, ev.Payload.SessionID)
235− require.True(t, ev.Payload.Cancelled,
236− "a dropped queued prompt must publish a cancelled RunComplete")
237− case <-time.After(5 * time.Second):
238− t.Fatal("timed out waiting for the cancelled RunComplete")
239− }
240− select {
241− case extra := <-ch:
242− t.Fatalf("expected exactly one RunComplete, got a second: %+v", extra.Payload)
243− case <-time.After(100 * time.Millisecond):
244− }
245−}
246−
247−// TestCancel_QueuedRunIDPromptPublishesCancelledRunComplete proves the
248−// terminal-event behavior end-to-end: a RunID-bearing prompt sitting in
249−// the queue that is canceled while queued (via the public Cancel path,
250−// which routes through clearQueueAndNotify -> publishCanceledQueueDrops)
251−// must emit exactly one cancelled RunComplete on the broker for its
252−// RunID. A queued prompt without a RunID is dropped silently. This is the
253−// coverage the earlier drain test lacked: it asserted the returned
254−// bookkeeping slice, not the published event a `crush run` caller awaits.
255−func TestCancel_QueuedRunIDPromptPublishesCancelledRunComplete(t *testing.T) {
256− t.Parallel()
257−
258− env := testEnv(t)
259− broker := pubsub.NewBroker[notify.RunComplete]()
260− t.Cleanup(broker.Shutdown)
261−
262− a := NewSessionAgent(SessionAgentOptions{
263− Sessions: env.sessions,
264− Messages: env.messages,
265− RunComplete: broker,
266− }).(*sessionAgent)
267−
268− subCtx, subCancel := context.WithCancel(t.Context())
269− defer subCancel()
270− ch := broker.Subscribe(subCtx)
271−
272− const sessionID = "cancel-queued-runid"
273− a.messageQueue.Set(sessionID, []SessionAgentCall{
274− {SessionID: sessionID, Prompt: "no-runid", acceptSeq: 1},
275− {SessionID: sessionID, RunID: "run-queued", Prompt: "queued", acceptSeq: 2},
276− })
277−
278− a.Cancel(sessionID)
279−
280− requireSingleCancelledRunComplete(t, ch, sessionID, "run-queued")
281−
282− _, ok := a.messageQueue.Get(sessionID)
283− require.False(t, ok, "Cancel must clear the queue")
284−}
285−
286−// TestDrainQueueForStep_DroppedRunIDPublishesCancelledRunComplete drives
287−// the production drain sequence (drainQueueForStep then
288−// publishCanceledQueueDrops, mirroring the PrepareStep handoff) and
289−// asserts the dropped RunID-bearing prompt actually publishes exactly one
290−// cancelled RunComplete on the broker. The companion bookkeeping test
291−// covers the returned slice; this one covers the observable terminal
292−// event.
293−func TestDrainQueueForStep_DroppedRunIDPublishesCancelledRunComplete(t *testing.T) {
294− t.Parallel()
295−
296− env := testEnv(t)
297− broker := pubsub.NewBroker[notify.RunComplete]()
298− t.Cleanup(broker.Shutdown)
299−
300− a := NewSessionAgent(SessionAgentOptions{
301− Sessions: env.sessions,
302− Messages: env.messages,
303− RunComplete: broker,
304− }).(*sessionAgent)
305−
306− subCtx, subCancel := context.WithCancel(t.Context())
307− defer subCancel()
308− ch := broker.Subscribe(subCtx)
309−
310− const sessionID = "drain-drop-runid"
311− a.messageQueue.Set(sessionID, []SessionAgentCall{
312− {SessionID: sessionID, RunID: "run-dropped", Prompt: "dropped", acceptSeq: 1},
313− {SessionID: sessionID, Prompt: "dropped-no-runid", acceptSeq: 1},
314− })
315− a.cancelMark.Set(sessionID, 2)
316−
317− _, canceledWithRunID := a.drainQueueForStep(sessionID)
318− require.Len(t, canceledWithRunID, 1)
319− a.publishCanceledQueueDrops(canceledWithRunID)
320−
321− requireSingleCancelledRunComplete(t, ch, sessionID, "run-dropped")
322−}
internal/agent/run_marker.godeleted−52
@@ -1,52 +0,0 @@
1−package agent
2−
3−import (
4− "context"
5− "sync/atomic"
6−)
7−
8−// runCompleteMarkerKey is the unexported context key carrying a
9−// [runCompleteMarker] from the dispatch boundary (backend.runAgent)
10−// down into the coordinator. It lets the dispatcher learn whether the
11−// coordinator already published the authoritative terminal
12−// notify.RunComplete for the run, so a fallback terminal event is only
13−// emitted when one is actually missing (e.g. an error returned before
14−// sessionAgent.Run ever executed). It avoids a breaking change to the
15−// Coordinator interface.
16−type runCompleteMarkerKey struct{}
17−
18−// runCompleteMarker records whether a terminal RunComplete has been
19−// published for a run. It is shared by pointer through the context so
20−// a publish deep in the call stack is observable by the dispatcher
21−// after the call returns.
22−type runCompleteMarker struct {
23− published atomic.Bool
24−}
25−
26−// WithRunCompleteMarker returns ctx carrying a fresh marker the
27−// coordinator can flag via [MarkRunCompletePublished] once it emits the
28−// run's terminal RunComplete. Callers read the result with
29−// [RunCompletePublished]. Attaching the marker is optional: code paths
30−// without one simply skip the dedup signal.
31−func WithRunCompleteMarker(ctx context.Context) context.Context {
32− return context.WithValue(ctx, runCompleteMarkerKey{}, &runCompleteMarker{})
33−}
34−
35−// MarkRunCompletePublished records that the authoritative terminal
36−// RunComplete has been published for the run carried by ctx. It is a
37−// no-op when no marker is present (e.g. the in-process/local Run path,
38−// which is not dispatched through backend.runAgent).
39−func MarkRunCompletePublished(ctx context.Context) {
40− if m, ok := ctx.Value(runCompleteMarkerKey{}).(*runCompleteMarker); ok {
41− m.published.Store(true)
42− }
43−}
44−
45−// RunCompletePublished reports whether [MarkRunCompletePublished] was
46−// called on ctx's marker. It returns false when no marker is present.
47−func RunCompletePublished(ctx context.Context) bool {
48− if m, ok := ctx.Value(runCompleteMarkerKey{}).(*runCompleteMarker); ok {
49− return m.published.Load()
50− }
51− return false
52−}
internal/agent/runid.godeleted−33
@@ -1,33 +0,0 @@
1−package agent
2−
3−import "context"
4−
5−// runIDContextKey is the unexported context key used to carry a
6−// caller-supplied RunID from the workspace HTTP boundary
7−// (backend.SendMessage) down into coordinator.Run without forcing a
8−// breaking change to the Coordinator.Run signature. The value is
9−// then copied onto SessionAgentCall.RunID by the coordinator so the
10−// agent's terminal RunComplete event can echo it back to the
11−// originating caller.
12−type runIDContextKey struct{}
13−
14−// WithRunID returns ctx tagged with a per-request RunID. It is the
15−// boundary helper for callers that need their SendMessage→Run
16−// terminal event to be uniquely correlatable (e.g. `crush run`
17−// against a session that may be busy). Empty runIDs are stored
18−// as-is; downstream code treats an empty RunID as "caller did not
19−// supply one" and falls back to SessionID-only correlation.
20−func WithRunID(ctx context.Context, runID string) context.Context {
21− return context.WithValue(ctx, runIDContextKey{}, runID)
22−}
23−
24−// RunIDFromContext returns the RunID set by [WithRunID], or "" if
25−// none was set or the value is not a string. Exported because the
26−// coordinator and tests in other packages need to read it; safe to
27−// call on any context.
28−func RunIDFromContext(ctx context.Context) string {
29− if v, ok := ctx.Value(runIDContextKey{}).(string); ok {
30− return v
31− }
32− return ""
33−}
internal/agent/templates/coder.md.tpl+5−20
@@ -3,7 +3,7 @@ You are Crush, a powerful AI Assistant that runs in the CLI.
33<critical_rules>
44These rules override everything else. Follow them strictly:
55
6−1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.
6+1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.
772. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.
883. **TEST AFTER CHANGES**: Run tests immediately after each modification.
994. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.
@@ -17,7 +17,6 @@ These rules override everything else. Follow them strictly:
171712. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.
181813. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.
191914. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.
20−15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.
2120</critical_rules>
2221
2322<communication_style>
@@ -141,10 +140,10 @@ Examples of autonomous decisions:
141140
142141Never use `apply_patch` or similar - those tools don't exist.
143142
144−Critical: ALWAYS read the relevant context of files before editing them in this conversation.
143+Critical: ALWAYS read files before editing them in this conversation.
145144
146145When using edit tools:
147−1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)
146+1. Read the file first - note the EXACT indentation (spaces vs tabs, count)
1481472. Copy the exact text including ALL whitespace, newlines, and indentation
1491483. Include 3-5 lines of context before and after the target
1501494. Verify your old_string would appear exactly once in the file
@@ -396,25 +395,11 @@ If a skill mentions scripts, references, or assets, they live in the same folder
396395{{end}}
397396
398397{{if .ContextFiles}}
399−# Project-Specific Context
400−Make sure to follow the instructions in the context below.
401−<project_context>
398+<memory>
402399{{range .ContextFiles}}
403400<file path="{{.Path}}">
404401{{.Content}}
405402</file>
406403{{end}}
407−</project_context>
408−{{end}}
409−{{if .GlobalContextFiles}}
410−
411−# User context
412−The following is personal content added by the user that they'd like you to follow no matter what project you're working in.
413−<user_preferences>
414−{{range .GlobalContextFiles}}
415−<file path="{{.Path}}">
416−{{.Content}}
417−</file>
418−{{end}}
419−</user_preferences>
404+</memory>
420405{{end}}
internal/agent/testdata/TestCoderAgent/glm-5.1/bash_tool.yaml+303−179
@@ -25,221 +25,351 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" generate"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" based"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" on"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" named"},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wrote"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
7171
72− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" must"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
7373
74− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" do"},"finish_reason":null}]}
7575
76− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" not"},"finish_reason":null}]}
7777
78− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
7979
80− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
8181
82− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
8383
84− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
8585
86− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
8787
88− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
8989
90− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"col"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
9191
92− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
9393
94− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ≤"},"finish_reason":null}]}
9595
96− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
9797
98− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
9999
100− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
101101
102− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
103103
104− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
105105
106− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
107107
108− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
109109
110− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" sentence"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
111111
112− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/"},"finish_reason":null}]}
113113
114− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"col"},"finish_reason":null}]}
115115
116− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
117117
118− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
119119
120− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
121121
122− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
123123
124− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"bash"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
125125
126− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
127127
128− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Maybe"},"finish_reason":null}]}
129129
130− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
131131
132− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"B"},"finish_reason":null}]}
133133
134− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ash"},"finish_reason":null}]}
135135
136− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
137137
138− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" without"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
139139
140− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
141141
142− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
143143
144− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
145145
146− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" craft"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
147147
148− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
149149
150− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
151151
152− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
153153
154− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
155155
156− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
157157
158− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
159159
160− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"B"},"finish_reason":null}]}
161161
162− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ash"},"finish_reason":null}]}
163163
164− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
165165
166− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
167167
168− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
169169
170− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
171171
172− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
173173
174− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
175175
176− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
177177
178− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
179179
180− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
181181
182− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
183183
184− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
185185
186− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
187187
188− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
189189
190− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
191191
192− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
193193
194− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
195195
196− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
197197
198− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
199199
200− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
201201
202− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
203203
204− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
205205
206− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
207207
208− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
209209
210− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
211211
212− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
213213
214− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
215215
216− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
217217
218− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
219219
220− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
221221
222− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
223223
224− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
225225
226− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
227227
228− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
229229
230− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
231231
232− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
233233
234− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" bash"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
235235
236− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
237237
238− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Bash"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
239239
240− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
240+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
241241
242− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":224,"completion_tokens":115,"total_tokens":339,"completion_tokens_details":{"reasoning_tokens":98},"cost":{"usd":0.00015733800000000003,"hypercredits":0.0031467600000000006},"remaining":{"hypercredits":0}}}
242+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
243+
244+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
245+
246+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
247+
248+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
249+
250+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
251+
252+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
253+
254+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
255+
256+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
257+
258+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
259+
260+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
261+
262+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
263+
264+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
265+
266+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
267+
268+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
269+
270+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
271+
272+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
273+
274+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
275+
276+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
277+
278+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
279+
280+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
281+
282+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
283+
284+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
285+
286+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
287+
288+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
289+
290+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
291+
292+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
293+
294+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
295+
296+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
297+
298+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
299+
300+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
301+
302+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
303+
304+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
305+
306+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
307+
308+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
309+
310+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
311+
312+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
313+
314+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
315+
316+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
317+
318+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
319+
320+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
321+
322+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
323+
324+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
325+
326+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
327+
328+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
329+
330+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
331+
332+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
333+
334+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
335+
336+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
337+
338+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
339+
340+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
341+
342+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
343+
344+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
345+
346+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
347+
348+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
349+
350+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
351+
352+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"B"},"finish_reason":null}]}
353+
354+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"ash"},"finish_reason":null}]}
355+
356+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" create"},"finish_reason":null}]}
357+
358+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
359+
360+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
361+
362+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
363+
364+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
365+
366+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" bash"},"finish_reason":null}]}
367+
368+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}]}
369+
370+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
371+
372+ data: {"id":"chatcmpl-faa1080788595f33fa9510f3","object":"chat.completion.chunk","created":1778597310,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":31,"completion_tokens":180,"total_tokens":403,"prompt_tokens_details":{"cached_tokens":192}}}
243373
244374 data: [DONE]
245375
@@ -248,15 +378,15 @@ interactions:
248378 - text/event-stream
249379 status: 200 OK
250380 code: 200
251− duration: 700.546792ms
381+ duration: 894.7825ms
252382- id: 1
253383 request:
254384 proto: HTTP/1.1
255385 proto_major: 1
256386 proto_minor: 1
257− content_length: 35672
387+ content_length: 33684
258388 host: ""
259− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use bash to create a file named test.txt with content 'hello bash'. do not print its timestamp\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
389+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use bash to create a file named test.txt with content 'hello bash'. do not print its timestamp\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
260390 headers:
261391 Accept:
262392 - application/json
@@ -273,105 +403,87 @@ interactions:
273403 content_length: -1
274404 uncompressed: true
275405 body: |+
276− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
277−
278− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
279−
280− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
281−
282− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
283−
284− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
285−
286− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
287407
288− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
289409
290− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
291411
292− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file with"},"finish_reason":null}]}
293413
294− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" named"},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" echo"},"finish_reason":null}]}
295415
296− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
297417
298− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" suppress"},"finish_reason":null}]}
299419
300− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
301421
302− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" printing"},"finish_reason":null}]}
303423
304− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
305425
306− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_b10ffb78b6e844ce91c60f38","type":"function","index":0,"function":{"name":"bash","arguments":""}}]},"finish_reason":null}]}
307427
308− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
309429
310− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
311431
312− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"command\": "}}]},"finish_reason":null}]}
313433
314− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"printf"}}]},"finish_reason":null}]}
315435
316− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '%"}}]},"finish_reason":null}]}
317437
318− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"s' '"}}]},"finish_reason":null}]}
319439
320− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"hello bash"}}]},"finish_reason":null}]}
321441
322− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"' \u003e /"}}]},"finish_reason":null}]}
323443
324− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" not"},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}]}
325445
326− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
327447
328− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
329449
330− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
331451
332− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
333453
334− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_51c682620b31061c","type":"function","index":0,"function":{"name":"bash","arguments":""}}]},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
335455
336− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"command\": \""}}]},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
337457
338− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"echo"}}]},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/glm"}}]},"finish_reason":null}]}
339459
340− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-5"}}]},"finish_reason":null}]}
341461
342− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"hello"}}]},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".1/bash"}}]},"finish_reason":null}]}
343463
344− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" bash"}}]},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
345465
346− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"'"}}]},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/test.txt"}}]},"finish_reason":null}]}
347467
348− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \u003e"}}]},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", "}}]},"finish_reason":null}]}
349469
350− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" test"}}]},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"description\": "}}]},"finish_reason":null}]}
351471
352− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"Create test"}}]},"finish_reason":null}]}
353473
354− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt with"}}]},"finish_reason":null}]}
355475
356− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"description\": \""}}]},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" content '"}}]},"finish_reason":null}]}
357477
358− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Create"}}]},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"hello bash"}}]},"finish_reason":null}]}
359479
360− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" test"}}]},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"'\""}}]},"finish_reason":null}]}
361481
362− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
482+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
363483
364− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" with"}}]},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
365485
366− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" content"}}]},"finish_reason":null}]}
367−
368− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
369−
370− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
371−
372− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
373−
374− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":686,"completion_tokens":56,"total_tokens":8221,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":32},"cost":{"usd":0.0013476,"hypercredits":0.026952},"remaining":{"hypercredits":0}}}
486+ data: {"id":"chatcmpl-53fb4d1a2d0399cfc29f411b","object":"chat.completion.chunk","created":1778597313,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":711,"completion_tokens":61,"total_tokens":7812,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":10}}}
375487
376488 data: [DONE]
377489
@@ -380,15 +492,15 @@ interactions:
380492 - text/event-stream
381493 status: 200 OK
382494 code: 200
383− duration: 1.461643167s
495+ duration: 4.316007375s
384496- id: 2
385497 request:
386498 proto: HTTP/1.1
387499 proto_major: 1
388500 proto_minor: 1
389− content_length: 36122
501+ content_length: 34150
390502 host: ""
391− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use bash to create a file named test.txt with content 'hello bash'. do not print its timestamp\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_51c682620b31061c\",\"function\":{\"arguments\":\"{\\\"command\\\": \\\"echo 'hello bash' > test.txt\\\", \\\"description\\\": \\\"Create test.txt with content\\\"}\",\"name\":\"bash\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to create a file named test.txt with content 'hello bash' using the bash tool, and not print its timestamp.\"},{\"content\":\"no output\",\"tool_call_id\":\"call_51c682620b31061c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
503+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use bash to create a file named test.txt with content 'hello bash'. do not print its timestamp\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_b10ffb78b6e844ce91c60f38\",\"function\":{\"arguments\":\"{\\\"command\\\": \\\"printf '%s' 'hello bash' > /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool/test.txt\\\", \\\"description\\\": \\\"Create test.txt with content 'hello bash'\\\"}\",\"name\":\"bash\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Create a file with echo and suppress timestamp printing.\"},{\"content\":\"no output\",\"tool_call_id\":\"call_b10ffb78b6e844ce91c60f38\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
392504 headers:
393505 Accept:
394506 - application/json
@@ -405,15 +517,27 @@ interactions:
405517 content_length: -1
406518 uncompressed: true
407519 body: |+
408− data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
520+ data: {"id":"chatcmpl-666738f4afd28160e089b9b7","object":"chat.completion.chunk","created":1778597325,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
521+
522+ data: {"id":"chatcmpl-666738f4afd28160e089b9b7","object":"chat.completion.chunk","created":1778597325,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
523+
524+ data: {"id":"chatcmpl-666738f4afd28160e089b9b7","object":"chat.completion.chunk","created":1778597325,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":". Created"},"finish_reason":null}]}
525+
526+ data: {"id":"chatcmpl-666738f4afd28160e089b9b7","object":"chat.completion.chunk","created":1778597325,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `test"},"finish_reason":null}]}
527+
528+ data: {"id":"chatcmpl-666738f4afd28160e089b9b7","object":"chat.completion.chunk","created":1778597325,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
529+
530+ data: {"id":"chatcmpl-666738f4afd28160e089b9b7","object":"chat.completion.chunk","created":1778597325,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` with content"},"finish_reason":null}]}
531+
532+ data: {"id":"chatcmpl-666738f4afd28160e089b9b7","object":"chat.completion.chunk","created":1778597325,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
409533
410− data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-666738f4afd28160e089b9b7","object":"chat.completion.chunk","created":1778597325,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"hello bash"},"finish_reason":null}]}
411535
412− data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
536+ data: {"id":"chatcmpl-666738f4afd28160e089b9b7","object":"chat.completion.chunk","created":1778597325,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
413537
414− data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
538+ data: {"id":"chatcmpl-666738f4afd28160e089b9b7","object":"chat.completion.chunk","created":1778597325,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
415539
416− data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":720,"completion_tokens":4,"total_tokens":8203,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0010255999999999998,"hypercredits":0.020511999999999996},"remaining":{"hypercredits":0}}}
540+ data: {"id":"chatcmpl-666738f4afd28160e089b9b7","object":"chat.completion.chunk","created":1778597325,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":768,"completion_tokens":15,"total_tokens":7823,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":14}}}
417541
418542 data: [DONE]
419543
@@ -422,4 +546,4 @@ interactions:
422546 - text/event-stream
423547 status: 200 OK
424548 code: 200
425− duration: 1.122182833s
549+ duration: 10.298101916s
internal/agent/testdata/TestCoderAgent/glm-5.1/download_tool.yaml+148−244
@@ -6,9 +6,9 @@ interactions:
66 proto: HTTP/1.1
77 proto_major: 1
88 proto_minor: 1
9− content_length: 35697
9+ content_length: 874
1010 host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/download_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"download the file from https://example-files.online-convert.com/document/txt/example.txt and save it as example.txt\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
11+ body: '{"messages":[{"content":"You will generate a short title based on the first message a user begins a conversation with.\n\n<rules>\n- Keep the title in the same language that the user wrote their message in.\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://example-files.online-convert.com/document/txt/example.txt and save it as example.txt\n <think>\n\n</think>","role":"user"}],"model":"gpt-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
1212 headers:
1313 Accept:
1414 - application/json
@@ -25,117 +25,151 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29+
30+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
31+
32+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
33+
34+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
35+
36+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
37+
38+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
39+
40+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
41+
42+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ising"},"finish_reason":null}]}
43+
44+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
45+
46+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" request"},"finish_reason":null}]}
2947
30− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
3149
32− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" download"},"finish_reason":null}]}
3351
34− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
3553
36− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
3755
38− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" download"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
3957
40− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
4159
42− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
4361
44− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
4563
46− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
4765
48− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
4967
50− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
5169
52− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
5371
54− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
5573
56− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
5775
58− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
5977
60− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
6179
62− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
6381
64− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_4cbf337c01e5b47c","type":"function","index":0,"function":{"name":"download","arguments":""}}]},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
6583
66− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
6785
68− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
6987
70− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
7189
72− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
7391
74− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
7593
76− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
7795
78− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
7997
80− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
8199
82− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
83101
84− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Download"},"finish_reason":null}]}
85103
86− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
87105
88− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
89107
90− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
91109
92− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
93111
94− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/download"}}]},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
95113
96− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
97115
98− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n\n"},"finish_reason":null}]}
99117
100− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Count"},"finish_reason":null}]}
101119
102− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
103121
104− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"url\": \""}}]},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
105123
106− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"https"}}]},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
107125
108− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"://"}}]},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
109127
110− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"example"}}]},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
111129
112− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
113131
114− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online"}}]},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
115133
116− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
117135
118− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert"}}]},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
119137
120− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
121139
122− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/document"}}]},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
123141
124− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/t"}}]},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
125143
126− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"xt"}}]},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
127145
128− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
129147
130− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
131149
132− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
133151
134− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
135153
136− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
154+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
137155
138− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":689,"completion_tokens":63,"total_tokens":8231,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":18},"cost":{"usd":0.001321,"hypercredits":0.026419999999999996},"remaining":{"hypercredits":0}}}
156+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
157+
158+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
159+
160+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" save"},"finish_reason":null}]}
161+
162+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
163+
164+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
165+
166+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
167+
168+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" URL"},"finish_reason":null}]}
169+
170+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
171+
172+ data: {"id":"chatcmpl-bd9d5eec2073c3b874b87534","object":"chat.completion.chunk","created":1778597326,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":34,"completion_tokens":80,"total_tokens":306,"prompt_tokens_details":{"cached_tokens":192}}}
139173
140174 data: [DONE]
141175
@@ -144,15 +178,15 @@ interactions:
144178 - text/event-stream
145179 status: 200 OK
146180 code: 200
147− duration: 936.027666ms
181+ duration: 650.606625ms
148182- id: 1
149183 request:
150184 proto: HTTP/1.1
151185 proto_major: 1
152186 proto_minor: 1
153− content_length: 874
187+ content_length: 33709
154188 host: ""
155− body: '{"messages":[{"content":"You will generate a short title based on the first message a user begins a conversation with.\n\n<rules>\n- Keep the title in the same language that the user wrote their message in.\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://example-files.online-convert.com/document/txt/example.txt and save it as example.txt\n <think>\n\n</think>","role":"user"}],"model":"gpt-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
189+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/download_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"download the file from https://example-files.online-convert.com/document/txt/example.txt and save it as example.txt\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
156190 headers:
157191 Accept:
158192 - application/json
@@ -169,207 +203,81 @@ interactions:
169203 content_length: -1
170204 uncompressed: true
171205 body: |+
172− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
173−
174− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
185−
186− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
187−
188− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
189−
190− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
191−
192− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
193−
194− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
195−
196− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
197−
198− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
199−
200− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
201−
202− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" download"},"finish_reason":null}]}
203−
204− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
205−
206− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
207−
208− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
209−
210− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" https"},"finish_reason":null}]}
211−
212− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"://"},"finish_reason":null}]}
213−
214− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"example"},"finish_reason":null}]}
215−
216− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"-files"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
217207
218− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".online"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
219209
220− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"-con"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
221211
222− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"vert"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants me"},"finish_reason":null}]}
223213
224− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".com"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to download a"},"finish_reason":null}]}
225215
226− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/document"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file from"},"finish_reason":null}]}
227217
228− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/t"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a URL and"},"finish_reason":null}]}
229219
230− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"xt"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" save it"},"finish_reason":null}]}
231221
232− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/example"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
233223
234− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" example.txt"},"finish_reason":null}]}
235225
236− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":". I"},"finish_reason":null}]}
237227
238− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'ll"},"finish_reason":null}]}
239229
240− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" use the download"},"finish_reason":null}]}
241231
242− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool."},"finish_reason":null}]}
243233
244− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_e0dedf0a68a44c4b82324ef5","type":"function","index":0,"function":{"name":"download","arguments":""}}]},"finish_reason":null}]}
245235
246− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
247237
248− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
249239
250− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": \"/tmp/c"}}]},"finish_reason":null}]}
251241
252− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush-test"}}]},"finish_reason":null}]}
253243
254− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
255245
256− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
257247
258− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
259249
260− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/glm"}}]},"finish_reason":null}]}
261251
262− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-5"}}]},"finish_reason":null}]}
263253
264− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
265255
266− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1/download_tool"}}]},"finish_reason":null}]}
267257
268− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example.txt\""}}]},"finish_reason":null}]}
269259
270− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"url\": "}}]},"finish_reason":null}]}
271261
272− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"https://example"}}]},"finish_reason":null}]}
273263
274− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
275265
276− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online-"}}]},"finish_reason":null}]}
277267
278− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert.com/document"}}]},"finish_reason":null}]}
279269
280− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/t"}}]},"finish_reason":null}]}
281271
282− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"xt/example"}}]},"finish_reason":null}]}
283273
284− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt\""}}]},"finish_reason":null}]}
285275
286− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
287277
288− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
289279
290− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
291−
292− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
293−
294− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
295−
296− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
297−
298− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
299−
300− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
301−
302− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
303−
304− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
305−
306− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Save"},"finish_reason":null}]}
307−
308− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
309−
310− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
311−
312− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
313−
314− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
315−
316− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
317−
318− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
319−
320− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
321−
322− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
323−
324− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
325−
326− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
327−
328− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
329−
330− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Save"},"finish_reason":null}]}
331−
332− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
333−
334− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
335−
336− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
337−
338− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
339−
340− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
341−
342− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
343−
344− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
345−
346− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
347−
348− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
349−
350− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
351−
352− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
353−
354− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
355−
356− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
357−
358− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
359−
360− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Save"},"finish_reason":null}]}
361−
362− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
363−
364− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
365−
366− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
367−
368− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" URL"},"finish_reason":null}]}
369−
370− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
371−
372− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":160,"completion_tokens":108,"total_tokens":336,"prompt_tokens_details":{"cached_tokens":68},"completion_tokens_details":{"reasoning_tokens":103},"cost":{"usd":0.000145462,"hypercredits":0.00290924},"remaining":{"hypercredits":0}}}
280+ data: {"id":"chatcmpl-2f5df543a92ea1ec4fec95f9","object":"chat.completion.chunk","created":1778597330,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7754,"completion_tokens":71,"total_tokens":7825,"completion_tokens_details":{"reasoning_tokens":25}}}
373281
374282 data: [DONE]
375283
@@ -378,7 +286,7 @@ interactions:
378286 - text/event-stream
379287 status: 200 OK
380288 code: 200
381− duration: 1.326897958s
289+ duration: 3.815614s
382290- id: 2
383291 request:
384292 proto: HTTP/1.1
@@ -424,15 +332,15 @@ interactions:
424332 - text/plain; charset=UTF-8
425333 status: 200 OK
426334 code: 200
427− duration: 893.137459ms
335+ duration: 1.644283791s
428336- id: 3
429337 request:
430338 proto: HTTP/1.1
431339 proto_major: 1
432340 proto_minor: 1
433− content_length: 36247
341+ content_length: 34306
434342 host: ""
435− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/download_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"download the file from https://example-files.online-convert.com/document/txt/example.txt and save it as example.txt\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_4cbf337c01e5b47c\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/download_tool/example.txt\\\", \\\"url\\\": \\\"https://example-files.online-convert.com/document/txt/example.txt\\\"}\",\"name\":\"download\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to download a file from a URL and save it as example.txt.\"},{\"content\":\"Successfully downloaded 2574 bytes to example.txt (Content-Type: text/plain; charset=UTF-8)\",\"tool_call_id\":\"call_4cbf337c01e5b47c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
343+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/download_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"download the file from https://example-files.online-convert.com/document/txt/example.txt and save it as example.txt\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_e0dedf0a68a44c4b82324ef5\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/download_tool/example.txt\\\", \\\"url\\\": \\\"https://example-files.online-convert.com/document/txt/example.txt\\\"}\",\"name\":\"download\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to download a file from a URL and save it as example.txt. I'll use the download tool.\"},{\"content\":\"Successfully downloaded 2574 bytes to example.txt (Content-Type: text/plain; charset=UTF-8)\",\"tool_call_id\":\"call_e0dedf0a68a44c4b82324ef5\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
436344 headers:
437345 Accept:
438346 - application/json
@@ -449,29 +357,25 @@ interactions:
449357 content_length: -1
450358 uncompressed: true
451359 body: |+
452− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
453−
454− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
455−
456− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ed"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-a4f7722193027bafe61d2c96","object":"chat.completion.chunk","created":1778597336,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
457361
458− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-a4f7722193027bafe61d2c96","object":"chat.completion.chunk","created":1778597336,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
459363
460− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" saved"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-a4f7722193027bafe61d2c96","object":"chat.completion.chunk","created":1778597336,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ed to"},"finish_reason":null}]}
461365
462− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" as"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-a4f7722193027bafe61d2c96","object":"chat.completion.chunk","created":1778597336,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `example"},"finish_reason":null}]}
463367
464− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-a4f7722193027bafe61d2c96","object":"chat.completion.chunk","created":1778597336,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
465369
466− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-a4f7722193027bafe61d2c96","object":"chat.completion.chunk","created":1778597336,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` (25"},"finish_reason":null}]}
467371
468− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-a4f7722193027bafe61d2c96","object":"chat.completion.chunk","created":1778597336,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"74"},"finish_reason":null}]}
469373
470− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-a4f7722193027bafe61d2c96","object":"chat.completion.chunk","created":1778597336,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" bytes)."},"finish_reason":null}]}
471375
472− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
376+ data: {"id":"chatcmpl-a4f7722193027bafe61d2c96","object":"chat.completion.chunk","created":1778597336,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
473377
474− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":73,"completion_tokens":11,"total_tokens":8251,"prompt_tokens_details":{"cached_tokens":8167},"cost":{"usd":0.0001506,"hypercredits":0.003012},"remaining":{"hypercredits":0}}}
378+ data: {"id":"chatcmpl-a4f7722193027bafe61d2c96","object":"chat.completion.chunk","created":1778597336,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7826,"completion_tokens":15,"total_tokens":7841,"completion_tokens_details":{"reasoning_tokens":14}}}
475379
476380 data: [DONE]
477381
@@ -480,4 +384,4 @@ interactions:
480384 - text/event-stream
481385 status: 200 OK
482386 code: 200
483− duration: 1.486211917s
387+ duration: 3.863408666s
internal/agent/testdata/TestCoderAgent/glm-5.1/fetch_tool.yaml+319−328
@@ -2,126 +2,6 @@
22version: 2
33interactions:
44- id: 0
5− request:
6− proto: HTTP/1.1
7− proto_major: 1
8− proto_minor: 1
9− content_length: 35715
10− host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/fetch_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"fetch the content from https://example-files.online-convert.com/website/html/example.html and tell me if it contains the word 'John Doe'\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12− headers:
13− Accept:
14− - application/json
15− Content-Type:
16− - application/json
17− User-Agent:
18− - Charm-Crush/devel (https://charm.land/crush)
19− url: https://hyper.charm.land/v1/chat/completions
20− method: POST
21− response:
22− proto: HTTP/2.0
23− proto_major: 2
24− proto_minor: 0
25− content_length: -1
26− uncompressed: true
27− body: |+
28− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
30− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31−
32− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33−
34− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
35−
36− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
37−
38− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
39−
40− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fetch"},"finish_reason":null}]}
41−
42− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
43−
44− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
45−
46− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
47−
48− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
49−
50− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
51−
52− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" check"},"finish_reason":null}]}
53−
54− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
55−
56− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
57−
58− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
59−
60− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
61−
62− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
63−
64− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
65−
66− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
67−
68− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
69−
70− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
71−
72− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_60557666b1c79950","type":"function","index":0,"function":{"name":"fetch","arguments":""}}]},"finish_reason":null}]}
73−
74− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"format\": \""}}]},"finish_reason":null}]}
75−
76− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"text"}}]},"finish_reason":null}]}
77−
78− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
79−
80− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"url\": \""}}]},"finish_reason":null}]}
81−
82− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"https"}}]},"finish_reason":null}]}
83−
84− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"://"}}]},"finish_reason":null}]}
85−
86− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"example"}}]},"finish_reason":null}]}
87−
88− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
89−
90− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online"}}]},"finish_reason":null}]}
91−
92− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
93−
94− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert"}}]},"finish_reason":null}]}
95−
96− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"finish_reason":null}]}
97−
98− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
99−
100− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"website"}}]},"finish_reason":null}]}
101−
102− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/html"}}]},"finish_reason":null}]}
103−
104− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
105−
106− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".html"}}]},"finish_reason":null}]}
107−
108− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
109−
110− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
111−
112− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
113−
114− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":696,"completion_tokens":50,"total_tokens":8225,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":23},"cost":{"usd":0.0012956,"hypercredits":0.025912},"remaining":{"hypercredits":0}}}
115−
116− data: [DONE]
117−
118− headers:
119− Content-Type:
120− - text/event-stream
121− status: 200 OK
122− code: 200
123− duration: 2.230852292s
124−- id: 1
1255 request:
1266 proto: HTTP/1.1
1277 proto_major: 1
@@ -145,363 +25,460 @@ interactions:
14525 content_length: -1
14626 uncompressed: true
14727 body: |+
148− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
149−
150− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
151−
152− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
153−
154− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
15529
156− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
15731
158− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
15933
160− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" their"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
16135
162− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" request"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
16337
164− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
16539
166− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
16741
168− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
16943
170− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
17145
172− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
17347
174− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
17549
176− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
17751
178− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
17953
180− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
18155
182− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fetch"},"finish_reason":null}]}
18357
184− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
18559
186− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
18761
188− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
18963
190− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" https"},"finish_reason":null}]}
19165
192− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"://"},"finish_reason":null}]}
19367
194− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"..."},"finish_reason":null}]}
19569
196− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
19771
198− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" tell"},"finish_reason":null}]}
19973
200− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
20175
202− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
20377
204− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
20579
206− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
20781
208− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
20983
210− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
21185
212− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
21387
214− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
21589
216− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
21791
218− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
21993
220− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" craft"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
22195
222− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" They"},"finish_reason":null}]}
22397
224− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" want"},"finish_reason":null}]}
22599
226− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
227101
228− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
229103
230− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
231105
232− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
233107
234− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" instruction"},"finish_reason":null}]}
235109
236− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
237111
238− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
239113
240− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
241115
242− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
243117
244− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
245119
246− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
247121
248− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
249123
250− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
251125
252− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
253127
254− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
255129
256− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
257131
258− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
259133
260− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
261135
262− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
263137
264− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
265139
266− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
267141
268− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
269143
270− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
271145
272− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
273147
274− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'\""},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
275149
276− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that's"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
277151
278− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
279153
280− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" HTML"},"finish_reason":null}]}
281155
282− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
283157
284− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
285159
286− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
287161
288− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
289163
290− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
291165
292− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
293167
294− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
295169
296− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
297171
298− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
299173
300− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
301175
302− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
303177
304− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
305179
306− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
307181
308− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"c"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
309183
310− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Check"},"finish_reason":null}]}
311185
312− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"k"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
313187
314− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" HTML"},"finish_reason":null}]}
315189
316− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
317191
318− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" John"},"finish_reason":null}]}
319193
320− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
321195
322− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" presence"},"finish_reason":null}]}
323197
324− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"f"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
325199
326− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-b39d5513375460df26bd477e","object":"chat.completion.chunk","created":1778597337,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":39,"completion_tokens":94,"total_tokens":325,"prompt_tokens_details":{"cached_tokens":192}}}
327201
328− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
329−
330− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
331−
332− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
202+ data: [DONE]
333203
334− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
204+ headers:
205+ Content-Type:
206+ - text/event-stream
207+ status: 200 OK
208+ code: 200
209+ duration: 497.991709ms
210+- id: 1
211+ request:
212+ proto: HTTP/1.1
213+ proto_major: 1
214+ proto_minor: 1
215+ content_length: 33727
216+ host: ""
217+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/fetch_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"fetch the content from https://example-files.online-convert.com/website/html/example.html and tell me if it contains the word 'John Doe'\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
218+ headers:
219+ Accept:
220+ - application/json
221+ Content-Type:
222+ - application/json
223+ User-Agent:
224+ - Charm-Crush/devel (https://charm.land/crush)
225+ url: https://hyper.charm.land/v1/chat/completions
226+ method: POST
227+ response:
228+ proto: HTTP/2.0
229+ proto_major: 2
230+ proto_minor: 0
231+ content_length: -1
232+ uncompressed: true
233+ body: |+
234+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
335235
336− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"x"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
337237
338− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
339239
340− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants me to"},"finish_reason":null}]}
341241
342− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fetch content"},"finish_reason":null}]}
343243
344− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from a URL"},"finish_reason":null}]}
345245
346− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and check"},"finish_reason":null}]}
347247
348− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"p"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" if it"},"finish_reason":null}]}
349249
350− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contains the"},"finish_reason":null}]}
351251
352− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" word '"},"finish_reason":null}]}
353253
354− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"John Doe"},"finish_reason":null}]}
355255
356− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'. Let"},"finish_reason":null}]}
357257
358− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me use"},"finish_reason":null}]}
359259
360− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
361261
362− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fetch tool"},"finish_reason":null}]}
363263
364− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
365265
366− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_74e206507d5046e8a4b0aa5e","type":"function","index":0,"function":{"name":"fetch","arguments":""}}]},"finish_reason":null}]}
367267
368− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
369269
370− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
371271
372− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"format\": "}}]},"finish_reason":null}]}
373273
374− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"text"}}]},"finish_reason":null}]}
375275
376− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", "}}]},"finish_reason":null}]}
377277
378− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"url\": "}}]},"finish_reason":null}]}
379279
380− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"https://example"}}]},"finish_reason":null}]}
381281
382− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
383283
384− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online"}}]},"finish_reason":null}]}
385285
386− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
387287
388− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert.com"}}]},"finish_reason":null}]}
389289
390− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/website"}}]},"finish_reason":null}]}
391291
392− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/html"}}]},"finish_reason":null}]}
393293
394− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example.html\""}}]},"finish_reason":null}]}
395295
396− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
397297
398− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
399299
400− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-74057d7e93cd8897f7724da7","object":"chat.completion.chunk","created":1778597340,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":721,"completion_tokens":57,"total_tokens":7818,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":28}}}
401301
402− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
302+ data: [DONE]
403303
404− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"i"},"finish_reason":null}]}
304+ headers:
305+ Content-Type:
306+ - text/event-stream
307+ status: 200 OK
308+ code: 200
309+ duration: 3.373965084s
310+- id: 2
311+ request:
312+ proto: HTTP/1.1
313+ proto_major: 1
314+ proto_minor: 1
315+ content_length: 0
316+ host: example-files.online-convert.com
317+ headers:
318+ User-Agent:
319+ - crush/1.0
320+ url: https://example-files.online-convert.com/website/html/example.html
321+ method: GET
322+ response:
323+ proto: HTTP/2.0
324+ proto_major: 2
325+ proto_minor: 0
326+ content_length: -1
327+ uncompressed: true
328+ body: |-
329+ <!DOCTYPE html>
405330
406− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
331+ <html>
332+ <body>
407333
408− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
334+ <h1>HTML test file</h1>
409335
410− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
336+ <p>Purpose: Provide example of this file type<br>
337+ Document file type: HTML<br>
338+ Version: 1.0<br>
339+ Remark:</p>
411340
412− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"s"},"finish_reason":null}]}
341+ <p><img align="right" style="height:5.0551cm;width:7.62cm;" src="data:image/*;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gADKv/bAEMABQMEBAQDBQQEBAUFBQYHDAgHBwcHDwsLCQwRDxISEQ8RERMWHBcTFBoVEREYIRgaHR0fHx8TFyIkIh4kHB4fHv/bAEMBBQUFBwYHDggIDh4UERQeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHv/CABEIAY8CWAMBEQACEQEDEQH/xAAcAAACAwEBAQEAAAAAAAAAAAADBAABAgUGBwj/xAAZAQADAQEBAAAAAAAAAAAAAAAAAQIDBAX/2gAMAwEAAhADEAAAAfTw/R3PYecCwoIFhAg4ECDgoECBBwUFAg4FjicZBQLHE4FNQIECIsIOBBwIECBAgQIECBAgQIECBAgQOXpPwfTHlZikum9ShN2FpZb1KyPDKYB1aPu/NfW6F3hukQIKggWOBAg7CBAgQKCCgQIOwtVApqBAtOBTUCIscCDgQIECBAgQIECBAgQIECBAgQIEDj6z4bTP5djKyYqZYBMBVGlUEFpAm6DSF6qhfofg173VDtDLigg7CBY4ETscCBAgQcFAgQIOBAgoECBAgQIOBAgQIECBAgQIECBAgQIECBAgQIEBSpbmvlHZj4znngyxsyPUmWYDaMsEPaWGySl7raWA+4cO/uuvLDHmaC0QdhBwIOBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAzJjF3ohSG0W6cCBSLZASa57n5pefq1Xy5xz80k6GzI7RAyG5JQFvcKmDdYZAGP7p5W/re/Im0MTXRRCoECBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgYFy4nmcVXjb0vWiL2wrmY470gOY9b53q5eJmfJ6Zc3V0hdukDAYDqqQWZG3tFoXuojakiWWwtgdfe/H3DrDHae90kiIOBAgQIECBAgQIECBAgQIECBAgQIECBAgQIECBAgQICRPLxCukcbqAHPS9yQjHPb0A5ZkL3IUuJ0LznbHkezPArkTutIyzcmGxhaLaJIJtiZlMQ16oYfTOCullZ+2fomh1BQcCBAgQIECBAgQIECBAgQIECBAgQIECBAgQIFBYJpJ5vECXI+Zz1GkrrVuZC22SeEvToWVztoO76eFcq8jTTSSuq+Yexks0NsbAtkksMhY4kNmkRF0xFW0Jn3HwOjWoHon2/bPWpQIEHAgQIECBAgQIECBAgQIECBAgQIECBQWAw5aXFxe6nz0zjK2uatZUPYUc5wOjN+N9XP0nFXRm/O753lXE6sO9w05Gi1Lcu2egxPnPq8/lexYGNlBtGkJ3ZZnYqC0SUvpbCVNqOvqXk6+f649/y36n0o9G1YREHAgQIECBAgQIECBAgQIECBAgUGUc1IqfPa4sAqnz7W+eltIPnbMBuWlhnt8jaOjx36Lnvi9U97kfL6k0Mmb4O8clRi27N5Zy+ife+ZXK6I+RezhQAdWLI9osMARSJvclAC6OFoBT+veHt53oPVyes6p73VJQ0FBpOBAgQIECBAgQIECBAgQIEBAS2Z5rJhThPH0nh9GfW5NENoaxp3KtTamkriQ1nu8WvG6pWue35mvbzpmV2sWj0M3O+D2Z8W4czrJfczDtdKWDQ+Ee3yrtLVWGaQWVhvSUFh1QhunJkoKgN39s8HfxXdnun6jmr0XpR6/UCpRT7DcCBAgQIECBAgYCgIEDn5gbSqXLg4Ii40JMCNJbRzd5StK1CtwWb63LqpqlalW0KpNNN8j9TxdKmgaF2OVstNxXlt8ROGS6dA0OjkjLX0UHz3vx+Y+pnuZoKKsMiYmF6ugsHEUxVvAxj+r+Nt5Hsn0GB6zlsXqx9E6F47lOXR9B6UynAgUJUDAUfPS1QWTzkBKRpaQcnko0iFSCzm7R2OXXyvdhkMoyJyK4vRCdyxFGg1KQ2ZZFbLT7fE+tyaej59iwcHrh7lOznSep5vXFa25ARDcp6NSrSaLy3bj899DKkAquhlmWZDbwJO9CSWDIK1WwC2Mf1DyNdF9fNER2euO/1x8w5Z8/sfQCjaz05qAumtiFG1sg40GpzoLczA1ztY4fVHV5r63NoOoTs5+mfV59PE+nhBp2P5Pq4VwejNPQ0qYibQJvQ1qREO5V6HzdOdvfW5b7eK0jrYtmV5rrnz2yelNQunkKVp0sm6Hyv18PM9chpnhdPDFPSqYjppgo8yCqIkVlDWdWj7t4O/O2bcoqrh7Q3M+S68VrXoo0RqOzb6U2zlpwd8O3zaaT52swFbjz/AE59vn0hPD3n0PHvwurF/BmmywJUvI+nizm0tDu8tK3FI525aZIVhgehrUaQ7k/T8OvMa7GO3b510sCWIOeNrPnuivQ4NqE1muH0nb5qfK8f3YeC9OMh1cMrlL6VzNdY0J2RLIEmYzA8OmpX3LwenzHSblA0TchkvFd+O0tM02259Zjujc+Y7ef0/Du/jfmu3H1XFvaPDejzN51YubrPpeHbyHoYuZNnOvT8Ovh/T51dU7kczZuZMTkyfO2NQhtlRgdjE1AIn6HgsksuOvqeZ8vU6cu8svLdYEfa5r6cpKpR0NJ+u538z9jHy3VFD7fLgG2vTWug1WR6FgZpkbYnTUZ7K+w+H1c7YW1OpgolzN15jryS1REunlTqOyrcm/O9eDUV0MNPJ9/P0MdfWcGni/R5yQZt5S7PLr5zqyU1kkOCHQKjAst7g0GGxuR1StJiGCix2i0nMz13lag3rGRM9+lOSu+ep05eh1sNe9zy9lPku3JetfU8j8j34+L9CF7DRPQyzQ10iLEvbocGVK0to0k1Mhdej4+n02FaT9Zzvzu88baPNdeXL3GoNC62KfL7c6agQ3XZ5dObtPI6M+9xaeR9Dn3NuwIXOU1NYFRpPDNJUMNBYnLcTWsyKww1tUCh3KRthZ7fyNe3z6EenH3z5pfcyy5us8no1e5n28NOjK9ThPzP0cObpp9B848l2z839bMspvOOnjkrpS9VzddaCARJqJMktpdSjTNFdnm6PTc99jJ9XI0HluufMdfPxOk6WKNLJKfl9EruY7eK9DD1XDsJsTg0vxPpc2RmSG2pRYDYROJWzcrAaSzTwMFA29KTxOHUA8SJgXfc4X2sdUtdHsMwVr2OfNS5811X2+OulMdfHbrZT8g9/l6/F0dvOPGehnwOkw29lm9nGRJ6Vz9doEAkp2IsWRjplhWj6N53cWZ7WT0giXz/ANHDnbTydzoZElZaeg7EaB1fD6cjTRZYnMDn7SNhpIMLBUERaMNQdpROhU3pFC0hPRs5zTNIPCWtsQlCom7k+vzaNzv0scyzHmunUsHazTKv0eEfFvcxw6w8g0K3dpv55vZZAqsNL1VjoBuiJMRI6ZEZbyj2PD1eo5WyNVthhFPy31efFI8KgwLTOvlWdXx+nOg0UJrSFrKE9ml6dDyECgxRB7ict0KnR4VqbBLSnM5YiV7q5ccDKHLHVEmupzo0dDuefWxXO10JD62V+e68TOPMdT5u0N5Qlpcb6eUGmDZxzddIJa7HVWjLOhjmzKptS2vV5D6b5PZ6HCK0adNiJ8H34A0lalhtzOV6CIelrbHH6k7nK93tLI9KMNtShDKkvVElZaDTGPSUAbdjNEsxK9u07FgQarIyKMqvQ8j7vNqhq/N9OJI6PWcNEQCzDprBL9OPE1npZbeV9DneyktMoucKCpIAL2xuhVW0tociSIT0pK9Cwqa+veL1eK7M/qHDpwdAgLXPiu/ILz0IqAMcimpDtobQlsqAbA1RJjLbuUq3RpinWB4ZBEkyG017NI3KFS0nlJe6jImGntL0vEu9xa9XOwXXM1x4eunfxe4XnuiutguXtXE7OcDXWz1qsPS88kTDovH7Msi9AGxU16rDpuINKblKU1qrINxKd3+gPB6/Jbz6fBed2H5a+kfPvSwA0eEQAtW21DaQnsKbTtC1MiBksymM1y97LKw3BjZaWkQdBBbQKjLNyhjHVQWkDbfzn0nBSzOpnt0504OufK0l7Pb0MLyO7T0wItOZ0Y9bmfpsYBUYEyMlHjt63KTp5FkFdLg3YVJMTKd0aU9nCd3z9dPtPidHk+rLh9B9J83VcnyHoZcPonna0/lJEjZpbROQ+jOnJ6pG5qpJIfNK6MTCJo6B5MNwY2tIsKTyyC2jDKS0jLBuiJQYwNMnzeBu536/m2422XE1XocN9Si5wuTweyGYNquzGGGsoYTYYJnF2vyW+jUZgbPI9EMxJJCI2ltKh8Lp15mt/WvI35tM5VPP0fM/PdGfl+3FPR7kDTbylWxiToRoj0ArgdQSUzm9NI2xXSVjEobqwGBErHaQ26FtPDUAkyN1AgM5oNVTWs1orpZDMVztb1MdPLoQ1XSxxyBcktQvodFY7JyM0jdFJ8je1JjArA8okoklhaKb0gbEtdONvfX49vRRYlPcyfq+J+L9DLzHXnwulsSujjClUxL0M8tfdL3LEQvobkwzQIa1gNpYqtBkKRoIIQ4BpQ6IjSVhgeabOStlyudd9HOSKmYSOlkk6+euIBdE855vRbWOeKTMZMyx08oclNtFk4lyAWkaRpGh5qhtXKynlkbBpfW49/b47oUupmZzzR1fz71cVNEnTdiS5gKZ5bk1yutBqGIVOYC10ZAKAsodsgQIiA9nPc55Zhef6b5mrwFo2gbI2fOdhgAlRkH2eYp1yth7PTUrOqA83cdOxzcqmuj0ZQNjtq5KH1w4RA0Wy0BdZowFjy3FI6q3Q7v0/lvr461deg5ha0+jx/ZHgPVzMktQSEBt6KezfP6WprnsF6TeciqoAKB07Rh1oUSoZEvScmSGlgsLK5etZDSVjGzLbOc0PSS9VaRSjxTE1z9M3s9lbjY13j2Vo1x47okwEpxrcgQIn2oYKnmtUA24KgiMU7DLdN5ZV39U8XUmY1jaDAaijng9k+F9WdNDZ0uaOZtT8N/O1tBTaVtJXoaicMy6w0rVFRhuxWlGzxPWylV1QAc6QeURIqII0IQ+dtoFgnVBobios3y9I7mOvE2x9BlZebkBttg0PlyN5PVBRtxSzWhQQwEwTLC0sN03uZgyJbqqSsn6J5nUu65ab830sWLR+J9LLzvbivToUQvQzA1Fbuk94Tow1oKSjekNDxMNSanMqnSQavna6dXCTSmc88t6RpEHTNTK93EeX7NQVWkCbMjrTomDqfPrPsZ6dLiy4nZJ0954HgPFbpOTW0Wg7Bo5WqABFImySbSiVhpLSI2Nv1PFu0ll2TDX0Odq2fI/d509JBTIlcrlb07kn82a3jWVGlaLDKCB0Mo6cKoxJK2OI2q5W98bo07nPBoRogsoieh4EO2bJUMFnmuvXm66aSw2zK7E7JNFHz7nqS28MhrM22uefncyZUYoLD6KdUYQZPDnkVIwjRoLDcqmZCwGjNP0PJs3pfXyovPoppQ9J+WezkvRYNRIUufq24OtjYtldLm6IbMg9nPX580dK6UjeWdJaKsMo5utcvo16OOZw6XNlpOgyA7dgTNET52p5vs15utmlaRhvqzqqSJt9qRTePKSM76Ox3jwihZuMYVOQs0RrKOtNceoCLNFp7lbRiix0IYaSby73uePX515nWPN9q5PVIqZUk6ZZQ2QLkezoli3RGEujE1I1lmRLg9G3Th9TMuI3E0LIU2VBYEOjR/mzgqHQcrqt/nncLNHJ6HwujTV7Uo51vDbk31Cl1D2UDbbx59yktt38KPnzAGOg5TEoYjjEBWgWAAkokq28BinTLHamhety9TgrLl7R5bueHOgNKbiTJJUxU24T0IGi1RhpmIirq5QzC29Q3eLbeU7iWsM5KieUqCAj06M8+WWwW8t8/p0exyJmgWAoB09BLrzehgpkTuS6BR8canTm7Ppc2XRww5vTsS6NyYLN2GLo0Io2ZZmue89NyVluU6lWOkrCBB5a+nT6XiNs0CeJrmho1LYLraTUsTXSiOjhn0MYyy0jSERpG4JS2OmaRhu2apRFy8SZEFgqNojcZEgU95xEqosLZhuN3peLqoE+voNlCNXy9n2uLL0PFgrocz0ujo+dzibMC9B0aTMmeJwlAtGEUGnUZiiqMJYogei5uh6X0VWkufcDSFaBYAWBFk0wBOkQBi0FBTIKkUzAWERAtoVFCkuwGywzRhimwEVWz5NtOVOW7THowykOjes0TTSlak58frr0/Bj1ObLSOR6/S15nNytRhGx4F0c2aWwAYkdPLIMbnNVGDSlOU7pjmfa83ayCSgNSFZlhNy6SeVVIwXoQWhCXJXa0gYs6PSUSCLAZooVBbKHbMpSqW1sOlI9F7ywJMv5h5cpRupnUGUDDQSUGq4Xo9SNV2+Xn8r6Gvb4cWMstjnoda/BybTgg3o/jI2OFGBKswhpUOwNIsOyqJtLdAUh3Xp+IoZUQWkWmOhiWNzodyQMi03tFgNoydp4pZZmFTLZhqwHJtlN5FQWzOlA66S1W+LMikxWxhS2ONZZHR4NW+dTSo5+mvc5sfDer0eo4Mety58Tq33rZ8MFyNSw6U3nNA0gsgqmh7oyioNN2AmZT3bxRpvrcMRlixSjBo2y5e0QcCCpqmrVbag9ySXdFIV0DwVCtl0bHUgmshcvVAbBMazJoc6yE1GRlVWBYS3mgsPWT3L2CbtxZ+J9fo6mE9XllfRdCZ2MeQBtHY3EMy2SjhQYayyDiA0jBnM0LMlNUPoYPTeWgkkAg4EQIVWsp6HEWy7dyqRYVYCnaRIW5YaIFyYlFblmpImOgSNAPR6DaNiFRmZHUg0WU+b1XUo+SayTMvVNDaeJ075vXq8uTs5NIqXbMSJ66dDCIkynUlUVAKzSdtYHsKZmiDwTE38HCYGEstVIZu6Y1O2x0qTpBmDalK043TUh0jUog6RoebYkihUlNUINqRWqeUhWRkFtMqNS6FhkaFQDa09qA0vMniFNdUurfu8GDWWVDKnED0a22nQwjKJKZbxQTEgqBbok0sCTA5FXRlES6ud6hbSwFNUMyBNRmUEp22EVoELSVUaHQSFGVSpsg8hQbkieGhpXQJloKiwwhLSSy4zUlURupMUK6gtKtta3GJNobVu9HuPkaxlvKilmVq7JXeXMp1NVc5DcIedVSMhS1cllHhYp2TJWx/QeTpZ0epeBaQKDba1SFSBgNESRZg6Tku0ElqXKlqhHyZkLVOwzYhcrUuhlTQ10rb0gbBBVraMJFTsekCJCyIplgCkEU0oLkLYNKqqPnAmB0eWhVpzem+W11+aGJWNE4pTumuZdTOaVMyoAlVUKtkmRNYp+w598uNZplt/OytjSCzYLCDSfWhJBUhNYQaXdBhpuGZqmVmk9JeKAK6YhbSkOUSWVgEiBEyDtnSjQtCtIYDhDZWiVmVtDKnIlxDchpAEOluWUcqlrY6EaDJc7SstMKQtLU2FK9UaZewHsjUkFdMQfQefqEkvTlRaYKkjTmd8zSBBUI5W5Ct6HSBVKikbVN4oOjqF5boWsy6KRaoNSNBG8Erk2A2jzRiqRqjUD5dphZKRpeUpY5NCENGQy0FFo0601iQ7oFI2D1aSqQi5umfM1lO5ktfQ5u1xynpZIg0wXM+y+b2WhhsTU0aaTQ8SiFYEuLIDtXQLIplysCRqbRcrOzXs2SMKGUCgFzGSXkF7Q2syYUdWNKFlmKecVQ2WXQJFSa1eXJIo1K8qXCnLM2uK2hW6J3LyBEZYuIgytlRkDJlmmVVoxQokraWU+1z2Gk+XvVFTC0KFhNnQFAzTECqKawy8jNFSpQqp2PdNElNxikIBEsqj027epZJBAETpQlMlkb1SUSwgBIdEXOlripWdBOwaQhdTOzxWNEGpa570jNkkzSoeNFlm8zAtSc/WblZZdOM3AdU1dWMTn2ePQRhGCDbIiBQW2SQ2hlOmh5EsIGEXJQSgUh9TMGEKwhUtDMB9AchLC2AyekbbiQaMooRLLGLIu1kOcpqRJyJK4eQaK1Seza9NLSXMqbAYssRqTzW2bsUlbzQ6XLuUiRC26zopE001T1Ne2fShjL2lRkRnMZsIPEF0bZkAyasprMI91z8pPTUueapFT7GdtSH0By1SU2uvrRJdCtuxXD0zKeAPRgAQGowmW0GQjFoDM0LLLQJAs0AJSwgrLQ3dDzBSjDFqpnSdpxjWTX0ORnFEwMpETWaU0ilXq9dZA3obTGgaLQfQXgkiwsAGkwx26pKQE0Y4M0kMgmjFKck0zViWaZ1ekUA4VWXRcuQnd6zJoMJ4yJZdsea1bK0nDimI1TGhmigSiT00YWszmaT0imQTScTOnmweQvsNJ5DW9XjIoAZyxTMyMFkf/xAAvEAACAgIBBAIBBAICAwADAAABAgADBBESBRMhIhQxECMyQUIGFTNQICRAMDRD/9oACAEBAAEFAk413YOS+Sf+56lkUU4vV7BbmWHY+ogMYQmKdwAb8cixmmM8bLedz7lIze3XR1J68apkH/b9Qyq8d/8AKs7Zt82M2i/2CSrGag8DftZ9jZXc4+fAhH46ZfkrUluUyUtY3/bPkVJfP8iyu4M7PycqvwYx3AQYYQJ9wLFIBOubH1CgzwBvysM/x+57x8qifMx9qdj/AKckCCxDGcCdzcVtj/yXJrN7dQoXN6z1M2dVyOs0jo/Uc2zNvJ2PG/yTD4iNuH7b7P0CI/2IT+OkU9mjExnRzZgY0wcj5NX/AErsFGTmqiLdzGPaNkrunij2Xoq2ZjozZi9w5QMW68xWs4ZXUe5RZZlVXWX8rCeU36mfQ8zfqZ9Qia8/QX1hi/beCVG21G/HO5kqyeU6Diu9iBQP+luuCEcVmW4VDcvZssIrWxwz3rs9zIqWhRFVGl7dpsbI52ZXHHutyKXj4PT7KsvoxVPIhOp9JE+vG/AhJg+/3M0b6/uvgkiMwjaP4658t8pccVtR/trLunVtVT/0BOvxkXis3Z1dbr1BDXde14XdQewvYX/9l7e1BljjbyttpS+17Ssp7lItyONmJlIcvLyKbJ3Paq1tU2I0zKkyqsjGsx3bxG+mjGbM14bXGr6ZtERGOz7M7CIC0NZjzJV7EfIopXF+Tk59NHB//sJAEsYIj5irQ2cblq6iahlZVr2o5cXBZWheXsUoW727upYa6q+VgsL0lg3bUOK5h5S9u1gbadVl8ghURHnlFqazmlL24/XXdsnexvwYF8D7J1DKzofx6zfjXkytuRsMP3n2C6ZHxd9HxuwmDh//AEk6BYAZmSKLKMjuU5uUPjHqjLY/U2dcjN02IS7dTsZL8rT42LWtVtjhAl4VedTpjn9ZmDXEr2EwsVWoRK6+q0RO0q41FZTMxsZQx5yoPeUUVhaczu4Nd1uThG+f5WGfpbHx/VvEX6cz7BWaXlv2/up8AnR+05AaMXc6n08OcvFrpr6Dm44x1zzVKrOcBBMB/wDksyVWzNyVWd+wvk5HK03mhsy69cqm1rMutq0fJYItCCqZCrmUrZW60uarc1+Mwr37gzEqqa8mDK4WjmchOdcry9Wh1VGbcx3pFXXq6g3aVJVee5V7Y+Pd2q6NvejpY3UMZrsS6p6XbWh5PnevO9AtAIBG0X/bPLGlfD+Jz8tKr676c285GTg24uDk5mVY64GJfcqIEGTZ26sbJ7tn/wCN2CLWwdPw+QOAv0+R1Go0nqT1UZeY3ySLt57IXW+vhbwLrdUz9RNYeu5d5VzvK2eV3fqW37sy70sXmNd8cRa3NCXONTxsVbAmTzQ4gfihUvVaptrGPdXm1NQ3yUMDKlVCJXAPiJvuirIFYqtDz/Kr8awn9yryPP2UaLaMRfewefuE+
342+ qIIqIIXEYw6iEq96h+m9Qq7V/T+nLffdxI6M3Ufk18+PVsk8Me0DqGNYLav/CnIqtVLFf8AGXbxF1vGd5O3nZXrTcUGPmM729RCuuV+lZb+pkOtZu4vXyQ2bZFzH/UvftU4d6Ke/Mitu+pAXkd0MgPNTdZZ5VjuwkDY5D9+LYi4/TCWNV5OSMlVzc7W8IholFqU77AvYZFtKnkO49g3zdTctdlQRscWTLzHxa/8tai78Bp9yinwlXCFq+VpUsSImoCSdaioTFHlt7bU6hW3+sbDJlmRbjlr2Mx+pVVCzNp7HUcmzmLBOk5r9izqLjqC5vm7MaZGU70NYXqxbTYL83ibbDGyvTHyFCvkJ3qbzq+4K9p/WevjRZYOOTVyr4cqnarhmXV0tY697uzkJSjlUt5WZOxav1FPFWfkressACqfIMxAWvrtFVwzGa1We3JsqLTAp+PLbbe/ZYr4r0pRkGytcagXdqtv08axVmX2aIulbJt50dXXt3+TCPXEUG5trH5WMq1SxTyHifQJ9juINR3mzNecjHSxlycRqUupvdu3W14rvlddGJis/wAe7ZrXAF9lWWwuyBfzXEZymZfwxabm2hIma6IL85Frw15UXUZIs7jXZF3Ki7CSqynKZUvVuXT6MuyWZhtbp96kmrlk3W1/E7hBKDtAAvaeSh9S0einU8mbVRX7Qzzx+oCBMNtPR27Ma+oLXjjvV912gv3LbBk4td1rjqLsl2J+tY3KtBtMZHPC7JfIGItaJ22uPXL6Tj7MP1jlCHtIlhZUbxOTT+xJM4+qCHyx+vuJ+3IsVOn1Khyc07ycnqrqcFbON+ZjXhqslH+5XkNL67GGI/tWrmvqj2CtbSkyXLWMifH3vFVuUD6Zq9Z2W17JTbwxWZrL8BmOM/crnd41dOt1bZfWca4gWMEMsI7eP4dm9YdifxswtuA+oPsdcdjiNEL5mOr/ABjyvr6bltUC6Ui7/wBrK1TU93CwdcNzW0r2q6eIuoZ6kx2TdtI+dTkLW+GeLf5QjV9YJ2S3musdlqnU2gGLWjGxPFeiN6h+qvobMO9rWda9fkpkovTwbMAVWtV05EFu6bs1lx689r676WRreKkUXnSbNmHbaBk9u2vMxjj3Ydym/OULj0hnGHZaxr02E5DZ2Rk96rpifIzOp1MnUMRlanM02Of+NSdVO0t4lljNK/LNowa4cgsc+zbcmDlr+x3B5Opjj9RS6xxxvtTkpsIAptSl1dRi9+58k9zMoUW3XOPkZyr8f5fEsbrMrExqkq6li5GNVba97JAhgLJO5ueSpFgD7aJ4mjtl4z6TH8knU2ODvuYB7B6Jfbk5nQhfyHEvm497XZvP49tvOp04rWW7dW+SuOVcZqsmzqALYGAbK8hXGVR00VVV0Y7r1PIf44W8VWZV/M4tvx1usN13zHWM/Kb5H6VN6dtHyYF3YFKv/wD1fWuQEc+eXod7s8MPLMvMcPdz5wkSlKLGpmTbj2hjwGOqvn2WdpHsmS7V2144GIx+Ph9Po7avqzH6o71HBLLZhvYZ/lOcyD+i8jKvexttLFQC3ucndzA/qnkudSshiQOFfgMPFSklyEOXRdXb0yxP9b0zvZGQ9zd/VijqaYl5zCDOfqmhRQgZhxLcuMwA75GboVo6LfXkcS1x7qXoLOoXAU5Dg2WkcteiHct/eG9f5niOTsERdQN48mMdr6kMfCk6rMsiLE3otqLvlZerirqSKLrBlytkanpdZdVNlb2K/Puta9Jr71pXWN4iOa16tmNm5WEBF6riKOs5xzbG8SsFmqbTDuaNmozOQ33E8HwYiDhOHOENKieNkx+oYYpo/wBfi14eSLWLWfJaotkZODlplZX6L8VYOAoT9xtYvW/mu1gj3rYjaFpvctZfZsWebbPVeOo2wE+rfMO9ACb1PGifYajs05GbjiINl040pPoMPU+BX4q/db/b+1myen2ObL6EtnTXZMU36dAd3v8A+9jDXUMsrThrkIcTqFIfpqVl3bIbn/Wxm2x3EOjUG5WdwzQEJJhZYFGuIMb6UeF8Hk29+qGWP4w8RfkZOOHsCLTjW8WxkyGFVfL4prFbV+968WezjXD7BB7VhQHFfaYrB7EleacgW/49iLvlxJprMb2dvDHfEctaOyfZ/Efy24dzxtPEuMBiAmKPaz3jECKAJs8FY6GjFRar6MjVqZPDJybPSm5uNitldRoqV+r9WrQv1Z/9d1DO602Zi2g10QeQ3hu2QyU8AjHk54qCxLfWp5m2nnaxRuftBMV/H84JYWJ8bFqx8db17drLZXdVXc+WjZFeTXOO1O4QzV8e3NiKAZeqqD4bG1ojZ8RnPFlHKz/kH7XAErQNLh7KNVp4WocpxE+7PZSs1FU8vEu8xKxyduM5+qnZbyd+iBnNHTtmvpOAyZnSV1jKVyDvu143O6qoYWZ0ptdRyLEweqrcz9R/yusNV02xExkppzem4+KXl1PamRh2XWfFeqqwxBG+j6xz42IzQaiMNosZhpmjNsoBCZZR8XERslp0xmswqudltDOLMay1q8+98q7mRWbF7NOiB++orE0strV0uqULXvjYIm4fsHccGaHBzsU6142SJuJ9nQdtbYxFHcrT35ebHIKaIZzp9z+F+z5iruY2P2pgebcsKuTbbwsztZy5aj5NWUK7czjemFZtuoVocZcg475WXfkRSZlXW0Nh98Gq8CLkbOUU+OTt38QbJc+XUmfU8kqjEhVWBvViY0VNzjocyCzaj4lDCyymvFGDbbfjmdWauzBbRPcFjBN2V+UsUqaGaKeUL6AbkR+FgXbJ+6w7jn9MRG/TLbLEa35rInL3U+5MB8b9d+PMUwnUaN4m/BPrhEi62znSlpFS39zHakXW9UruxK78kPioFe1a6K8OstXM8M2T1GzSIeErq4BKK1Tt9qKP1fHNjzHDuWX0PWFbcCy1wB66T7H0FJPEgFGJSgxaZkgKSV31K+ykZ+RzTFrsvfA3/qspuVnUDe+ay+rIRKG0ncbV9ZeukcYn7mUcCCjHZm9Dt7AAVDs37/VJhAnjt/2Jn9laLFaN+7fjfgk/gft8weYftfIb9tbCPcxnfLDBtX5D9RPxurdRN1Fa7x7f0Jm3gLj8Di24iFbKrLL7K0rlVzkm31tbRrrBCJZoOtcxu0g6tZxr2dKbOHEmJUTEpgr0FTU4TgBNTRmYbQ6kiZ/UsdcG7iTX8GvFGXVmjDwqsJck4mPS3F1RluK468k5pOQYgMJUVMLNu6L5jKVqrYBWbcQcTZoP/DfZ3+D6z+B9eeI1Cfx/XyI0b8eYRuU+I6lmNYmtsiK07VdcSwc+pn2qLHFs5FsZdZGwtHI1j9WwWVMqYm4rtvu7Deaq2tEQlovpZbgNfk24YocpBVAogEA/G59w/X0Mqo2IcV1BpMx6rP8AXV4jlOldK+NmWWKWzehvbLqcipK1NcbTulyva9Siysztpo+Ba3Kqr7sCkOuns/dz8nyP4/vNT+PsaGo37T4B+nHgbEP1oTX4fcTxUojsOJPtjkJFvbud1iLvdk7QovZRG8UZxauml+QO5a1lq0KFTyZjUnfG2IXptVtFiDYzskyjyv1+dTUImtn6hM3snxH1qrGq+Tjvj1UNkDGGPZkNdkA3Rse/jc+R3W9o9HFMVF3aRupwLQNTkONgCms8ST6E+7/SzctA3/Y/jxOO/wAHcx8ay5/iY9Q44/HPx1rA8D2jHyq+pPsda23b+hr1ABniEgTHavtWILKeya4/tRbezWZDlq01uhvKcSihSPpS5QhxP0ydVgr4t0BXcvGz8ctTluMST55MSR5hB15EO4fJs6dca8JESq2gPmW6WqvJuFld/Kdbx1YZCgWmwynirXgpAvNQgMrLLLa9z6g8H+eX4B8WRYdQ/ncr9nNr7yMqxIL7BPkbPjc8weRyWEoY59mPhuUr2JoGIIltcd+3Uba2uTzU/H5V6+gIU0EvD6oOKoG2dbJQ8QOMEp2BUQC7Lq0e3GED8ek5LOXIn64wKYU8CoGU2f8AtGlQbSqrjsMg5dLmVUc1z8psah1cRVbSLY7MjGtKtPWIVPD9kt2APJizxyB1LYPxs7g8QfVR4kOWWzW+2zRqbmgxbIMMmfDBi4dfIYlUGOgllHud8mPlmhEQOGtrDE1hsc1cTiqObclZU+RXXWKha3sG5OBshROPGC3iyKWbxz3HfY4sx8AtZ5AMIh8Q+YFnGaH4I3OE7VZNtnbpyM4319Kt3e+Oplo7M6xmY7hjp91MQS632jktntTrl3GE0tku8TwSymDTRvs72VLj4B7K4s7FcGPXs1CdkS1NDme5X+pKkGuIn8TUK/jUZC0fiiP5JPGFp/WtbJsGqvRGKxZ7SwyKWjrXar1ukRStU149tJUJR5HY4MW9mHJWq83UshSs7K6jRR51PWa8gfk/dPUOFrZKvYcU2PTQwsIAl27cTNQq2q7FCpusstl/6qnesd/LD2VdxgIzJyP2v7m+128q1UCuyFmhNTU0JmoQo8yj0QH3GzAJr8H6348fi30TIs7n4Jh8x+4Ex9ctKlON6M9jtkp9b9ydz2NI8EHxXYY9oLJ9VuTLOatyJgJMya3avzGXcUfjRMAXexs75RtQsZmDYw7Aa8KoVK6L28fq+MZ1jqPZx2stsTysRACieLe41ntNPWKn5oW0WO46vyYaixKu5K0CzMPvR7jiBAJxmh+MoBgmw6KxlK+Qs1CDNRiFNY8aH4zGUV2JXtvsH9MeQxaYRLJlMa7McmcFWwE9zXtK2O98o0JIAILC0CUWKZZd5L2CV2kxf+NwFgnIfhfv6J3NKRsTYnmJ3MiurHqZMAaqfqN9eR1O178h0d0C6DjQZ2RqlTXe8F1eIsCDS6MaLQHsC4QgwawwGgBMv/n6c+5ubE1OJhpJnx4uOgnAar9ciEGcYSJlH2QrqchM5laHGvaJh3avXtjn7dxpiWPXb1Otbciqg6rHclygWhRAsyKyDik8SPB+1X2VTrjxV11BuceMa1tc/B+gNfjYE5Q+RsfhjqeddTSvF6UMkb6zffVLMi5379pi3WArkssGWpFl9ZCWrOIEXFusPxbawJsA+Sa1JARgaVedpoUcH4/I9Oq4AVuVFR2ABNichOUJhMf/APY3DPcD9SZD/qV7AbZLJ5I8oqM1+QNXrfY/ZaW4TNKMN6VYebE7aOy0y9g5xCli8Jm1nhiLyrdNR6tRgUlGwNNFCgrxZXTlT2zO157R0KmE7LTstO0TDVqdudozs+ezM3p+Pm4WV/jTAN/jmSXu6LYhbpWQIcDKE+PYIKDDjbi4tgZcflKFtrnNtaDMEq2Ernr+Nzc2fyRAuppYNfn6hsQQ2tyDWT9TfGwjg0OOhgpUTtTtTtTtwouyiiJ6wPye3zUzHv3WbmW4ZQfTo9df4yNmrp/3b5i6Q7RjtYpXYHnflvrRgXYm/K7nifyTOcFimG4aFsbrHtV1AmLnJHyMa2GrAefBVp/ri0bpgh6f7f65t/68iN00z4yh/ijfxUnxfPxzyNMarUFeoVmjCPxqcfwfvx+CkKCBYVnjlYV2e1z7djEY8VdRgOKaI7YEZK9cRLe9y7eQtdbi+u81oBWHVRpel7GPsRtEYKlZkORC5i2tP1DBy3URsj25ahsm2M8zmRGs8h5y3AZ4355OFK1lTGbybRGZGa3jxAiWskGUS3y35/Lr0MuDKM+S7TlbGNgNjOYrcWLzkBN1zlXP04wTWpoCNP5M3+W5TnZzL2KLMljChsNOMeVePWs46YeDxG+IUqFhnHZK7nGPxWWBFtuocjGUGtxxbALfGOydOa8McqrNtO344ARLP15/YNCf0jyYMDy9o3svneiQQwhcgrszR0rMGcLCzzlbOVkaxp3n0bjGIed2C0Tkm0evTmucq4Hrn3CPULBsTW4RZDyi/RSaAh3yMP51PE+5pJ2lBux7WNbsrDJpndDQ6actEkzluE7mx+C25kULdX8GtExBbe70c4OXLpI5Y/Ebrs5ZYfjbw0ebkibIfxOJIpWeVgr8mkxUVSUhQAiceQ4JOCwKY1QM4kn+f54mcG35ELNAWIX8HxPG9/jepyWCA6inY3PE1DzWK02sH2xnOHZh5Qb/AAYdEI5A/iX41VjaZFDNFLTuPsspclYHaBmgYwGa84qkjjM1OGZ0hgrZ1q004ldddKpVvRY9pAbEBi/86/uX2iJ4/G/O2MMEZgINgA6mtQT12VM0NzztvpSVm/x/B3Dz0Nzc+/xr8eIIRGXg3IwQ6hHj6A0Zx3BuaP48w7m/JMdm0HmwQDqOpZvO3r5TsQK5l9WSIxsxwHcxL0MD8ozkBzYZnDUxWIvydXWLapWrgx5acbM/jGc94cWipFUJNzztuM5rvxGE8T1M1o+fwGM5RuUUHR+vEb1gc68kedQjxwJnBSERVniczOREbzEBn6m13rcGtDzOP49jGDb+oZ5Ijo5gVpwnHjGQMOLcdsDz87gnHcKeeBlitLVcl8ZTGouRa8h0C5HMZjBqcduMxl1HQFuyY6hjt1nd02I7hFLGWWEBbY1ilUZJ4hIDcjqu4tDZyRCIvgKZyn1CRGpMSsxajOB32LOS02bNNvEBu4VYTiNtXHrENYgA0RqGfwD+AZ9zXkLqanHwPoDU34biAIGMPLSMonIGE+PGrA5ZQ80YAZ/JIn8HuRlE4GfrrDXf3DVkS3FlioteIDDz5IwB7qxbQWJG8x1SmjJRK6ybRx5GuqVVoHtLcvaA7LbhHnfGG9CeSzuid7YazbbGg1Lzs0a7dU7aQVmMNQDaHt7sCQ64u4EVQ7tjsxWsQUAKUG7KKmD4w4mllIpEWpd9lQGoEVVjpxlrBZ3yZjOLCyeGqG9VwLsdkxq9Mp2G+gq6Ktvi2uB0RNDlpZx8keGTz2js1wpDVuHGBi43F3DbVPaynYC21rb8ucrGdXYWU3R8jUozW71+Qa6mzneJkjnW3g6Dhk4bVoRsabXDhNmFmWOLBP1FhyreSZFgYZLSrLnyhDmcm+UA7ZVUvtpMVqzLKqyi0MtJpvsnx7mjV3GV12CKjtLV4xW8PyVV3yyqn2BqGkkdpSPjr26scIpRw2+RSkPDjuk7T8ez7PjAwYq8Th6rqR1nbRwKE4fBWfCPL4y82wp8JtnGtllNnKyhkIx3MekzsGWUPOFomn0qMZ2WMso8DHUG/AQmrpw5WYPIt0z1HT3Qph2ayKTK+6JyuDG1wKchhFzFE71bTuVid1YxBDuQqUDhdhh0XEs43YorWnH9LEKHttzfFGrannaZ1aphBUQfqJsRWs1yujWWSxrd87I9lkay3QuteDIKlrixN7grkEz5Hhb9myxGHNIbmSLlyzK2q38ibWheyLa3BL3Ba+wk5T8a8gyvME+WpKWnmMu0lc4BbMtCoyKuPfqMZ6GZTTys+KZWmLxb4yvyx96x9BadcKp262laUa7aidtJbi45jYdXbfCv4NiZagrchtxxv4aPH6dduzDvQfqBVe0FMlxLchtaCNVapmiVX2hBjK7x15BFbYrBYKunrO3rLF6lWW0gsF4vUm3NMegmWUWRap29EVGdtyV5acvBZxZlJgQ9vg4h8BT4Ybg3OVZchwF7hNIbTBlbj4FZ2a5XVxKan1CSYDCDNe4sXhzHELsGkGK3kG0qVsE2YWE5QMYCdAx28QE7DusGRaJ32iZU7mNrhjGdigl8INLMA8r8ARsbGlqAxKhEBWIyzcZVn036YPJNBk3xVgyQ1OXaptGl2nx9Ds84aDOy4SpWKrTuWVaQ4+41REXal0O9ExFsgV+2Md2NeP7/AAhv4uocNImKhBxgJRUvcsSsscfxZSeTUkyyoqvHU4blg4zY06+P7kMsQv3NttKeddmItcHMXc4zT0M9NWBSFRYavH8lBvU7ZKcLAzqwm/HLibCzRbXRa77Fny3WfOsIbMsj2IYSgZjqbTWwFDAwmWJziVhE4ieJ/P8AJ5Qc43gBR+AfHiMEVdAzhGqWdhDDj+TSixVG+KwlQKyCPUz+PWBUK8RtaVVrKkMFQWGsRKxtqQScdNtQsuwuRTArC3Ybg04VgdqfZ8RouL5qx+DoocWYoY1YFqFMUOhx63luMhBwxwXC1Y2ITDhAPbhKwtwF7teJyl+ERHxbQDWdbBCLLBucTGExbRTZeA2WSrRUt3ch06eiqTLU3KxoQEmcvHKEnXOERjo1ly1g5L7ouzrKe5ImWchrMyyq6m4244ZzOQ2x1LLSK6rTvlxbQIX1O/cQ/gxWO/48b8M2vPvDORAWDg9ngLyjqlilBBWFD8N9yvXfEGSGPdVYMmrmxBDPpGcFE4y7nxM+Rcr12MbIF2bAK3sx6ngw61Awv00wuMvwmAbBfl8ezka+MA3Fn8/w3rE2JoleJ5HYJfVpLmOjmtCSuhrUA4rrc4+LGXXCmo8a7KuYrCupG9tHqFkFSQj2dwsdxFO0Phix0hYMfrfsGBDEGCKTtH2Wcw7ChvDuAe7uLYrkSh3J5tsHlOC9yyoPSuMssrMfHa2VVcFtrDVUVwV8X8cWHlRuW0WLaLSro6CPdQZXol6E5lG2oO1IsVjqcp//xAAoEQACAQQCAQQBBQEAAAAAAAAAARECEBIhIDEDEzBBUUAiMkJQYXH/2gAIAQMBAT8BpeoQ6IUv+6bg/wCezHCLf4NJMqa6X4kEe1H5NTg8jm65K88In/pA0l7EEEcYII/pW4tW/g37PxabIYhdWxd4II/pYtv2JMtlTlmWvZiyuuD0oGOv+odQtCYtjVk7MQ0dm1+GrLo/4JYr+oxEjES2NWiSBX6G0QjHi/eg6KpfY4+P6aBK8jZWpFSx9FOiqrZTWpGSKz2PT4LgxWavJNoG4P8ASf6GBuDITtA9IyKUR8E9xboT0LSln+lNJJF2pKuE8GuKGrvY4PjQ/wA2SSl/ZnvQnJ5CtSkU0w9WmBMj5KarUpJCGUjQ0kZCdmK3k6uhivNvgdkhido2NIUMdP5SX2dFQ5TE5cihaKtFOuh/qOyllWtlFbMkJlFUVGxLV/i1ZBT/AKLb4PY7PV4Iv8HZEDYrQM7E0iR2Y1H4EWkmENiRVBKHtiZXopZXVJIuiUxtEk6FbvZTuk3BDtJJVozKahVwZHZFvJF4u2J3m0XaO0VKGY2/7ZL7K/vlPJnV09Wq0PomTor7JhFFRMDUsVkioTjiikVquiRIqaR+5kQJbHTZDYzy2i1VQ6/o3ApFPyPm1I6btW6JEPs+B9GOpOyk+SLyhMqq3ZrVqlOiJWhjq4KlmWzu77PnkmU1EaEK6hWaNlIhklbtJW9HYoRkyljVkhWXCTK1UM6Q9WpHsmSgqqhCdmOtQUqUNMUtj0yjeyp7MtCqM5KGRLKoIu3N3d8o0hShuabIY2rriiu9QqRIRCt0SMm7OxKBjrJMvoh3xk+RHk6OmVM+B9aFb+RXJS9Wp6GLopZkoKrvg+/ZcxopKRqBC2NCOyIHpCIMXatbu3sVSEzJopq+B3qHbLjFmTeYtT9FRXTBQyvopUlDKeh/uKqpKFLPIv1FPQ7Pom3xzj2PG9nTKaSrezybKVA9lIiZZUKoStUmtjGSdmJpEoWh2kY7QJC0Ips0PRM8UaqKlKKDs8aSMf1QNwhOGVOSlwPbM3xfuTBIhU/YipfJJ/EqcFDtTvoqeyIGMpTZJXV8HzarSOhNigSQ6SIEPQhkjEh07J0K9VKY+xrjRMlQiSTLY2fIyT55Md1xYrMiyqFWiU+rfxIIKXCKXqRMdqqpZMIfkQ3NmNSOCBQKzNjdsoJGIyRKQnN3TU2OmHabpiZl92yJG9kz+AzLY7TZnwK6FVJ/E7NlKlHZBUypaPHTLK6pdkhIYxRbohjZNm7QrQQYkHXCqT4sh2Q4918lZ2jixWRXq1LhCezs+CikpiSpxVoqrlFWldEjqGrq+uMEWQzuzklyNffN2d4srtlJVZ65OyMhEEW+bLZgNaKlBT0KyKao0eN7PIUlSlDduieKRAlZqyEJDs+jfdurL/SqqebRUotI+T5xaRiHydqFDGVDclDtMDdn
343+ +jZU5KZk8jacDJjmneTsdkZE30N3q6t0SPhPF3XOObFxYiRfq0YbkqphFB2NqRaGoqPN8IRS4ZVVLJJ4tWpRsdpJk0OokpsxsSs5KnaR3dkiIumPbvH4jFamR1PE8lUlHdo2V1Cr+yrdQjFQMi82pRocEkk3kki1MWkaJUH7hKCqDZ0ZXiyHx7F7y4spZJI+ilk4lbkp7u+xbY6dkQVuFAyCOGQ6iSSbwQdEyQKoyFZoppgY6CGhnRAhWizshEfhofd0MxIgq+yizeytFOmNjrUnkluB8Hd8YbIOrQQQIXeydGVnaru0lTE7pjHxYrK/V2x1MyZSzs1x+eKK18j6UiYzyfuK3oRV0NbK+ybzwdoIMbwQaFZCF1eSSq0DFZCUDXNWXF6IkVJiiOMM3wdkpKf9Kqf0iTVqm3UV9W/iLbK3L4Mnihk3i0XiRXWxiR0aGOy3ZWqHxV44VbvJkh1o9RHqHqHqMyYqrq0wNp7H0JzZ9lXRUeH6GlRLJvHFSzZ3dLjkjIbYtEjKR0ogqdodkrIWjsfFEwOozH5R+RmRkUsgeipkEcHZRZHZFpSHtFP2JzsaPgdJRqo83CbJWggj2JJvP0JikVmObtHVoGLZVx6E8iom8EFNu9D65NcKVHD5P4j0hEHwNi7PL0TeCLRd8I5wNCIgo0jJFVaRkdkjdoGhM6GK0EwMoKuiCDE0QUo18kor4pDV1sVn2MRQipSxDZ2VEiWVJVS4J4T7ejRq7py2OkQ20OqeED4RfI29mY3anoxb6H42RA2SbN2Q+uNC0O6E0YNjpaZiYoWirsT2eRFD0Pu3hejzVSrsqi8EDENEXghGiDRBVoq3eEQjEwYqWNcJJs2SMgmk9Wkfkx6KvIZHfJdXSRC+xLRKkbQqoMiiqkfkTFUrShVqRnj7O2KmDzeP+St4qvg8q0K0lVpsySSWSSSSSSS7Jj2OSX9D8h6iM0SjJDqRKKql8DqMiTIknnL5wQQavk0MghkWgxZToqWlAtQxnjUCoxt5erU9lamn2GQQRZEEGJqzEz1DIyG0zGg9M9IfjPTZ6bPSPSMTA9MwMSCCCPfl26s7dnQ5+DYojZ6i6Kn8iSWzyVbt5HeNcYu7RJFpEjQiUSjRpnqL6PUX0eqvofk/wzMzMdZmjMzMiWbG39E/4T/hJ+k0aIXKCCBR8mNBjR8D8dMH7WOqTsgi0Wi8Cpb6KVqHatPsXR5CSHEiWuEfp4TaUhMeyCTQyBUWX0SyaiWSzJmTJMryjRokm8EEXj2keo0N5EMzMyeORI6v8F5IFW5K64FU1atEEfoxF0VLer5agnhBBAyLxaSUIkk3+PPNOBEX9PV5JJJMhXqXxajorRSpZ5KtmRmybRqy5RZ+4n7qMSOEcI4zBKZF9MaIEiBQYSQdCZM28T+Cv9p4+mzZN0P9qtHsz+DBjxg2hSd8ZGRxTg0QSNzaLwQYkM3SzJfRVR9Hpv4PTqPHRVS9jUqDyVr9qslwqXRA7rhJIuMo2YmJiYMxMWQQQYjRPFMbnsmy5a4Q3x7IN8JNmTPUZmLyQeqz1GU1v5PgeyLKGYmOyqpySafOLNcG7aIRCIItBA7MSkwMTAxMEemYmJCMDEhEQMkWyLQJEcIIZDIvF4MboyPUZJkShQJoSgiTEdJiJEFSEyTIlDdm5JvBkzJmYqz1D1DMzQ6kyV8kIxfwQ2Y1EMhkDuiqkgxkxMdGJDsqTEgxHQYGAqYIIRgjBGCMEYDoMB0GDMSBoiyTItMm0ZSKRDdlbExGiGSSZE2xMBUlVAqR0mOx0DpYkx0mLVkJsljqY2yWSySWeoTI6hVGRkSrSSOoyMjIyZmx1MzYqzMVcirMmKsdRmZIlGh4iVI4P0kUkISRCYqaTEgdCMUYMwZiyGKTITkhDpIun7EDQ0NEEEGJiOkggVOpMSLYkEDR1x6skdMkQ1ZGzvhlokSkxJN2kl8JMmSxMyM2ZHqGVJFJgj0x+M9MwGJWVoI5RaCCCCBJkEaMR0nQ7JMxMBUmBgYGBgJDRiYmI6TEgizVmhWVOjGCBMd9CRgOkxMSOWTQq2eoeqeozv8AIggj2oIIIIIIIMTEdBgOgdAqTEgxQqDFDSY6TAwMTExHSYDoMSLJEEWWirvj2QL3XK6JbHIuDZv8mSbST7UDpMTAwMCqgwMCPcifej2J9vL2OyCB0kezPs//xAAvEQACAgEEAQQCAQMEAwEAAAAAAQIRIQMQEjFBBBMiUSBhMhRQcSMwQlIzQIGR/9oACAECAQE/AZvUUuUT5eV/etOLuzUkn0Xs2XsxvajH4xhKaU4yFFccsSr+8acOSYo8IX9llC/Fkd7/AA0pyvHQ+aFfn+7cXV7VwhS8ltKt3+FjR42vd7J8dU5oTvr+0tpdn9Tp/Y9SKVkdaM/4i/Nqh0sF1VCrkcnxpj/Nr8V+F+7PjdGnp8EZGq/s8p0ThLVyShIklFWiE4KfJo5xnC0ajnCNoetqS7Ia8nL5kp020aevKLyxa0V2S1VqUrKb287Pbzve72Yhfg9JpmnqTjJciPyz/Z21FWyOvCrRq6vHA9ZceKJ63wVkNWN46IJxuuifqFGPEeszlfZSKLckK07P6vVTNL10ZYnge3nZ/j1svzhqRl8hOUpYPT6SUbsV1n+x2rolq0S11GzU9Y28Dm5dEtSTXyI/xsUVLJ7OcDlxVDSRxKTZDT8k9P4WQTOIxxNLVcH2R1FJWvxrdiW0kLH46fbTIxnytEKlghHiv7A2lklqtGnJvA/mx/F5JSH3k04pypmrDycWacZfyiUuKvsem+xaf2Tj9E9Hk6gRjSXI1JciOmPB2SqrLVnpI1C/wvbvZ/7OhHjboi2N+5KmQXCNf+3KVGnLkS6Fbya2fjEjCTjUjWVHp0pRs03U2jVnyQ7bs9rk8jjKLon/ABoysCdZQ/VyeZE9ScnaPTa3iQ5Meo1LDPcm1TIriyVROxcWuzU4wgThnB6F/wCpuh72W9vA9l+GlrVhkNWUnZNz05cjS1+XY1W9f+rOfEnO8obclZpSq2Q4zh8iUVGFIlyksmm2yc+bqRBvSeR2nZNclSNON4NXRjWOx6DlI4JIencMGpE44Hp4s6ES5PwaM21TOV4OJJ18UfvbBp0pqQpqXW3W1lWVs2Lo72v8OLizSioqzUjLVRpwrDNCPFWxuzohLkr/APQnNQOSHKiMm20ceVkpJs0eQ4yvApNLI4ySo0G334JRNOCQ0iccChjohCSyyvo4O+TOColUVbNTXtVAecmlXZqK3gcR2huUSL5dHFoy2NvJ/wCR5FhnEo9IprPjZuihsQ3gi972reSsj/PJpO40yeu4ql2K0aafH47aut8qR6SWaZJV/sPG/POCE4sjqW6HJocG3Qm6ohciDcW7FdDzTNJYIrlI1tO8I4fZCa42PJRO/BT4pEYjVCPB4NeMm/0a8VF0jjUTg2sGnjBrp3kU/s/l0R+KJIQxOmNHveDTjzs9HabW1bSmOV9GRbP89KSeo5M55Pa5ZGvBoa0liQ9SKMTlYovo5yo0tWxajciM3yyS1PlgcmnknJpnu3Gz3W2c3aOSyipVY4kIsj/E5XNiWaISppnLNs+V2jTi54Ip8cnDyUTklgccYNPKHs8s6YnYu8D21mlA48oktBKJKHFWiE6NSfuZF0JPwR1LVnckibVlWTiQuQ+iLPTy5Rsss1H8TvtiwWxPfwL8LIT42ODbtn8T+XRFuBKbnIS5o7eCTSI4IOjVqyC5SJwXY/2aVt0R0W2auJUQnCqOKjEjU4/s1ZOLUUaWY0ySrUSJ6S7Fo8TWg1k5/ChRlzso5/Ki8CVMcSA9sslgX4ayuJqclg9xt0TdHCsnFlcXkcYpGkrVGp8Vg7P+WBqmKHt5JSbYnTs9LpyUrK2mmKJERjbosf4SIq5FusEFatkdC8k2ukQ05x+Ryg1dmVZwItdDJNeDRS5IcbIR7ZyfLkX8sjW0JfB2aXC8E43OzpGv/LkhVI428mtDDFCXLJC6E2eSfQkP8KPI/wAGzVkudHFJ8ma0byj+RfGOBJyQlXZoVVkvkcsKI2uySfYpfAlp2uROLZ6POlskSn8hTTwRZyoTHvLse3Lbg4/I96kTdRwPXbwRVo0rm+8GiotcWNUqLJR2cU8kbUrNLV5Kn2akHTo0pfLJJqJqRSJYmRxp0yEKeDWlwhg0J/A1cM0m1KjyPslFEbGyiWFtbsoQsflZqPA5ebFmPYsOxeY0c1fQqrBqKKp/ZHEG0S+PQsR5CtywLT8nxUcktSTZ6fVhN+3JEYKGIjHIpSOJhFpiHtZ5JCKKNVcka8VGC+zWa8CNNxSyaff2yMc2i8jqyRRFmYXRpyrURqU40NcKNebkS1E9LkRXPI4ckQhRqx5//CMeKPZUsijR0djK2vBytHgR2IrOyytro5YEa8pTeDjy7eSPODrab+KFHkRicbWSWpT/AEiK5vJOSl10J0zRhzNZJqzUweg0E/8AUPO0sIQpMjQkihiHgTyMsbFk09RSRqx+eSdJYKtCNFzj0aZWR/yJSxsiRDuim45JQvIo4HB1RpJt8SCxREvIyP5v6Kz+LJfQhsYkPoWk4uz+mZw4YkSTujUddlWrIP7ZKNGpb8EU+kLrJVs0NL2o0a0s0P02oz02j7So7HhElY6FESW72b25UYJIQ9F+CXPUdEtPjhlKrOkQ1ocUQ+S5FkXZLoUcFHGxQp2R6ye2qwRgjgRjkzshkd3+CKKENilke1nZL+R0t0a6wR1K7NSNuzi30h/TM8US/wDHZBXIWm8yZpS4zsnOlgjppJWeSK2ZLojQ9qLLENjKWzEieq6ryKbVl8mLsoaXI5WsDwjKVEc4Oi8Fik7zukOhd79MYhO9nuhbLZkdpYGxYP2fofY0dEsonpfEcKjggvBOJ/HTRKVaWRSUYuj0sfe0qmQ9KtOXNsird7MRZysaFst62Y9qHE/wTpozJjdUh/oXyeSHt/RFw6RfkR0zveDbETL2oTF1smN0Q6H2Mbos8HaHs3jaA54OysjEeSTonr/Q/V6iNP1X/cm7jaLXEc/olJyXL/8ATWXwVDUtTT/ZOP8ApPiegllo14SlPPRLUlo6iroc/ouyM6WTlf4ooSMjQxFbPbnykkNRj8TUpSwdRs7ySrCiaOmtNZ7Kzg4u6JnaxvGdEZtjEx7UIvIiR4FsxO0IQ3glLBQkPAkJbPZs1dS8I1HQotYPbtGk3p4fRp9cWT0SCccM1VhJGg3zPbWpcUaejHT6JC04zqTJOI9on+RD2T35F2MW3I7OIlZykim2e4oqhmiqn1Z+jjxwXSJCd5JI6ErKr8GzxYvsXd7NZKEUSRWB9bMrd/lqdChTJRuQ4rsvgaHHUdMWlU+RqyadEdZ8qaJx5fE0XUD00e5DyTnyMoedmIuhSsaGyK8mR7XtaHMcyGdtNWacaeSc1FWjU/nkjD/sjRqMLQn5LJrJRGVSpknY+hSyXaFtyobtifxPBRZ5/BoY0L/Ze0kKJwNWL40j2nOrNLQSlyJPNF/JohpVK2Sk4ytdi1mnchakYxuyM3Mao/zu87N32aS2dWWOQ5nMbORz306GiOjLnkz4KnKVIei4fJmprOZp85uoiuOBrihzZhlPyWh2IhteSRVDZHZb9/70yLo5bN0cnIpo0brJJfIZfIcLlZxTfyJJRdEJ2/0T2X4NUe5SPcs5HMssvbs6LEQmkz3bPcOSHqpGr6nnGttL1ij2iOpGT7G7wdI4UhSxQ0cntBVIkRE7IlCx/uIe97Il2XvLPQ4KjgvJBj5WOLNN/Jo012OObJRSIQjBku6LGWSQ2PZdbssra6Hk4lMoQ54wSt9kY8icYohV5FODdsio0uOynmibYl9ElaL8M8kHaySyeTwIe0X/ALE9RRR7kpHKX2ac7w91+GL2seNq+yV3RGVPI5WWacPjYnnbUTLdkpbcdsjGYL3o41+V7JHuoeo+yOpascnZKij0uo00iDtHHySzgjXR0WPPRCfhnY9q3X5vCOP2R00zhE9v8siFtIvZxfZFW2cWlQ+iCaiLvarRWSV3na9myxnRZaLLLZkpnHeyxM8E7ZyKZGSvI5Hp9P3XYmnkbG0uhyzZztDE8l2R+x7+Nl+cslUfs5JCnE91HvHvHutnus9xi1MboRgsWGcjtbSlxVjny6NJ0LGSUh7WPL/BMyKIyxIyiyyyzkc9qTwOH2ONdbRVnpdGadiyjI8EIds44JdFWK4uxbJ7ouh6p7p7jPcZzOZGRWCfxJSL3ssZYmkXYihLZtEXkl9beCSuIuUHZFpk9mY28khbYQpDYns2XtY3+HD6OBVLI3bwdEe8I0nikO4lseUR+LLJr6F0Rkf42QxF0N8mWWWWWWaUvAyfywNY2svfHkb2jkhGtq2VeDqQnbseRpUP9FYojgmvP4se/kVIssb2syyivwgPKL+xtJn9JL+SNDRcpfLoUYx6Oy/ob+xNGDDJKhQsSoVCGOdDdmmibr8tPA+slpGq8De9kVZPsvbTTvAm/rbzsiWMkVgkWchvaUvidb0SiOxYLGI7GdF7qi9qKJUicpxfyOas9iMockelgoRItI5CdiVkm+jh9FUNlik09uQ3JktWVbWafRqQbY9OQ4tFlnI9weo2KRK3Cyy0Xtor4tsnd7cWaUWsi1YobsSKOKGhPA3ZOVIh0Ms03yVE48XW9jLsTssuxYEtnvX40aUZSkx6T6aPS6UX2iOnFLBwicUPTs9tigyUXs9SMTnGQooRY2WSkqLRyge7FEtVIlrI91Epb2y9ote272r9lL/sVH/sacPj2SaTLRHUo5WQlE5Jikjkhzij3ot0hvBpvkxw5M0ouOGat2cj0+pmj1K8lnIi7JFovZSOR7hzPcR7h7iPcR7h7p7h7iPdFr5tD9XQvWoXrIi9TBnvwPcRzOdHuI9xIm4yK/Ym10zlL7OUvs5PZlljkzmLUZbYl+xpnHahQkxaf7OEfsqB8THhC15Loeo32chM5ltlsyRdGpXFURw0yRopx7I3yEeqb20sTR6n+AjLEtnuxb2WKDZwYtM9uJ7YtM9tHCZVbUXI9ySPeYtdn9Qe9Z7p7h7h7hzOZys5HKy2Wyy97ZkX0PazkWci/wBEbFGV1RJKBy/Q7kKFEkixp38T5FtR+WBTg2TdUyVt4P4MR6r+RxZFUzV+UCMShmBvGzssaQoDge2jicSq25Fosf7LgXAcoikjkjDKEcWUzJyMHxMb19CTKZTMmS9r/CyPHyVAUdNuhaEa6HUGS1ZPoblLsSREyPvajlRyHI01OT+JG+NS7IyNVNOyLwepa5FnG1ZdoSos7JL4bXskKhVR/wDS6HRZaKKK2TbwihbYOJQkzhW1GRispl/osb2UmJo/wWXtSH+cb7I+tku0P1OnqLOCXdopnKjkyy7KOJwxgo5x/wCpH1HFYRHXk3bNWah/EhquxZR6v+SM9slB8EkSm1FDdlIZ43aLFJbUvI9qdmRZOTOSItDnteyaLS3b3rfLHaEjAxijgriVGSOO1mTO9FDIzonT62ZHVcSk8kkURizjNnBp5HDicKeRy+jJ/km6wZfRoP4I9XC0maelcsk7nPs4OXkcJJDs6wONRTe1bdii9pZKKONnMljoqs/lZ2Vve172hTG7GzkdlCVlFlikvJxLaLOW6KscdkkzjtZaHQpfQtVo5qyGvGj2ueUxaOSWm0NyE7ZDVaNCdmqrg7NNcU2LrKMWeRT+jman8EZRYpllPwZOTR7jExtj6wUyvsSyV9FFFbeS8lMVDp7pisl+ziKRgohFDRyZdjR+ijKLHQ1szoUkizFnRGbRyVmGUPBx8lstkXZbFNw7FrxkNIlop9HstGgmpE1aNbU8I9xjmJ7cUay6Q68HDJwd2jspNJjR0XbJadE1WBJLopeDychv6ORzVF0ORyORzRyTGJWNmBf5JOzwNnJCFJocmz/BlmUNotHLd7N7ccDRx35LyjHjaxbdFi1Z/Z/Uz85Pd0/MRa8V0hepkuha7k+iE3eTU6PjVjXkplYEjQi5ais1Fc7YlXRKeaLY00NZMdFIUeXReKP5dj0ZLJTHFj5HYhMZHIztF4L25NCdiH2cjls8l0cyyy2i2zkNkSrHpko0VYxOhSOTLMHR2VQyzsSGKRYpHM5o5MU2mLVHr2qOaPdfQpo/05dijokIxgrHG0T0rdi0T2voejKTyOB7NK0JcWKT8HJ+dlPIpjny/keBJPoi4tlJjSSIpEo0cBQY4WcTgxQoz4JT8HgtDkmckckf4LplZGh4EOJdEZUc2jlZaY8DeBYRaYpUczkc8DkdsS+zwcX4G2KTXZa7FJPJcWUc6FJnIWomXEuI3RzFOh6zI+oklRP1DZH1HFUf1bs/q7P6pC1c9kuDFGLyLTTZPR+j+nZ7c0ODOJHBGNnIUrPj5OZJ5wJ4FLBeRT5DaRzyX4OyI0cTihRVlIVGBlJYH1RRwHDBkWmziOJwwe2PSwLTOBwwe2cRwON4Irjgfe1UU0sHF9iXxyMspkcbUUzg2cWUzySsr7LHKVnN3YpR8iemfGsMjOXhi9Q1hi9XpoXqNNlwKg/JLRjeBaI/tHL6FcmQkNros8D+y/A2hJvO0UXQ5Wy7Ofgcs0OVrblksQ2rLPBz8DaF0YrZyRaeBfssbRzxRG3tyJSpn8mKIlZJYMFjGySFJLByQqFKy4iyI/wddl2UdngQ4opeCkMdngoasqkQbSwxymkLGB5ZG1kTVn/I/Y55GYLViaY45wVITvbJRwsoksEUhujl5IzOX0Sn42jMUqVCyWNPkcjlyR2SuhF5HgchsTLFqOzJL4ili2KmJxQ+iviJeRzQmmOOSuPQtSzk/ApF1ghPA5NdHJnMUxpUWULLLycDoTFta6HRJpJDrimLGTlHwWVZKPxEvsaV4KOxp+CKZOorIopo5JYRH7MVkaQ0nSPb+x6VdHFnF9k4oUSMUcskZJdlR8DiYRxTViXyFHLJRyJHFC43RwyPTOFIp+Cvs5DlmkL7OV4YrXQ5ZoSzkTocnIlFkVZ0zKySdlj5idZG8GWsC62X0OchSORyXRyIzrJKV5Lzgq+yUei/+I8yyPTWaEhvwSZztHJknjBFjiS6wJX2T/Rxoj8TimOKPb8mo2kfJ1JHInKXgvAsOh/BnEyuzHK0J4ZI7Gznk5NrbyOJlDeBypW0RZxUisUOb6G7icV4OOCsiS2t9bckmakLH1Y5YyQaIN0S/kLkN/IV3krkS0Zxdjk0OdM9476EzwJ2ONDsj0cbY39nLiJ54scbXI45H8RdmThgbTdHWdnjAir25JPBz5dmpNil8UkcvkONZKtkUryf8qZIk02UsMcUsDRG1knpuKMFqycl5OVidkZjnkbwRlgdWPUz0c80z9C7Mt52vNDi4lWPORdDbSIpcbFG0OC05P6KMEpSXQ1aOdNJmnNHuQHlkkvJLTRFf8SK5LAousnNn//EAD0QAAEDAwIEBAQDBwQCAgMAAAEAAhESITEDQRAiUWETMnGBBEKRoSAjMxRSYrHB0fAwUHLhQPEkgkNTov/aAAgBAQAGPwInQ0GvGwolE+GWMEjGf961fF1I5cA83snag1vHn5qYXftwuunC/CIhYRQ3/BqO+Gmnt1Vf7RS52zh5VOoZec3/AN40KngfmX9IKZoUGjzS19nDZGBA7qI+vG4XbgBw3VKssTx/Oc2ok2Qd4LWzsVztAH+7DRc9ocRNzw1W6g0maulq0gTzEQhp676mt8oP98q+FMq6iBx6qV2UK8qEOLTq7kuiMXQ584hRX9kD1/2i5Vjw5YP+g/RmHNMLwjqjCc9sgMB0xZE6eqBrBojqjqPaAd49FJMu7rfhcwuvDCwrYUKFCz+BpzquEX/uvzACPXCeatMSZIFySvEooE2n/ZpKNF3IvMuPVOdEU9lzOBnsuynmCDaDdQXQULn2XlgzuUeoWq34dmqXjlsLyn/E6jdQDMum56ok5zYpxMyrFfyR67cBxuOESr8LrC7FdBxoax+hSM9Vqfnu1KRdoz/mU74jWJl253VLflt/s0FAaYZ
344+ UTdeDTci6paDy4JTHz1IHVFj4dVMdkGDlDTHqmDU1QI2UTpFs5LkaXY3BQEhUzcBVNbphrjNskozcHZQPh3afdrinanw2r4gA8scyjCi6ldOF1ZqzxiVEKwRqVxPqsLEcHabnHww20YWlpOlxLuRsbkDKjSc7QAhrj0ynVuc4udMuz/sN+Eb59l/CiYvsE6mBawQnmi9tlVVX/TsqMyLXunMzOE7xByRPW6rLSG01ZyVa1N4PRGewmnFkXS1zcWXh60kjdObQGgiagdwiw6YkYnZWG0KmGT6J4o3Ra7T/AON4+6OnqtI6LGAu6kqyuPQK6mUCrBHha3DsrkBZlaeo1jSbh1rgeyZ4h02Os1sprCQNPfrHSfVDxTVfl/8ANk8C44Cmeb0QAm1z6IF7OReNzRFkaWiBzeb7qSRHopAg7XRjzHKDQ11ZE+qqc1ocy/pZM0td93/NiP8AtPGi6dNgz9lp6Qnb3VDBfYkpzNR51JdU4Hqq/ig5zG+RvX/JTzpioF3LZAsdB690dSJ6ohojuiGiXYsmsNPdw5lekOi10xj2arIZvwlEqqVhbEngeOFJ4dlnhpg/Eu0oIa9oMx3Rh2vqt9f87ollLmG4gz6eiHiOLqR/5MqSUyry5KLjYgSmubJnaFph48o+pWrItVPq1RpkmRYlVNtt5kNKRQTLb4Wg8vIaOVzk8N3mJN/8/si256lYce4Xj+HqCTFhYpr3utYNMfzlDVgA10OtaF+aW+GcojQmggB0n/Oih2mxzQfMUH6LLHMbd1AaKqTMD/OipHha2jFTGuErS1dPTax+XgJ1RgKmnaOi5wC52G3RJ+Gc+oxZ2E/k1q2WpDYhUamk9ojJGU17b0vva6hRHDNuGLqdlni4jj24QF42gbuMFpOUGP0y0kTXt6Jnw+g5w1PmR8ZjiBaW/VeUt7FQD/4zWDd0FeG0828KjUIDZt6J1UxTBlef5II77KdO8Mqj90Jr3/vgqll7S6padi5syGm4TdTRfJN4cuTz6e5Geyc0QWxuJCrdMjztOV4gLmyZNXQo1/puEKTzEbFF8gH/AI4RGq0lp8wk3jdFrnzE7Zuq4FO5jCogBTt0RPh8vVAczQwQUC0w9xqI6qvmJ74TJuB0XjEjxPEMRtfCc1jp1Jk7yqtWT6oNruFq6elBOoIMmmU7T1Glrm5C7q6pCgqFT3UkIyowtuFvMrlSpai2pupzjem2yOnqFrRTBc01WU+K7VB2DITdXS1HBrnHPT+yr1tR7ZyMKAqttynNFo/1C5xiEHDfiCJ8yeXOFM2R8EkvcOVBz3QXRFu6DxLA93zHCaXP8Rr3ThC7iZ2OEARVe0pxbLnMbYdVW8h3LfpK/KuzU53AIQXZ32RjY9ZUZ6ShJcNSfluiPEhvllBgLxTjoVzOrrzKbpsAtgo9+qoAR8RtT9hkLw5OmP5f5ZeDXBgn1gSLJrfmOTCb5T1lZ9pTwGNg8roVD6XNnkJQbAMKwbsFpsaW8tnKwEOdZQCfZRPMLQqTdO0iyNZkfmWv2XVdkYhEzJXdY4QrK6mLcbcK2TpnxAGua4Y9uyr07sIH3/woarx+UG22koaeo1rNo2hQTyeV3/S/MInsntu0YIIz6fZMc2wd5zmeia9osR+Eua6wVuDIOSmbEqubYQb4kXyhL3Uz90XGKZ+y1GNJdeZheJmr7oCo5Bp62QwGgymcrQ0CqIQBEAkGYtZPbyQwchb0ToaGzfzIBvunl4FR8pRpDmOq807KlzxFAMxhOPzQpkpr3PpIdmJWpqAWuQFsoPVCeitwN4duvEf8u25VDtMvYWx6J3iMc0mwluU4g1APlt9lGmzm3k3TvCcA+PLCPjB0AU826y8g90IZe4uopDabnuVap3qjOLTZRMJrmFlW0rTbDQ974wtDVZT4lw8dMKTss24eaVLyFOJUYhciCgKJupqt+DQ+GY/TY4CXST0g290w+K3VbLa6nCwQnQc1hgBwsFqk87XOlrSMiyYH6jGsj/LrxGvkbwpIDm1yCTMjsjqAQH5A2XhabCBGZTAHBw8MgGqxK8RuHXTSDjmVc6lhek0pwbM99wqjt9kzQHmiE01O5THqogy3v/VN0wKKxMl9lEyfLBTNuaOqaRZodDuq1KpdeBf6LRi8u5/VN1OUdqlqNMfvae26GnoP8rPN1TWuc4ajMyPME14h7HiPZEtHLtfCLdioTXiIndCtoAjEWkhEudP9eF1PVWyoLl34i4HqifDlrhaCmu7wpe8chAEnLl+bJkfu2XhlgsYDkaPlF2kL81oM2cnNaJ03C3ZapjGoYU6lnbqabK57ppNFFWI3XKcDByjBbBHMvC5cT34irCAayypLYVp9UY+yjqgVMwuX0VyoCvwYHfDjUaG3dVFukLk0gWvk29fVMA1JIJpINN+l0zFRNp6JrH6Dh4cuLR/JPljm6T2ht8qIqcByc0ghUOFLh3VZfQxvljJTYZGoTtgpwDqIEC+ULieicWmHGyLT1zG6bSNsprth9kHN8xN4TX1c9yjqDzNaHRGeqP8AEU5jnRpvbMVYT9bX5hMNLtkNTScdvVajxYkZOD3VNc8vzYwnQQ2Meiex7cNyFUKaXaOXDJiydpGlxbZocfL1j7IIPDr7iMLzQEXE83miETGykXhWyvRQb/0XMrcOilHBkLSJpHnhEyRfPRO06ZJfLk3Te0mnEKp5Deko6ui9gcoLQ0CbdU2A4WvJRcSaKi4DurkFxgRPUpzn3gpwZaB0R0XNF30kLne8kuk3VOg4W5v7J2i506rHL1UxZT4YBUNA9lN2k9ln8E8ZJVlzXVbdSJAAJ7qrV1NSLHHX09kPh9F7Q145bJga1usZ89J6Kp2lGpIhhcb+v0+yOgHVudvWI9O/ont8HULNMRNJgBMMiIt6pw8o2ug8ahIFjnomhlXZc97S0npv/RanlplAh1+srSY2q9iPsnaR1GDm3bmyaQbVxm2AgHNpEB1Nle4bklaY0wItcj+6nU8gcWXyE5kvxA7KKR4mIIR0nM+Q+ipcCwd02h47wmGXdM7KNOagDYBTUS6N1aR6otaNuNMhGSUEB91iTw6ozwwoTXgtbFjBunaFYmndeHqNpkwSUKo8SfKDdeHqRS1s4gG6FMC8AZB9EG6XzbpjKi2TCpbNPdP+KNfh6bIH8XVMDhDyPoVD3VVGSQiQcgeyGhLSU5hLT1Ty+BXDh6IcAJ+iqMT0UyQenRTJsquFhHAwFZqwhK7FavwrSJoIq/iC1XkQKLtYcWRrLvF09Qlj8z1/l905zm1umcxBVDG11Nbzm1MLTo+H036hfahmf8/sjrMfqUzHN/nZNcbGPoq7OE9FDkAwc2Qm6fQyZ2Tg4+aJk2sqmN/KPRadceI7c9eqe7TeKtMA5k9/6fRPkw1ralEgADHsuZu04+yc5jJuMJ3iGXVIu1STAqt8yfHzXTnnzFnM6FV84PWbKpzgDu1AAYwrwQj1TqrwbIqBZEWXf0UBS4rorLMKx4dFlAU1GcL8vTgHYst1Rd4NEZ7pumZNUpnxVf5jmxHdNcdSdQCZphQ/BWq1zgXM3Wnow4Uec5jZU6hjQrhlvutP4RrCdJnO7+gT9V7Q0R0wixoM/KWqrTeHGASRsiQOctk7lN+P+H+IcQLWBaWp2prPL3RueAsiT5VN5UkrJI9VkqyuqZXRSVZvDCdcBxJaZwtd8OOkDLbzHb/OieXtoM3luO33QBH0tMJp0Ifpnzu3Tg93gaRsIPMeyjWbcW9FU10jBUmaUO2VdpQcDJBlaXiCBlzeyvIIdyhomUHU6ZDj8sQtYVGC2Baye2zjdr9rL9mN2tMkrw3OHMyKomCnRz9DhOn6uipfLGpzC+8KuebfZDTEi0EIzF8oznuUN0dlcXUKl3us2RMcI4CFAChAKUYsOHO0eX7IeG0nSfg5uhaHD/0jT1WqaQA3maPVXJIOyMAQvE0XEhwpf3TtU6lWrqEAtheI5pAZhHV1XF2s7MfyCIiqR9U3Gmx2G2EJ+lMsc4DIhSbdEfgWAUOAJtdeqjoqpbDVdDludlU0AKHGVEK/Cd11UG3DsoIU0uu3bYf4FqaWkY1Hx/O/2Wv4msSzDR72Tm+GKKOU/X/pUtJmmm59UNR+pQ7xAwibT1hTH5brD0CpAzhAEumZUjPqqQSYKveUG4AXieI2B1XIaTVlpsvDtNN5tJ9U2rzdVp6gJLmtiZz1QfUXXmDhOc20nZCZ6mVFTY+6tK7KO6uhhTP0RUwi4CFvK5iQouo6cLYVULdVbIRwB91QZEK/IM0gZK8f4c/nNyN/+00+aVqvGXOsqXWR8PTDgen9l4YHIwqjxP0xuvFP6bL4ViabKtjXQAjqPAaMADZO1aqoPJIi3X7LUqMjsMqoMLdNotPCVAuoj3K5c9SsT68cK6zbhMEKAogq8FPa9r7zbK8R0tvXTlw/yVOjpuazaR2TpOmNHNW//WydW99Gae/9Vqcj3SSQ6e6f8I7n1GdUAORyaC6HC2VUDgdUL/8ASDYB904B8MORsgwhhbvKDmlCpxtaSruqbHVDzduipOFzC6yZQJMHqrShwxdWUyiuqgk43VhZYUyvZEHKwgggFKpRj2QMGeiscp7WxSdzkIhtj6qLAtNMFfmG8IPY8tdlazhl0Sho0gT3ytWSKoikg3Wj8Np/NDDzdokdU/TDiIabtdGyhanhOIa4U+oVgu3AKzJQ2UkhSXQoGVJcjGFiFZyssrmAIVuDdV1b9LYgxB6pggGGHm62hDTbSxzQL95VT3RIEw7cA/8ASBmYJaR/JCvSOqXB1ib7wU/xdM+LJmU0co9UdTvhVtkndcsH3RnEqLI0r+JWvAULZXlRHuoaiDwARCwjSpUKPwD7ojifop22VlS1VduHdScbotc6YwQchTNuilwcQ+yqALnNIKZqNcBK1nU8rIrA+i0iLtZpy+BhaenTnVA82fZV/CPcx3zMcLL9nZo0k/qH+Sbc/mD7LcqxRBmVBV1bHC4WfwXCxwgwiiuZHSeZmLwj42q5tQqhP1W6moNHU06aa8d1qtcDqF3scc381qv+H0pc+HCrYqfGcTOakXarDp38xCp+duFa0bqAZ9kfNdRg7oSZ7qp3twcSjGymPoolABSOANgY2WTZGFuj3R7Ke67KMyo4QVO/ZSqjiFaeMqEBBnCHjazWCNroitzjNro/sY5wRyk+uE9muyk6eQVzVVVlaeiSC1O+GfNJM6B29F8TqHFWPdOaCTpltJ/hXw9f8UL4fVObtzlPGkY1PS6cXso1GNLg/wCq5wQ2MrTkHmtZN1NIZy6IUubLt42XXgV/0uizwvwucqB+CQtZ9Tqyw8zcr9o80Wk9Ux2tykDGNk/QrbVLiZtM7LSZ87nFz7c0bLW1PjQ5uk3fr6ojTB09CrkYdu6BeBU0Qg4WcRN0A2ZQ8RGaU0H3CvunGlbQunAyroSpjhdExwsrblWwhFkLXXUKrYIuVleFE8Ar7qlASVVqNHifKOiDnRGLqHlzQ2wAEEpp/hGfRDWbbXZ283ZaWsPI4iU68XTiHc4Mg9CtZzrVG/ZUinSbkVdVpa2u1z2gcg6o1vcRVIGwUiZ7L9n0XUigMdG+5VLjOmM3Xlv6qHBEcwIEwoZMcDwniFKvP4tRzmwwXJ/oiBBsHQHZ62+i8NmroghvlkQv2iJs242dKd8U/LIF/ey1QNR+jFLz/Ft9LqtplodlVyBzRBT2xyb3QkZtZFt+oMqmUGxBRlG+Twyp2XZyLcIN3CpvbhCuhdCCgeGeB47R+IphIwqtyLQgJ5j1K8LVPM3yGdui1PEwHEBuIR17sGoeS609JjqsSnueHWGdpleIypzqI1G9QvHb8xuOykzcSL5C0NGZDdO/YlQRIdlAA8zuq5uYnM7otaKm7IWinYInnP8AEoIq2VGk18yg7YZRUlUg/hvdWCvwxwYwu/KdYncH+y1PDLNP5QALvEj/AD6oseRDGl0o+BqM8QkCp2B6eya34fUa9jpr/wDS1dLW1LeUUzT6KmUYwDlGm7uh3TBYON0NRudzKufqjBv0RFBq6IzEKduEtsgPNuvXusxdFG/ArutipiUVdZ4eytAX9vwXKgZUKZQl0QVCD9QmOgMLWa3mdpOFV55evf8A9JugGBzQaw7cTePum6lPzQmvPMx/nCGhpOnxBc9AvCfLWDFI5j7oN0NSwOHHCcwMlwyooqIPVU4jdBxKLdb15Vy27kqDFOYCL7dlDOW9lAEg/RZWT/oWHCl2FhNGgfzMtFVXa5TT8TpmTe/2amO1aiXA42T/AIXSGo3TaagQ6LY6L957RNRT3azZ1NQe89VULE7wi0vE4Uh3ZR4dQDuieGfbCFiroQbI3nsrYPUoEytlCNV1ffhEKe3H1WEDwwunAKFkyuivfhPZYsrIrYH1VTvsUHaUh3UHmWm0fIIEes/1VLQbGyA1LNpn7ItdblKYwHm3lCjV832TneJyjN1DoqOEScyndsL9R1S69SgQ2RCjUZIRF4GVALm6Y/e/ooMOP+jcqytCl1gi4ils7LXLeah7DzZtKbynn2Re4g7NRbXTPvH+QqtHXOpHWOZDxNBw0+4Q1NwhDqZ+yLs04RfXZ3Uoiah0BV246KcgdV1hBWwUBNkDhQrohBZHDupU4WUJ4Z4ZVj9l24Quii+VPfhayLnwehUwHLlym9wnBruf+ia7H5dytL4kkvfg/wDFNO7sKHJobVSE3YD6qTkruncu1k4NbAOLIgggbKanEeq5YBOSrslvYImc8Mfg347rPEDW1OSMhBnw5Ba4Gk9Te8rxX2LzFPcBMr0QxpOe3/tUMaXMLgM7IaGhFG5q/wAlPd8QCNSdzKuGvBVRt2CtcfcI1gEKkeXYIODyPUozzNUNV13CCiF0X91dWhbcMrC2UIfK395R4XiT87nKP2fTjrCrYbdCtlhRK77K8EKV0UI9EbK6FN4Um/VQyGmSpcbpjqjmPohpvpiIhM5pg7rCM9VZNkTCMC6EWI7oFrjJ7pri3OYV3e6/quWZBRjHdXVltwzwgLHHZYVfLk2CiGkgmDOJXht0zcTV09051mgiwRbqMIeLGVT4ZH8Q2T9RmlU5xtQyTKa0iG9kGE3FrfMg/f8AdlAtbn6IdUL8zeinUAaN1Om+fZcwlFW+/By78cLC2WQroVY3Qa2QwfREdVU6SofzNRgyF5SrxKx9DwyeG0o3RsrlOc21Ny3sowN033Nl4hHsVYeUq/mqTScVKW36pwIibqJzugF3XRRLbbqPNdfyVsK5XM0TN5XLhXVirnhhZ/Fqabntp6JrtLSaH2EgbKpwhwGFqO//ABxAndaR0XtqDL3XiNfOxtfuvCvU8chVNVUX7oOLhG1lzefIkJrZAkQiMok/Vfv+qEQFT9iFC5hTG62hEKCFccM8Mq6wqoQzCppLipn24ZC5nqZKGy8qwFUEBmVe6CEFNdpzIVovef7qmq8ZQnBVJs20qcXRYAMzdQ4X7oFA7BSsrKh0eyNXlXKOwC6LlVrnhA/Bgq6lXVuGEQ0vaR0P9FU7Te6DgPP+QslkRDZyjvMTbsm/K+cjdVPcRpgWCZpuh5nzlAkS0N8wRDXc0bGJXZuExm0SHKBzepV8ItyodfdD8sjupaqlO6lZXKAgagHb+iu6V5VNAWAsBQrp0GEz0/0B0WEbKnKupn2UTEqimBT91PubIzYlOF8rNPdU1X2enAwUFuryoARfF+i6NHdWaSgC0G/RCGtvkAI0u3xGFvT1W3CLlYUqy3U3XThe5TQ/TpO56po1G+TrheJo6raTNcL8wF7JhrwKVLnNuOW2E6qoWipu/wBEX6hL3AwZurEj0QLSCZgyuUWcg6IItZSJUvJVQwplBhv7qgNg9VufXgLOQsUAGiSuv4i4brqVVJRj8N0KRnhZFxICmkW3ByppU5VsrmcVbAP2KoIMuORkKDPuib+YoSFIVo+it1UmeFnFOgO7ISKeDnxPplCR/dXblXN8o3K3Vzw24WV1up3W6jt907T1A39yHDHdR8jpuTsgZJIm/T/O6LH8jxgOwm/sr/zOlOB7qdRzpJ33XK4T0UunuEXNm+EbYsoLCugW97wugKnlUzErzT2yrqSsIKfxXJXKOA/CauisuvCHOiV+rb0WV2USt14bsEGIVNRFgjJRpFyqT1ys8A3ZR0UQiR9ED7qk5jKkyoY76rz7bFRG6vurSpPCarcIjhM8MLZOM6LGjzATfKc7Q1HEjcYTZNfXpHZP0eXTg4QdS6G7A8vsi0Cm8mSvM2nHohb7oGgwM91W0uDuiJdmUJtPdNqRIlZDlmBbAVzyZJVFLz1MqsGsLHAiypALvQKHNcI6tQ4Y4XPCxVO9+N1hBrfMbK3FrKbnDkTCDvDn0UGJKlWK09RpvUhqadg5sokRZWyEDuArKwTXYlOdZTKhHN15TlSPoUIYugi8qR7r0woFhPDCvx/7XRZVrKZWlqPePEa9okHDs/3QOl8Q/Tr2DoBWmGar8yHVXVT9VznRklecqQ5Xa0g5CgsIPZXbM7Iw0TsgSUCwR3Uuv6LcIrJWA1RCNirNKs37qXaLKupThTvuEJV1t+JppP04YJUjSn3X6Qn/AJIGkSLZQbawWArlc14wFVruMD5VGlpORe5qa5umejvVMOlpuALbyjqG/aE0fvXCtlQ3Eyi8WUSK+iwqxtkKTw7qVMSvMp3WEA3bhOVjjafdZXVX4WAWAh8PqMhoxTkFDwtYub6KC+rui0vEq1J91+kuZhHCwV2OV2u+ii5b0XkKk6Q+i/SZPov02fRYb9Fjhn8FwsKwWFjhdZUN0ie6/T+6wF5oV3fZQVb8WEYMDcJwaIjuntWjaDCHhtPKfMs44PeBJ6rCcIGEQFFle6xdUutCss1KBwwr24QGlXBWVt+DurhW1LdwvML9QgJE+qh4a4dSjFQ9CuUv+yu63opDr7ChbIeVecKovaFHiM91d7YRpepABW31WR9VfhgLCtZdeOVMn0hb/iheSr/7Llu6MLzPaIQq1NVysHfVSVapWJK6HurOTmsaXNImymRO4Q/eZhCryny2TwW56J26OIldVBjCqJ7LbgN90T4c3num7KOGOHmXmUyo3WVld1mPRWK5iFSx31UfsOkP/qpd8GPqob8LHuo8CnvKqplW02lX0Gwo8Mhv/JY1Pqra7vdq/VaT6Lzaf0X6eiZU+BpIf/GYpOkCOitogLmZ7r5vovK9bqQSs/VZPDH4MKygtEeqNen9EKGz1UDlai7Up9ipbC3hXbwjjKueEmyqa6C43g4TOYVlstCiKXizwchPaDiVYbr0TnSIatTs5QSsSrQizO67KbLqFUDZXKkP9ipplbhAQSB2Vmr5Sr0z2WRCJBCikBXiR3W6vKyV53KK1doV246FX0wv015EeUhbheYrzOleeF+oVZ6u7hNS8ytCyoXbhgfgyuqhchj0XKZ9Soc1eZbqSrH7KygDHCG1Hh+mxUvJscrkJq2uqtQkNbYKrxI1NnK9jKPqohPqIGm2wT9NhsVUAuyMghGAIWB9Vj7qJBKNI9VcE+uF8gV5+iu08PLK2XlEqaIRxdTXT7KSPeMrPDdZIUrBWFjj3480BZWJV1dTdQjdcsunhaVM8Lqyhcw4xHooc2/C91aWFQunCQLLnj1K81j0RNoHVSYWVCynuiznSODx1Mp7D6on5sNQqAJN3Iva0SqS22VMKWrU0zeLqbThXUrHDC8oA9VeVHVRg+i2lXCxPCIhWiFjhleYo3UrtwyvNxzwlYUSsq5Uy4ysGVvxwVhW244444cvC6vhCl0dlhXsvMQsgKltTmnN0xpZMjZTNDe6pvI6qCVIVnRKa687rTI9CmVYYZIQOHDNliPdOt7re+UYdJ9FquLRNgaViFBhWPC024b8LFyu3CsrSqYiFMK/DBKvxlTB4YQUhZwoKkKalZY44jheVIlQs8fNwHHz2XVQVZc1lylXCsrgfggK4CpLQ72V9Onuwova8PbtC5mk9bKArdcoO6FVPMueV5rqS8BTUqhCFr7wE5wvU4mFixHRQhMKS8yhNR
345+ WV5ldoRr5BNpUVIDr2WV3VwCOJXSVhWR5TEKA3G6kBEEHCmkxxxMFY4CGqwXfjFlZZUrCxwhAQOGVsVzDjZsrooZqhAFREK6wsrKwrrk1nt+6/Va71aiRrUzlSPjNWerXwi9+tqvPUuUaZJlG11STdAEmrop8sLlpgrmblQ3flCDIa2O2Vlg9Cv1Ai0CQd1D6sohoPqQptK6In5QpLgfVAtssfgwrrlCmmEMdFsoWFfKdnopU2UATPRXiygGyvkKqqFeIUjdWN1ABjqqqd1i+6EqZOeAV8KcXVMGevGysYV+PVWAUBpK8qqjhER+DC6LPDsrKQgYhVO6qAboUOx2RLbjuqXyYH3VxUT1VPfCiITZLW9yrauk6P3SgC+I//AFiEATc2BVwHKbkHZeULlaPRCOWFm3QrkwV5bq6nZeYKNlJ9kLLmyuq8uVcWUUKbjZQZVtWJC/K1cSjzNuNldRRedkQ4HCEYRcDKBpXlGE2oWROnzTgBc0B4KuZVweii0I0n3VVSILNlBtJQANuqvdYhZgqA66DlzC2V6qlSFtCiOAsCFiy8p7q0uuQv0o9UQWLorOhYBV9PdeRYsrg+yMMMlVObCljs9UMoirm2XLGo2lWDB7Ig6d9iEXcxjsqSFcx3K5nK6mVFo4Y4AOCnSpDjcoitvQTsrOUuyjO1kwUmFO5Kq2mJVUWQJCE7qkmFIKypqV3FXJhDMcBJTYJMcDLeFxwMtyrLddVzArdVTCsUI90KiVY2Vt1zGymbFHdSBeFZWApUuEKWGZUaguvMFdDCk2PD9OQppMkoGuFfUlWeIV6SEQGtEYVqT0VTm36roo09RGIKhc7DCBfpKdPlIQIwcq3MbqXB09IUUOuue4XlRzH2RDbQpAmUahVCpptshygcy99kOkKEWzcqwB7KSy6uyvZOgkL2RF6e6OfRZjdBGV2Rf3hO5ouoOysJWcq2F3z7KyhXV0W0ogG4VVWVTGVBGy5tlIVMKkrNlZTMLKiVkLzD0VjlegRjZBwd2VIcvNwusK3HzFeY/Vb8MrPDmbKpoAlRMLKOELB0JrnaYMHoubTH0VBNlqd168ewXXdVl1lMI2KwuVEwqryu+yHVEzEprT1yusfdGR9kICxhfNdWlAYKmAmgTKqE5EWUhrr3hUkYyhby/dWwrKstlOE+nAwhie4XLjNlUApPXhOyu2eMzeYWFFoTd0YiBlQJ9kIbvlRgBZwjayuCsWUMss3UyQoF0Q04UWUAifwcy5TsskLzFSoEK8fRQcDdegQugetlVKsYWFuI3VOVj8AxCwFfjJXv+EBzQnd7rvsu6wveJQNN/RWyhZRCtwcWbq7fdcq7oiF1WFO65QCjFpCdkgmVqVeUiyFbADgoRAEKwFwj/wDyvzF2IhEeJUCIupi4yu3RWsUFjlnKmtVBAhV0qobKWFB2yxhZVRKvKHAOIBCkb3vdEzsjWYTII9VSLQqXWvuoBUTjhddUVZXKyrHKh6sp3UMg8qYNMCXH6BDw4pmJRbMXjmBt7pmqMvamuAPRBFymQLq7TzZCieBE/MpR+vCxWFG/Gb2WeN27qVmIUZ4QVywphBYlHlMArsosIRaXBSDPRSTlWejeVy9UTuufTtseqiKUbLAuj4gGdliAPsiA6QU5sjsut1aDdGGqSCY+6a0HsoV+vCD1Vt1Sbq6zZdUOhyrJnNH73dAEy4ZUr0Qa3HAAG+ynMIUaLeybUwESqaQ0Ysmx/hQjAK9kQoUFSnJjqYVFzummcpzpzsp4SrqFdQhFwpypXcKTpq7VARHcwoMKC2ytZHTxKP3Ui6DpDbyR1Tmt1TRNlS72KLDBDeqd+6VdAqSvEYfZQ4Whcwvsr39ke6r6oQ6AFdyMLPZdl//EACoQAQACAgIBBAIDAQEBAQEBAAEAESExQVFhcYGRobHwwdHh8RBQQCAw/9oACAEBAAE/IasUqtA1oe1lvQ2KLDXP/wBrAVvYtsYMLmaGb2p36QgHheCG+fP8RRYAsYZaJBAcJnMMoV8qhkPxGln5KitW6nMY7vUwbTxAtRx/42LlWqFaXCuP49dzNG93Fv1/zO4zbv7Jjrr/AOxmCQBayyekd9PJxtiWuiODhMMwvJC0KhBTXNxafyQF5vtKUH5gszC0xXfuOxwwVzNLTKnDmPFkNsS9YmYOdmNYzRVb4i0Rol/iJWhLO/8A6z+1ko1X9zjEIi0FOQs1j2m9xc5Pdl7s7VUgWLvqFUrriog4Hh1KNmO5jA1qEWN8mpT0sXlW4VTZ5jC4OI4TmXSXBECnUYuJleGHgFZO83vzEE5OoXcEq4XtAN0LP/K/8r/4h+A947hYHdwov5EqnS8f/wACP/rIAVHnA391H1Ia+cf3MgZxpYjjOcv1CpiBvl+Y2Ae6gP4i3dM3kyrLVXiOBr5h4IutYdwR0/E5YSjp31FbwLYhWvcFBNBz3P7uZLaoMypStw+YtT+cTFufrHicyVnB24PbNwwEp8OBzibeRAWcf/HUehu6hYTC7WZ0RvS1mkazQK0gVlK2ZuYwydbmZ7oJlnUNKXBcS5DTy8YhC/qvUwpWppd1DX0zKlqcP7mBhwIHXi1Ysm0Scqo9lzKuZdJQfcOTLfZlFJIN2t1FbtPE0tmKPZHsKLmXCjzLFfhRAZKXu5w6dTp68xl7IXoWcEq6pmpxMrpS6Bwuvj5htoUrXYqwfPDxFq+IsL+CgMyiIGg4/wDjFMFjSzyga216SuKW0aPECrAXsLWb94Hzegp063GpqWfrjE3+GzkTgf8AYKQcvXjOf3UetsylSqq/mX4LWTZa/qZZ8V9/v3ArchmyIDnNw5Fzgeg0w+8SdQcRv1meRtqJvxORldVqDbURq38RdtEItZawNt8EvQr2yo3SLYGpwMstsLziCthPqHBn0lcB6PEFlukJVePUej5IlOYN1gmkZr9ZUyB3uAaMjRHloCtztdadfZLc44n4Y/8AggLVcQR03Ae+wg6XaoWvX99mPV7wJOwudjK23UgxQthUz/AzOs2DJyLKPEyQ4rVbiq9f6lWtotWVD8SswIPaxj37hCikIP138S0ANF3ly524hKcyGddQrHGuZjqVFyHQMV6fcsFZWT2Mq3xWDwcy4yGAKwBFZReveGsebXX4pELt+47lLeAkOgDY4iELt6GXJXjXMwmBqoVyRZvESqpmA5L4mUKmIrK4CtBeogNBt5liymCrRaUMBABiFeC2WbFf08+JXDFmDvJ+N4IKfPQyC5cgDrslisZeG6/L4x/+u/8Ay5FH/in0Fqz07l1H5lPB2isNe+JmRRtHWdscLMBqac48YmJIACmORWtspJIPw5+5XHu0P6EIVizMc5rzNxRH5/N1MWat83Rb6nMHO45gwO4/FJ8/czlwam8Q/plRRzKDi9wvBC2e2ff6gdFHY3+B9Q3e00q3VZ/fo5cmTjTfpC8UF8uJUwytmgvQfupkNmF9cf1Kr3VuYV352R58EF4PxMs8ulu68RWLAS1wGviCqHNymBFKsuvMA7wEtq8QQOniVebqYW1HhtC3ArMe8IPMWhKEs5V1/wCFHhgEFv8A48y5kjeSK1vTTcE/xo2bXPbvBxApcAPC5/yGCv8A9BOtBcG0BQIfUwU64IFccRfHcNmnp+RfiUzug8CfDKajXvwUHHH3Lc7yrbkz/U1yAJcLH5/iOxSkZVefllvpYNvvqVgNCcQymferz+EIiFUv4ZXjDwGMShqKliG78OMMFqApv1fvt66Ds8U+bqNzYIULuvjzA7ogzTY/e3pxCVmmJbzl+YRaW1bQ8ZfvE4LZYF6peSkxvVE/nfqc5qNmNvKUv9tQ6lyUnjqFA7tarVrUtW7jLf524mbHTUGN214/5kmd3Cocq59OueZbowdt+kEtqJdFPxLKOpgeBqOyXcttYZlBQkqlacph4xpWiKYTivM3lVTEGLiGd7tjvLMPWvzLrVsYbuziLyNIydMuvm/Sp30b1gt/KpTf+3K6fTRHrq0EzjKv3+YBvSHS5iwCm6YtFsBUOP8A8Nl1ef8A2+xdFr9/iIN8UlZMkuzKmVeEEBtVnLXNzVmHhN0vbzXwxHbql6bp95gtoHAZ7jMC3CF3VeMNTnqEod79oSQE8TnPP/JYVSHIqU7dv35jY21cJlv3qUFNnGXp7l2lU+XIcYzfyQdbwmKviMRr4Qz/AF6RunVSlt6xKADXNWeqEEdrDRf1FeFsCfJ9VEQmcjlPNvHHzLWpBTSm3iHphwazXtKABOI9/qD7uo4wq/x+7sXLVjxa1Ephk6muSXZjK26flEuMzSmXfvqXlTebVXoS5owAS7CmdYJsHxvEWkVUZuLWYdw3JKjjD4iWyj3UqQz2LL6hQ+0uAq0CFGgxFolpPEttXngnkk7mLdOQ2HEywXUxJDXgbYXnkPz1KqKdgfPl+pfZwvIZ05z/AMi7FmuaYvH6riCwZ5MreOOPjzKqy+vQ4LqblFz1R/8A6HAAvLFjwP8A2iwulJWn/INLPkTH6zKSGpfefknJDD8XrUUncAyK+TfXxEuUUPEvnkzfeZqiOcCPT2iyAxqsRKdaxf6QOpAs9g+aumXigkI7M4/dwi1Vt0e/H4mRzVbvpP3iZ2wOeiwrxKO7UNj/ALuVIOHqe8BMoOxN78c817QN7g6WmNwvnAe8Fr7C2kzfxC1K43yjZ9OsxW1FdVDaxqWXRa9OhDdXWGCmQ9RBMCj9GpmJb25lmRSVmKrUK4wFH2xKc5JfB93qYq816RvYQC6yzKwNG2h/NxELkVRfm3l/qYlUjXEx9x2/OGt1+1HVKc06f+zovN/s8srq5cwMGOUEWBkM8y5XowTGuMS8e1gGPETX3cB7bqMStHnmUSRTS7lVADvzMdNU8TZpNk3hLhA9gId4XQ0z/syJad+bvphf3ObV1k+b9I7VBYY2OKMl4+YjRhtujpHn0wVCcx4tTsu4BW33QhbVybel1Xk7ZSgxBbZcv/xaF6gnLEu91yeIRlnqWdwTZjp4jgDZ3X1UK7NnTOZWiy5Tq+fDqFdzazeWTzy46lYO0X3V9QeS0D4VfiEWN0VotdcvmLTyJXJw1v8AEs7JDwZWv3+5TC46yw5/L/sSRaHYOP368wTbXcBKXd+cwbuAsnOzj9xOXeK9/wB5v5lRRKGjikcVN7Ebyq4lbYn7DRY9dS5FXezZL+W3xNVuNL9xKhDABxcvoWHFnpGMfB/fSVA8PaXXGepr45gCDaK2RYdGlq9DqXkZyqsh36X7hEOl6/HNU9blpKu8d9/mCGV2zYFXJTrfRfENPdkrSzREYunvWfPtHhqocEsblasH6pWJYE6BVg/SUSpWRil7iKmglmeOpbI8j1q/dgfqjWNc50Ns6Sxbwpc6DtjUopXbhiLfJLa7CwP9lY9IJYi0oGK1d7hcWbKXmUeqKTRZhvjzLDApRnmMaxrjNQGH8wtIADj1H3AcKy6AN35+eIXcpCOS9V8ZxBROfBSADwtfrAYhocNPq7lOCqwLQw63p+5a2YOHNsPWE7gxznE8gP0mJCFoZ1o+YbnAvefQv6gAfML0XcLl1eS6P5jJABZl33AOZaM8lZ/2VURuDdqu8VGAlqbXJr5mi9+GeT/MrRIaFq3XPD/kUn5t8cfL+4y8ZEGr4uvqET2RTnfyQSsKp2cF+rLcDcyjntANqPR1vqqIeshVK4c55amw4OoPB7u3cxIFRvd0Erzx9RWIsiXyf3FOyW03gXhyVHnRuDZ98s5WhEvxOYlmNS5NcWRL4sff/kZxxZhwGD7qKxhyMJu1d8wUxhL0Gz+IFm1q6lNhZnFShuA8c2QB02QrLXeJQFe29KjNyHoesot0Y7vP8SvQKOAcV6OfUiQoyBy+0Idiht9fniZgrBnDdI9VLCEqHIl5mmZYdLus7zHWnCXV518y8uwJttv6PSZ1lFtYrS5KUfZL+QJrSvLxn8RANA0YG46RbjbEfRSzdPGZVlcEptdkwn2aZb+Qcz1QXPHOeIa9p3uVYFXCT0ihp1gJhDquJt8smb4ekUFIq2ljgO4l+BfAuAS7oczN9FCl7Ln3TiDmBT4Ne0dk4LNYN0vzxMm2W7wcs+3krEQSRrppk6vnWMS5vSG2TTiq9PxGjKEQLswnEzEpeU3XqyxMgRXoLJxItppAJvWPM9ev9i6sC3TpfxBsFlnqdV4/7cFZFmxoOcf8+oAXSKZ9WP3UtDeUH/Ijg2xur4/J8yx2g788Pa9HiWinUhQXDg0Cjpu/qvHUKj1aBOLzxAESk5cub+9cRHAFYhnpXvnvU7is07wX3KTwW3TS0fLX1AY5Hgav4+oyFgi6ALZ5qpsAVgUD+jE0BaxMyrzsD1hMfIqXT2tAVmj8E54wzV3RD0NftxG0HqmBYS7L7zDEr04rE1RafVI4PTklC9UBpllGUGsTD8zUdwDlqn+XEoW69lXDE3yzam/eoh3CYS02ezAVNNDVPlPb5IajNJe+Kv8AuVtmMvlUrUOw1+MzJiNyy1rxOM8bGn+iekQcVcXklzwj0NTeApesmbm1oKlv7X3FDBG26bwOu/aKTCNXns9v3p7D6qRajxIe3DIMVdF4URZm+v1cam055ZaVgIOC2eYCH1HZTcs2azqKxnnD9w4QsaYOPEyI2ArdN3o9fE3+AUMjpfs9bl7tqOg235U77ISXlEFXrveU3/i1dM2m7vmxy84etS42CxxRaFp4Mu8RZgV1nWHmUKzGDvp6Q12TPCb1ncpTP0Da/TUodwadVm9/5MMdmiZaYrfaLNpZu06/H3mOp38CTrHVlHOHHn+oAJvS9Ax/eYaH1lSzk9LGMdIwINymGZRLvi7+f3ZA1OyG+U9UwIoCMld9f1HFS6F7KdbE/EsC1q8rxSYiqBrp2Mns3jvXctDJlAkUg6Di3Zv1rHtcFEOdY/hFlrKLBQZ+SVYtbpXFMYKstPSAaaYrk/E2Hm7IbeqrFkEwqDjmf73i1wNToK2xQtYbV3HvYGPeY5m2TiJdHGNR9BEGsOe4FUtfTUKlQ7BuvS7YzpUL+s/8gFOJeBLr8sqwrU++mKgoBVm1+NJCn2oE/gtwXK2wMNcXBACiJWO/xMaC+8F7WWa3byMor6lhqF4Lc63lfFHuovfO3xHGSst2hWi/3UwWXImq88wVsG8i/wBx9SqUsqu6V84YiCq8y4po1K0te7Rhf6KuZ5Y5GYoBtngIiSJ72+ssbHHMqrgdmrvxwRCXoRo9nEuS5zDmGYrApfpLz2JZ0fLkzjTBtAW0vr5MK+3pGhJhaBv4AIpyJWGTv0y48e0dy4rAxU86c9yqkxTrNa03VHVZephlFk2eG/VKA2fptmviAnYIbaPc2XFUfdUp5rxHe5yt9hz379xo21RSlaymGOd2UyMbBzULxdCi1t6OPWYROOZeG+owv9a7i9Mt1MulVklfcdZcV4XvPsSXN5gVjVHxASljFZ0fyQAjWipRmse8EViha2+fPpDpSklNPZzp7xBX1kpfkN23o+5duDaFFH6swMcH+wBnkcj8ytNp1nEFC6B/MtOY76myZGJYvvxXLxKa62eQStseHiMjC3TCG2xl6mOyxfIcwuzp2rAWq9o0CL3QKX4g6I9yV4GE2KGWPG/a5bdKp6pqt6x9wKSIcYYMmpxbL/EzgoLJc2i2Kfc4MBbV5r3eZcXAupYsSC56sfge8aK4r7vZwWL7EUSF8nljJNCOg1O51IUbSvV3HM3dlmbPN/ca3Nv9AOGYpsXdMst44qeJLctBZNuxjzgJWMxdLKWgcAqoqwUPMVquPmOBh3OMKmZSlXTMyL3puDpbhhNQhi1Tnekli+G9b+u5eDWyjL8gP+pWQ+DQ6DrP0hpGZbXC+Sn6gbayQrb3wY1OMLYKGV0lKWqON75+ZQgRWOIE1jq+fEqYdtHL4hrUO1wzRTbsfcGBu7plftx3KW2DYOvqeTrxO6YmjmzOGKEeGLIjT34/iUkTyk8t5cVxwxe+umyrH3lC1ZbVkxvO/sikadNvbxlxAyLTpWlZdsYNgwWrAY9f3oCtDcBPNygjM/kdDiKKAJwlat4LsjiWBO5XRScbqKr0LCFW9uKmYazpxBxfvT4mTNXy6Gcy95qW2vyTne0KADPvctyTVpUOdW8Q4QSBbabo8QFvIjrr0JZVqM1nt7ys+iAR19fEwYcmAVeDnBiNbaHPWZbUfUGjj4mkIzaXcZs5/WLMDTyvBfsTjKqAdnqYgU8CmMvGOS6jPQ28q68EAMuxEPZBKyFtoXWnMDG6m4H1XUUHFv0f3LeLvzXGvBUsHjw8wUANRy+09N4K2w4LtdOIfTvdX9x5y3vEKRjbcRxPMsFPEBotbSYzCdRWN5zftfSAiuGiNwS/KLMNGOuhBNaYz2svQL6S6E8kxf2c/MuXxy87PWMTM4sANmXl9e06mCOdDZowinUvLBEQtdD61/Mxdh2VFz+Gqi3f54Z3BYBxZTEXljTQbmRBOfPpqOv6ujjq3HLOUAvMD1VfEIQmqmYDnpVsISbc8CcV7eeI/ESs3cLaY4g3dC7D+jB/sxuLg19ovYJZorvmCxYGMfTr0mTVDiJLOFSh3BbXVsks8HrFyTL03OmiNAqjiwZ5jlps83HZBVWc3KTVlw+8PgAqUmN3LsiuTc7Gnqcc8lmFeepln3VzEb0FkuNN9XiVufeUELgaJcTmGao0CoJt18QIDTYOfdnbx1mplKb3jbCbyMuuMy0plS1ZAZALvbjMUgQDWtu32WAATgNm5lE2PZV/bEIKyomLwcxBbCxT2z1Az3xi9fKvvFiWVDK7D0hgzFI+Rer7hGsgu88/viUomSrLmgvNsPEYVrmV3iuiFf4L8Sw/mYgtrleomeVlluxKuyStkNy7VVXDwXRriY/YbgHr7lIKPJzMGyDrxHTbW5l3j936yntA3Zjjv8JZF8ohfQOMH38lBgipWhf8F8d8UCqgwzRbxmjT6zalHDZYvHLAORPbfhfWNVwUpvvU6cwWp/WVvbFEw9r9e5UR8WbTipugylqXVvEF7NsFzfrzqNbvFswPKDQEqvHLJaVcywhAs6frGuj21a9xJU8DcLyNDUfIa2zE5JXNy1KxA+DEPg4hitWMTCkvpiXUbmDmzdBEXUQErVOYK3W8MRwDL5TlcMcZ3uB1dqFDLsiiYYq2qTHmZNMagV0u+pVVSuzLatbYYgpBCGAMt6VQdDmRNntJyLQ2bvHzmVwA6AYv+5xfBW6rEpNyoVvBf3mIo4VnAJv96lLBKqNsMR2+hKZPAY7HU099u76jF63fGIXLuYyNY+hqHirm13CGqaYzct69iJhfEqdfNOIWwDWm4ZJJ7yxSHcobfrMai94/EUWY8cymOE+5nOBxMzazcpz26lMQGBlNputYnTMcVGC0mkyrPLPH9JBloWhQoEreaH8pDVELNAhwYzq/MzQzfUArV0c6mJRbF4LmkqPD9l3mzFlXjz5YKN8mc49bmsBVdudXLYtGzT8QVBsU1X9yzYDXRmWtSthEQRze2VKt3Xq9xIZu272TcOwkdQ0JSOoymlaeZax5JQWQ6yqX2Ke5bK+rhBQN7viWyXzMJ4a9ZaKVXHa91wWzNm+IllWWUABxXvL1K1eahpV5bwajT15lUaw8oNZpeZyYLmNM7lqbuDzlgWAr4RDi17RDsUxG7lsyQN6c+CW1noN+0yvscMmR+Klik9KYrmNeTRni7PzDuUZeD0i8pFHRxmJslIHVW94m6oOTJop9RlgFCULyyY/dvOCJb6uhYKc+v1CldPJesH2iKDaoay18n4ghTgGWNOg61Cf0kZQZL3KBZ2MoBL0uEGLatWUugealyrTxMhq1mGzXcox9MB5W4ERwPJEFX8RpPoQ6VYDHrHQvO4LcOKxKbiwCoymvj6LiugyFru7ru9+Z5qDE6e3nz4lIiBgG5E9csdT16RCctPV3mvfMANTQ1vIP5nHMOE7374iCdiZrnM4gho17mJUbrdnJxWq6e4ApLrqtfuJZErk2/wCxcCYLGb+42gavmAULeMkChWERd+FanQcpJmOjymbZQzq6z4guC
346+ UaUShcmVm4u7fM3Vs34nGY4dwNAXuAJygEd9rhddaSjcYJm1zEP/ZaIXWcwumGfCFwGbutRVXVjzLvY3FO1fx+3F5MN3OZ3a1LPFeYJ2bpzPnOk/vi41rkWzOOOL8SjZI6VWs+2/wCIum2E51Uprgc2cn/JnwYqYUgOruUOfhc0iVfLpCcBO7Hs/evMb2DlVwYA/mVnt1oKNj6b+YA23KWp/UcgJVAIqnxOTRc+ufSU7ylnv6b5gNwK2g8VmevjcFcyzJC+aj6EjwSq8R6I9ytuv8SzbfmY+XmWgZOqjP5E6I8MqxeI2TXRF3yempgscbJhTJAxONebz4gpnhVTsub8vPcq4CC5Qpv137nEYY7grHDB818QODjDMLq1+OyP1krIaPDl0fUFMWu9CvLBaFRVXUu2pW7XR9dTKj5bZiFE1zTEWFlpzuq71OCL8V9QB+DPiJx5oXj8yncorO5aYRWaj4Zrl4mWLjqWlGd6gMDTqAN4L1MgZO0iyjHMXljqEqrZQSuO5uFcBT3EdAYH8RqVA4zMwlGaJ4xR9Y87a1AGEuzm4JuTxzE8+OoVUb/MbYg3BxGQMXVVHQwnIj/3Mu05KzXQd/3HwzNUH78zZKq3lahz5z9TCzMxgTl58xF+7xyY3G6iKZI7YnP7EXwufK398RnheeD4C5X+5mxlwcvzKCTQSmejiXSltcI2jg1KqPlSWACbZB4ghhblt7RiXe2jiXI6AX/zmWGw56jwtxXcpSvcQWSZFbUtG5sbmEB9Zze+qiWpbgjdD5hvC/8AiXfiWFFSvRO373+t5iUuCqgosW1/JjhY6TWOze4yAwuTkHoZ3v5nP6uBpt8ufRzLWNo8EAV5C5gZ4Do3/MRMLRkD29oFLpkIw1xMba5FZx+/UqRUYgrsQtol64HY3G5Djiu5lqqrJFeH095faycQAtmHGgsaYDMtcAELgwTMuqxYc46jC7c9R6IvRwiREqWgNcQ0ZBMe827F6lC5xUqa/SLCLvsi2i1UOzQcyg4PRlYr/sVlD8wUpr1r8yxX3uJkzcKVnYd7noTXZuO7k3/BH0C4QcFmvf8ASsytG8Tj34hsc0Zbz7YZbBFvX6wTDq8L+5YKwQGz51AuC8y1yuoAwCRb5i/xxqAJmA7WfoIeRwj3/sHqOBo3mN63clBWI+jn1zCsodr/AIlYgH1TB3kKLfmds6yvqLXJZdS7W+5xKXx3MQh6QMrleI0DS1ohvz5Z2Bm/KieC295VvEqK7TDcEbBj98wkeWBvljeszevvGbhWrHXMAagmZxnfu+19TIWz8RvpcbSFVtKb4Wb4KolXQLRpB29z5m3JfBBVlUYBQKaWgIu3FfERHI4pNoM4qHZYbld/tTSAXJm6x1mEHoP+xdLb6QsVUOcQR6YesLq87jvfRqLYcLlvmErTujEwrV1zHZeYC6C3sy8NRlxqAXgaYqpu9SgTS+otn6SnnMgXhjAV7EbDm05SwUqpeI5YbZapmIocwF3dqzKFnOSAoG69IUlyACNC8ZWEXThyGE49ZU1voyaC8Ghebg1Mbeo0dcPb4FjJKa35l7Vsnd0+s4KYHPL8/MQM6DoR22MFY8y3z50Vs+sRneB2KxHaDYZE0A8soi7vRzFs1rRqwHi7ztY6iVVC+T/ENYvCRR5V/rEKl3dYPv8AeMkMawQyQiql223yzgJTxFoTDiHqZuZYohPQaipjBLgCtS0Nt3KSPkc5ZOFe/SANMNSpqx9MfDCGeUobv6TcFbzAXK5WZuaQcdF59DNfHjHE/wDSxwzcFN1/VjsZnWHG2HKaL58/OZ/04iuSERcz6lrc7pNv9lKWPXfpFqoK5ZSAp3Ag1KzL9zAHBcDwQAkcwtZb8xK39ZhShSQ4QA5IvqPzLYBBl7LDA2NsFu/UlfNbUFebAO5yAHiWCp6ZqYsO+4LSZw8xrAy1uFgvxUZdMd+IuLO3EorTY9ooBsrzKC3mEuaK2vcxum1XDNpQ7Yl2LMNRgDdvSXwFTPJHo5ZjZFNvVXiEVRaXC1DUU9ve/EbegVfml/vUW7Pd5rEF0d0Cjeo3cDJzmRUH3Z9CW4GZLBl+JqWBq37I0FwKq5wVN/7Ql96WZruNgH3ecXuFyJrw14+9x/qI5fT2l+/ElpDKshsYlJqiKAViJ7sQGaJnUlzQjSIz55m2D15nM+3MF3oC+D6YsJyRKQK70GXEupDrxivi6PuXfqNF1xn9695Uc8F+z1uL4uMYlet/vXMPlxRaWhx/cwdlunEQjvMLWk2mcKmJQjwFGf6i0goHgP7xMbGrSnA5I8vE1IJc8RCDWPxNhYHEC4PXqY8gcQs8rq4RwGsdy8njuHWHoRVF8UFmqzyy8LR8JyNnUEzPReZVmLY9JwFvOJStc7xxFh+UAsRDuf1KWLBN8pXTimcQDT3jeo4XJXuZb/6hfeU0Py3dxDqt58xjY/WUjT4IgEH1FjSmWuIS40Bx9zk5abzA2ygDaOP7IW44g9ip4auFc5/fMtjscXupWtwEphsCxW8/L/ks56upk2WyRlmWwzBLT0IkKIOWnzGM7g0Yzu3ZG2aKvy2TJZ8v4j3GeIBGFo25DiVNVHMqAmsehOk8pWj4czk1EstszkVYg+b1jdWfmFxQ6pFlzg+oyvuTNZB4cnxLvsKMuHH0+5TLkAKdFTGcr7e8v/ZkUuDrVq575mI6NGDxjF/0xFKh5auJXl2hOJvozjNJx+IC7er/AN/MqiCrJnHmBkw5/B+ZlfQnB+JeJTZm4VnaojfgsTqd1nS8w2cluPWZY+mIX1Y80miU8w5DyVmWgTIcJH0PSHYqb1Ql4fZhWVblGCOWeRD8VqXvDGdn9ksDtvi9HqWxPulZVtt1LDQHQsyXl8owiJ/TdRoGabKqVTjW66mdBh5mrri8VcMQ0OUJVyxlgg4UgdIZ/mFjkAIVxkwrrJ/kgH0AU7IbOQaxrBqJXpGOPgRv4VHROm8XKxJ0tikewC5eM6awudHVPH91EbfeFmMKgS8DuYA5TDx3uUNtmymYatEXHKYNWi1V71KZi7cZYbKL9ZsiSlpMBkV9REuy4+qWaiBN5ha6riOdP92w9S1kNGWsPFd/MeutVDaHLbVVrPZE1oWwfatZ6lcRwFjXJ6/xMypGihPV1FehqtBil3W+OombVnmb/nTybfx9w6xfCyilk5UNr2m2GFvj4mMXHEXCh6rnHi9QJUyp3BQ6nV43AkzgpuoYcKt1G3pHczBx5xcpkF/iWGU1y4ipxaNGU9FSxzfjthcKC+Zh6Fy3RcpCBgdPEsBb75uLFE6si680uMf9lDfWGuJZQCDWVqY6Lpf5iE16hjXFrNoi8VKRrwRqp6HmaOhmBLX6ziK8gd1LqLXQ28mNzBGl4jkwpa+w37MtOV3mIr8qqeBx/Uu6QFGDmDBb6QqTXpAgFyEQ1Y4W4iClpjeYiVjCrgiv3RN4BoDVw62ci4/fMw20dvuClmHbeMyh3X55mX4otk+ZpI6sDp16z3b1MF2MHm2ze2hilDoNzcuT1iN1O1Mm3EBu66uX3PAoWav3vPXvLtMowPo8fxuWANNeWqx8ygDbAGW1zn/kDRiW0WjH6xKbls0xlEm0YMfmA3p6uVTA8ZUWjENAFscSaQ+/348RKCh5qbyHUIo1cvDn/spvvckoG2JZ/IhHszBi1oNxDmxCA7hzecxMmvjmaYToi2U1BTIPSPKxzxKrIbgQ1u/EXLDiYo3pLZawKa6lgGoFMEqMWCoD1lWqCJWizYP3CA8sqtQ17Xqf11MNMHTCCZLVygOrZNAoHGCH0ObjDWMN0yw+EFf0GUULZg5u/wDJyJg3mWtFCz4xA2luV5Y1md+sB0vNxDoOuoyvj8sSwtwBSbxcKtUeHRMYcs8fEPENLLauKUgUep5ic8r6r2ZWGFPUFxW56JdCm/WZBF1cq0NDmV5tY+ctjzVAMjMbJQx4/wDAhxj4Uy3gRpWLjvxwrjWia6llM4yXT0f8nJ2sWaur9Hy6uDZbHRP9Sqmazq9EQUZVWU1w/MqgGGShKszz/UEKxEsROSg+T+I7Crhyz1BJQFls/qA3LD6D/Ud9EX0yqLgcbgb77mV4qYVWxKM54shOdcg4lYtg8sLuD01OagxjiITBmR26hfCsfMHnBKgyhvsIt/GQx2ntDpa8QcKbMHpKXChxm2YQ3leecSjtjWkBchAjgnoUwMbz3HlFFltmBG3gJibj6wQUA/TOoJXEqlYK4hjhHBdweuvnqP8AkbPHsSqZBswvQZ5hDe8GxqOmDsLUzg6w3YxgeV/iLaAJgwpELmyLTEYFdpqBWgQ9LjZXRyNNTOcy/wBRcA12BXmXVhfoDzMpzGHzGWwPDc5SznbwEtBS65yygWa95ll3LcoHa1wou1XiC6LPWDk9TiVgIXdv3+/5N1G9KPPUrR0cCi3kqUAXUKfUs5vdf2ZUuxSnr+7jVNt6U7ZNsP8AM2fRXDpuWLjdJp9v3UKNdWsyCzezwwlLDgC4NGTaSqll3jmF3EXew4LlzG1xlL3i3KGmLY64fMNKhL/d/wCRbaOL1+IcCgmUQWrtl82LrqZc/wDgCsZmTuYOZQCw8ROjlhqXoeJnl/4DrMBxHGag9yZJQeECnZ8RtcZRKvOpcsJhAdHAxhqU4vUaxS/hE18moHqzC33vxABjcsP8/wCQ5yxmuUCSKoviDfHeKleGddTaHoMJgXz6NVLUI9tsTPRUPSSm2KZOuH2ZdLMLA0zWbCkOIAoDxThDYWCH7YcKC/uFRauXfUJK+hnccGtgNZvz1DMqkyiC8tR7rxUcG219kSqjSJ49ksEC8nAjz8w0e8rPqa675lw2GOAvfEoZVROm996i0+EbBut9Y6lgs6HQYflHucFrAc6gCZnpB6oUfc8RkT8D/IaVD1ZZkprqAnJkHnzCyWtDTLgX7w1irK1/coxR4JMyrOYPVLPDUxAQNYqBUD2lAla4JTCddxYXmezP1iHDv0jARQDRNt1rM38du6fqpUanpmyFEbXm/eCGAWa6gehtZojRM9fSbkAyZsyRnGrVZZIChlljbobziak0cUiZ+JQfAusRQLCLTMXS4Jj1vs+4lt6o3opfMEmxu+nj8RBEK4ekxKLE2I+G4qlraiGmUIobzECsVm/3eItGBeqZ8XDrxcM/4ZsTOxE6b0fMbDLyM5F8RuPMclqLrFymJdd8SxwvW5i3UNgfc9eiKOG/UraqcXKLzNQwsv5z/Nw6V1Re1B8j+5mgI5+xk/mIQFt7D33Kz1plgelY/dRGjQFmNRabk0Xl1fELAKYbTuHoMapPlEVQ1bEDciVgsXqVSw4mEJKEvR3AZ0ZKhuTKGnjPUFKqxNkAWC9T/sNM+4cyOvoFepKw+ka91EAGhKF63SLHNY7WH5hiavuK7luIT0HvE1cMzF8C/EFDQwYKvA3EOC4jn4mRu+rA0EX9isYpxf73AFGNlwaLqpY1bjxFPVDghwqtvFy7QNirmDwGYDJoMVKbtLjxK1PiDyikux79zUBoG2Y6CrPpKKVBUwg1YTkYb9IBhtTTbZD3LYmgKuYCuTeZdcGzEXF3hy2QEsT1M1uSiGfb2gKVmWkSTQ7EbMnMa7mXIL1UKiN/MsOJLAZ8Rw/uNGs93Cmh6MpFW9+0AGSqeBCFg2jbOH6zENDAsqsY1fzuO2DL48a9LvMxaQZCxQXglyN+cxp5EDDOSgFse8z2OeR3CXJbFxUNwG8JuVA1WWomwOzlFsLezEODX58y6wldR7VjvcBjd4zcPa81VQ5R9QJTXOEolkcsL/UTiDpT8woNJjWomwT+YBCe0uMULiIMy6mXuD0P+RbmJcSLmD1N1NxzhUVIiHrZf6hyAh7x4gPNmICMtcDUqsKaE6qQBz6wKzuLqqjss+I11c2er8kaGZTKnXUEh0t4Ma8cMl08ykQK6NyzA1CK7TFFfMLmoeqobwc4Bf6QKg3x3KmgCULG/CHDM1mziXt9tPiD2teaJSXklZge2XnMIae6Hhv0jcYLxLOCaBMy+7fgm1SOlDNaNVZEG7+SFTlb1ODY8Rvb3UyeDnE2JPqIUPlruAplAWiesSm4XgUJ7J+PMX7ZDpGI7GusnMdxK2QwfNTQDwhcwtTTaDofpIbN0qEXdomUR8jAuB81lFsP0EMI0vioPxMdp/EaNpOM38zeIdmR4gdEAeXqYOPiokUhqUBfrK4weCVJPyxL2QDLexT9kWmvTFwpr+1CuJyhiAYV7yv6zSqfaHh8wINhFEoMRTSvMtRcaAyXqAmh0XF70usRDcQ16y2AbNLNYma55Sve88SkQaFjUfEWdVesxNcJWkjaUHbEDAxzNa0NzBXTQ1iFobOHmI2EDoxUpQEruUbG76qc1ZgFAAG32jkT81OChxmcD48zwAQr38RFZxEMZYF0CN1xK8qMRYh4mo3ZrYnZTziko+ojXvMo/q8wINRObfzMz7y4y7nqEfArx/e5UFhd7xNTX0WfMsocMWpDMF8MXKr+jNzNkZ5mdwdkdnLlpOERhMRvidIPEpd0OaUODe4ZNexmZzKbdSjgQVijptHTH4QM6agdTY5gBdC+kG9bgCy9fMylsvVMizyC69IHU3pVzM8BrthFteH+88ccQ1sFUWyo7PvMeFSykVV8yvQ8bhO6oKpe3mBgYmV3DHHew+j1LiKB/t8wuGFXw6lW04gQxuo5iYai1bLTEcQBbl3Mzh7S4ZtNEqWsDTOZdh0iZTHppe9waQPi5mNb/iXKtscRPQ9ZfuhjV7i7bc1FGT0lFmmpY6/MMmdm4FhY25jfJfAStA+Op82m1ivANSANKj+/eYHUtcPiVNnmsvmo6jdd2SsqK2dyvtO1YHw3SkKK7EeCYi2OMaS5sh0UrQBi6jmGrW9H9zLAeP8AssiNbS/4jI9GKOJhbp9WGtejDF9NL1GXHwRdn6zKFjRKOaV5Rzn2Jwq9wvResGb3LOErqZrIPpC3gQMzBiFA4sPqbxa4/XDoucxIj2LEstcjK5Eru9wqYShupOpbgYYmp34xMgbgzuo0HxqUIIDlxxBZR5PMX9MA6THoThWqm42VTok/eY9jWEUjBsysy9AxAxGjbFRb/fMbM77gRU8N8wzMm7vMfIpuXfvAto9zEK1NGrnYsRup7EWmemIMUuKLmnFyVLYvOXUuw9YalA83GKmCWjOYAR8y4lujgruOME43GFYmbYH2DxnbSazDxh2xs1QHJDaHrE5He0qU73DAMo3dqXKWesV2+sdYhwRJRd3UaTLfiOcQXU0eYIsXu1B0Y6KYeaPWHYeu4NwfMtchObgvYjakJr8wCoX2slF1SQOop0A+sRMspy/cDb8o1YfZLcsAalRfnnS4MTBqFmWPEBYC4cvBjwR8RxkqEVsczGoeXEDlRxM1VGHiA4d+GKrp6S/7lrdtApjqoOrCPreY+S11br16qXC4NG/R7JmtzV5lBzj+MMRk5hPclnS/tzeQ3Yyi2is3mcXhxBY0uMS6oqZS2GdANXz+o/g3CJnpMyXy3AlAWoMxgM3tjkra4uMWuzs/qYih6EtVe5FWpToKlZ4JVRRw5QNktCeV+jcdwgyvq6mNhMWbdyw8owRq2fQiQprW7noBLAaUU9wsLpr0lsqaiZDwj0r4gNc/EarwIhir7xCYhiUCLcGZIE+GWlsrHFI9K3BakPpAbs+Y1WIOQhbtrHmAKsZ1mZ1iaLEeV1+IJeCbWmJchYzaEk+UOFJGwyt6S+sOaDECNnpGXMjHKwxKg9EQOaA0pO5dyiFoh4qc02R+14uYRfFSluXTMETy7NX71K9gempysUK85nI9Q/feHWlnuR/FtF5gSEG92eI3KxpmNBpzdxUTX3DxACK7lgVqyFqLOpvCTB5DhhTh0xq5kvrxqPF5+sHJksEXMZFgyUvlmVCt9RW0Ubb3KeL1jUGB8QFZQ9cQO2aqWs/UllKSscVG6481AVudQz9Y1sZeobGjp3LdGolgA+ko4pnym+4KrvE7EUYXZL6U3NGT7Sh6F6haxnL81dZjBYcxlwr/AD5k06/iCm34lqbuULl9pyPlMmXwheL+I5N+MwEGsvWcnLKs39SvNCM0s7P0EwC7NsyuVkA5D5TCYDNN+8QjTsnlDqncuGEmd4hlNN4IxZnN83oZbceHzBr8ixF8hgtG4IoPmDUMbzcxdTIpxH3yKT8kvWtv4ILw6U2QIeUpZcSBF2i4rvHi2YsnByqvaCeJs6RT0FA3UfI38XOdHJGrJK7jTBTDsHKUYvPc4Wh3AotpeGmD+BcBX8yCR9Jas7VXcuzkZMFR2Es3l4qXToNziMSZDH3nI4g2RHrUBob9JSAPaDarNcx99uO7WWwmx7Tt3pH+bIvkbbzENEdTip61OYqepmLGvSKbqDEtVr7Swu37JZ8MyuqrmGTCBysoKU9amlHtDDm5bkHmOxn0gN7yRvQtepVpTyikts5lDjrRLkFeJiTxS3q+IcrPpKrbEcSiVglRctUaxL95QpT5gEBsaMswFRSB+HD9Tp0Az6JwxBittIBK1GW9ZBsI1HeKCFNg+DgnscqdXGUiMcRvAbMFb/qFQ13GA+Y6nkKpTrzlwvpboqOGxW5mMNoVHe5vj1gZUn3l4APU5ArfmVU6FkDCPkJbTNMsaofDq5lWx7XmCcfYIUq1Oe5gTBKMNxJVmzM6rfXEVoGzxqYBoeiBF82XOIBLutPMGbAFa4qOZXKC2tc6uWZLu9BD1l4EHjE1LXHPMMUkv4mJ9vELcmAKuvVgXdbq7gLT1VKqjFN+I5a0mSKfMsPIfqYPa95mflWZSpnNy9i67UgVZXmMzWMBi0jSwnzMaYhaBI3zFTKrD4HoqaqvmZVXcYhsG3uKctEG0K5bwPUsq8PE4VOI0JZeaTJg3MljcNDWMyqAckUh55HIuZRJeXUskDTHrCwUp1KF5uMCsVnuFM3glRQWrcSjn5DMfIBH3Ix95sPSAEVoq5R2C5EoTUwuoIst4DUoWPVeYp6D5zLBmjuziHrgxlmNC8OHiDi2XGIdGHxNiFnhhkfbic4e6MSn08QUcN/MuPkOdftwEA+CNaPIjsK5jBuyahXrygVzgCxL1BcVj0pgTSL5SXCcB6pUaeB2QHwEoJbZdbMzEb1cz4OhAL7RZv8ACGWFV9IK1k2pdVAWtbtCgsG15lxV0eWqXMN1nOopYaZ1KtSmCxIy7CaTsfmcHUvaGef/ABYChVHmDgOKxEDNBxKOQRYNo1Aiw9Govlw5I57F1DQpfaL2Wc4izVZijX7ltquWqrnpDEphRXpUtKarxA54PUQOvFROfW6mACNkNR2toDUA83FMXoZPcpUPVylnbJgNQWR4HKMZI9XHiUTL4xML1USxCZYrtWozU1wD5gL3kD+Y6qC82GYKzyjFS03mLWU+EV6oRMmRW4DW5b0Je92y6mTiOZs/wSupd7c5mered4cfv6Q6bRM4jlb4tDvJ1cHGdjiZCynEZAKCi8TU1S6iDQPP2xZrjtjGZjrLIwRYmt6gTrMu4Qy5a6PmYSnVVfiGtwOSoKAeBzKNh5NR8Kbq6l+K8O5cNHbf7zKcC3+UgSEC7F4iXtQKeqMxK+VUyFbZTErVA28ENKXSTXUS5CWdb5QShFi1FhN8OyI1phe5kjPuxgmtAzAFHcABDvwxU9cDX6QxQWbl0nF4ZblCs4hQaVswazxvzMCFXd3cBzC/UPl/5wdrQ4EMU4B45ZY2mdPf+YFUgGAY7I8k1KZ3zDhfh1OVFcxqZ8NRj5GFDsPmfX7l0hFeHXEFuB4gPnq4mEGZLw3CAoHnaPo0lqq/WGqKSbbl0izOTxKTfbyfUWKGtUzXhQyQJgzxPoDxLKCty4pxDAiPEKbs1/M3eRPn+4S5bpdK+ZeUXZfJKCODb5v9YJ0ywC+F/hiBFZeuPPzGvQleP25hM2js9ShTtsi1gi3WkqFKKFjzWoHgV1fiPO6OY9N7H6iXqzH0LuOopQuAqmL4lActYmUCjwS8CAD9+JrZd7gCGsVxAVKndbYUA11LGg1Nrhc8xFYIDSJRy3GSrHrG
347+ bB5wpDxtvWMos1H4Tq5+ebiVydwdS1qpeXtq9zQGFX3DIMS3MMZfKX6Ww3uVjT0mCBcO4bUnxDoLK15jbTfUxKS8rLHWnGtzOMr3xAFxGwXNMww/AS+7MI5Yt9TUob4nOkd4Y0wC7YtTv2TxAXGUCBwCMWBhxiNeZsL1BKzrBvMwR71M1y01M06HUwHYHnZKs6lyrWqmplMcBiWoGVXpnE6R1A9FmGKjCg3eEM4e+hGgXJLVilyTRE6OoFQDbe/3EMEc4Ps/fiWZt7trGFnzG1g3Xx++JRCobc+IztoorcQMi6FavEsDHPicS26PM5ANcIgq0PbUJ8FPWo+l01xrzMQqjL464PiHLKTB8/5MoCMF1Ou5XfrLZjPJmWJn0vTAqRbXHrKEXFsn0jkUdQ5xnVy0JVL/ABKFqqKzFtgNY3ChLBCSTyxFnlJiA5OBuKQF6S2TREXDdX1DronIxbmW13BbDAzzOoy3dYqdIOo1bZgwgE97fmN6+iuWXR42zFmOxcIRx17wkMpFvmJrSzyTiC+YpyIGrjqK+ajAUHvF3ph7GzMzeIo1h66gFmPyS1t48TJjLhXqWUA8NRIZCHO4YHAY1TGWGuPiW9OfSWEvGJF4woOTP9/UTgllqjepl3Sz6zIQpUxADg3mMzjQ+J14r8oW0mO9Eoo8tfvc5NekXaitNXtiAIjdkMgqujmZASnL5nAqH+Jf0ZzrOo7IPJ4gvy0jhR0MX8i83KE0V9ZZRUKC9yo9KmICWdEZUTnNQxFTMkb0cEXWjgalFTISr4Oz/FTlL4X5zEZi2/5hvgKqUxPX21E0eHZyTKF1in8QUUXQfJAeZ5MU693fct8F4HiAVbVmRYJ33LDlFh4mFQHcAt1uaJVsOCN4Lo+4jUFELOJQsXbSruJVVdc941rqmESwH1L8vmK5XLGuKtmebisx9g8KZYYjpjSh60HJYzKhtyqCMMfqAXb3SjNaWvMBlNurjbEm/wDI0lCLE737w6qmSj0lBncKhTO5uKQMU1u/McUB8RG3SEaDlpqIGspn4giwpgOLlRl8vDPrFzIM63PJy4mgNrECzhd5+YZ1GeY6UYnKo20a81AmlKR2t6HxEJzOonBg/wCTGhp9IdsH9xzFOmIwqgr4iQumUrMUqB6RrIagbHL8plgy2r3mU4bfNjL9jL8TGHGT3RpaKtismcXSOb/MxtaQEipySzUxkXuOl4nHiUFqvGfMSHAdXEsGDEE2Y4qZAPn0jMcUqIhoMv77xhBbEe7ikZo8X+sPAHkJydH2OYujFo5SepSPrvHvFOOG6al/CF0jK4LmM5msoHSURT7hX9Sha/ulbFbx1MK3qwikKwOXH6x04rvHM2CvfERzP5m3fNPiBkJbnGuYAMwm4u0VxzEZdEeVUQgcjv8AfSVLANX3L2nNfcYUfeEhewq6l10uXfKNh/A/v8xrUlUOdf7OLTbOfT3iIfFhq6xslzaDDk+fxGtVrqIaSkM8pzHVXn0iDfiypdqFsXTGh4Oo4PrusStGK6yOovNc9xh0KvSLAsuj+4CqB2PtEEwy2F/vMr98uXEw/UL9n73LnqlJb3v0oZhBh4xW8PVnMVH+pjYLtyl/19yxEvrM84xVZs8ykEI9ElRmjR3/AJM5bAxZKEav994Fi5ZLO81AGYzpGLk40m+oAt4I1GqeZm2IVcjjmI7oZlagdoVFLO2YNVfkjQK2RKURQwbrV8Sh3cLi01VmdD6+koCVqVWgXXmJNniK9abphdzdW+25RYaiMomL/Wv7lna6cwBQnHUxCktQLiGBMaKCO3IzA9tlrXjH+y2C+We416C9CGzJGnPLmZTkrfctvIL7hKDEOVcTBczrtcr7Ib9v9llqF26mJrBftqWLAtrYsNYYtHvUqKQ6rSv4YV4DKr3/AH2lWpqj1mmG/wCFyrNnH9RH2Alg3sFe8OYeW4lYWZ1KhSMbLlVjozBnCPKZnaq3m8xy0CUxGo0F4LlFQX6RyW/7w+ZJWj0YJUYYVaA7ArHmYrkPZeWIBxgfME6viHd4lJA26jGk1PaFFC4BeIkurEzzn+5RvaUkK2YH4iFlrxFGHFzggc54mWFHZ4L18ZhPIPaAK+FcOoKVBhYCUm4I4RJDdRFBMVHoFJhCb096hVCxq9YiuGnBGTkDxKNb4CsQpqZ1EPBKjtLsuKys2PEcE0ghBaN9SxziFIoOI1V66b0yi10ul+pmbXoXfH+xjDkHPp9QdsNjdNMTEELdn9qVwe469PaJ2DYQdjeZhstY9ZSE92/E3Tr3cwvchRqq6hdT9v25cZFKqPbV6YECf3OmDWohzpFQt0rif//aAAwDAQACAAMAAAAQ23f7aS3/APm3+NCS1QBmnJJJJJJJJJJ7NPnQ1y09En+vYASJ14U6K1b15JJJJJJJJJJJk8d4lUwsyg/lQck7YE7JK02nJJJJJJJJJJJJCLgRi2eIrFj9Pm/JJJJJJJJJJJJJJJJMhHJNJq46qX3heBXITnJJJJJJJJJJJJJJJJJJwYv2w7824D4mQgi+3Gk5JJJJJJJJJJJJJJJJJL3llgVsUOH5cMit7hCUHJJJJJJJJJJJJJJJICNP7n1oQWC1SaaxvdM6Oca5JJJJJJJJJJIIBFT0WEUFWL/H24pe9zPoppcIPJJJJJJJJJJAqNqP+Ty28rpja5errope0ByZ/wCCSSSSSSSSCQcLDItSbh/M7af+0RFWsNolpp0txmSSSSSCSdJnt6hrzjj4k6NZsk/qNvbpcDK18xLsCVEMPMoNSZGUs+Ylr9slSWWjADJ4GuCU/gP1RGE8xIb4GR00oC/EfermKMHG4yNUd0uQFDWlxniJVuanBGVi45A4nsvJHebnONGiBDhQj5vQPoBJi5/+efv3dy8Dd3p5OSLm5lrr4hJG8Y+zPZ7dOvPpEJaFG+pMWY5iq0MtVisDooCJkJW+DIOWfyvG9NDi2Go2RCUqNmFS7WWAMHmGRfTv9tX8KShCuLgEDisKbjCvGBAJfbuaHg8KmnRhWMYVmVbDu2Z+iYsPxLlFh41pIXuFfJ2UwhAvD45ZFzCnWS64d73mWW/bKjH3csEYyVTMwIPmdAN5BUsUGsYclNP+eDNBD+zM9ZdijfkzePg3qlzGvpGnzo1ja1etdpC2zJ/IiJbdfhPRWSmw/tHy/GDTuRdwDaWf2gnGdchRPdrPEmCO1/XryGo05QfTu5V8UKg4MLA0nnMOfTNXYOeGofjDPkdQQUdQKtH6Io+8Jw3S9JSvjGxH9AdelN+XsBbZm5pj57zAevuiL8YWh8BnQHt/mzQxK4nBCOeIGmQYeRbV8SCHPuoQ+Tg7RfKmT42NwIRrfclEmLCJNJe8U6DPMXrOfx/CBJxmMNjybb87eymySkmk2xawY/CWQM1No9SOZy7RgB0HpjhzItk0IWPzylRRqvrJbeuWeI2QRI76+npB1abgjYWMZDInM/XrK3K1VeuvSAq7+u5tMnYryI1FhqU9ekVgA/xOMlpxt0pI+8cd5FWNuULvxSYJ27UPLGOA5NWoJermOUhBDTNBHt0+2DLKl7dh3tidvxyOK7B2Z10Jx4VNXxMecOHRR9Up37GzyUgXjtdtQTKMuIuDicC3v9kl20vvxUxXcfae7USdYLfpHhYCVJHiHNEldWj+ziFuBEYP4ltLFfyNg6gKGHeCv43UYMPwaeQ+gDF6BQ0Yh2CIMPP5obB1b8wWkapKxs6Em2cL0faAPuB1aqW99zGhvP8AO4XTOuM9EBVoNY7Nq42kVMuSVpJxEb9uKEEhzwWcmDj20DFAcWl/A1vjq2X6Qp/w3/8A8upbyDLc0dGz92brEXmdzEU9H+UvPAZv/np6pMkmwsNlOXLMlQcsKYMC097tihazB2IzbO3W3o3VZ97/ADbb2r6gebY2TNVQ8RDR9RhJlj6dcTpQOjkj2UuKkXbO9lsI8NyGnQ1HhSisH9zKgt9euTLEIkubmc8jjq/bQ1RfbZrqeCpDI2igxKJvtF78IfFprT4Sa/mV9amVFKOSp3co/tZILZfmxKgYXU7caQo5MKL8PgVkupVL6WcG7gwbZ5oCLd8ghdQQHtVpN+Ea8bgGw6duOuprQj3ryiBMc5i1rnCu2v8AttO7xfMFMUCY/VMYM1IVvaJAFw2c2t6ZcrAMHQWNa78DFBeh/XOG4VWPeTvjpziZ6nBE7Wt+y2FwgaU1M5g/AXZdjinxszXyHsXHUSjagM1JHCM//8QAJBEBAQEBAQEBAQEAAgMBAQEAAQARITFBEFFhIHFAUIGRsaH/2gAIAQMBAT8QzaZ27t3/AIZZ/wAT8yyyz8yz/gG2WfgR+b/wyyyyz/xTGtov8QdvfzWyTJbqfgS7kCn48tzo/wCrMezjHn5v/AP+OWWWP7llkQxM2Wfi/ufjP/IESY/kcIN/CdgtvZOP5Tsn0vGxrb+IGTPOwnvZssg/cj9GWWfjqxYgz/jlllllln/kisfxOqHGbz8OTp+dvJf5IpAw9v8AF1YZGDkD/vYtp8kxz81a/GWf+j1f5YPbf+Z1kgxJwu8/br1b7Ly/7uZ+ZHZo8uDb7yR9uPzLlsB3+zPBsTP/AOWOC/YP/Srl/GeO3a1rZQwuj5aOZYEOcgp0htdATpuT128Zht125Htt1tY52e9l2DSTnI6Q8tS19/EOmcRZwk6yq6x/6VdcLQ4W/tsdscFqYzmXTdjJrAfJwh7OLfxLnkk8kv8Abe8s/G8vYPw0I/sPY87+B/LGNPbZW42C5PpOAQP/AEWxPI2bYRow66Pk4bCRcnnYZi2u30XALKXdtjd6R8P4PYex7D+2H4DtxCd4XDYwOwbywcsxK2AdgXV8vfLbbf8Azdu4Ovko62kgu3+LapYXCTfJG9ewlXgJzh9sxyDQu/jeIi+lryB8IAcs3sI7FLMs7kO8leEn9sWA9mez/lq8sfJ/hCwg386dclTimPbf/K2eGyLI42+vxINTdy4cgUwJDPL4QJsrZo7KY7IM/DwhzGJW7kjMmewYSU5PraxXmDLsNlDXt9tlJsbE9Gzg30IDF5bK9RjywYWRtn9tnkP/AIm9C94Tak5xLEloJDUExYJZ7VkaQgxkHbAxfZGEq9lHSRLv9kNtv8tyH4nWymX9hDIsCOqEZto2wkEcg7L4gE1h/lpibzJcIU1ZqwIbqBHljdJPtq+txRsYRNz8Voz/AMA1Ok7MnAv2xxlA/wBnsLlA4ekC7duRe3mmMNPLs1ncJ4xvlJl5Jog9vSNMjDsHxgfJWZN7hPkn2BdvGEdA2CyS5HkuToNt5kXL38xzsHeyvlq3qAstCdBeSwBd/PdjnyLJncf/AGHf+C5GjY/PfLvyHYOdscWIbaf2E0S72Z1IQWHiQsZ4nwQHX2PhPjM6NhdtvTIs/BvIhvtj7MxjyTBJIW4sZ4T5FtxMeQO3OXXkuli/yfiOEZC8hvGRHcgiaWTmsJGWbBZJgLRu729vvt3yFGSv/wBs5lgX9uGoZx7KNLg5ATpJ4jM4DHEJ0bxgidsTkoA2ZnIKweuMQGzmuW4R5YNvo2sYLrFmfj/qdiM2E9JFwhKWxuMW8l07+FPCx8lJyTtj7K0+TL2/29csXlz0wHfZUhwtDbd0sDGx9l2EMtmPY52w+XIel/8Ag/gwU1nrvJw4wUNt3PxOHJgbE0WCsF3+SU/23/kwNKw4Y1zJvZEF5f8A+aQMiaW5IOTrGkO2hGry4eRr7eTuRZpAdP8AZppZyf2Txum/zYOSr5Y+wPs5mxuQtvMYYXrICffYJzYEgXHt0eWfYdICe8nnS1kPcLcv8W4/kE6cLDhaTsnyYbb2FuGxhiKHZOoYVQLDjb4K3mMWYAtOsIyNWaoyCe2jixRb2Fpb5fb+L5fY/BP7G32SW9ul7NF+IPdmJn2bhhgrI5228h3IGc9ZHCGcYbsh5G+SbYMs5NEckHhPAkG6tjyxfYMYYwP7GH2RHn+27ZBZ9n3lyGFoeM27D42DXJowCdt+/GHT+w6SXffJO3XX215kGN7X4Ps2U37DmyYYSR3lmcQcvDsKW3cubeIsIuJ+aW/bhM9lFPsB26A+28P8l8No79lj2z62ul4VgXL6S8uIZO9hONnBn2MSplo2PV11hA2Ndlrc8IFbW33uknVtZ38cedmjfJ4y7D3klqPSX3YcNuTB3bmoCMr8xr/YuLT/AIzekYYW6bBZzJyGQ87by1+28i6wSa9gPsZluR5XmPIpk4XG/wBlup/liyTYfsOIDr+Tp26LY5ZBsIeyeLY57Lh/Y/iV63PGP0tHZQ5HYvEu2PkdZkstOkxrIWAir2XVlwsrHIm8k3Z0iD5cOwWfkMNmDyOsuGR0WRs9TLMyOr/UkcP33n48Zf5Jr+PLpBIL2Hy8y/L1dMJY+yh2+hInLEH+2kudS7jCOJsMZck3jAWjLeRrYDJxDe7DesA+ywtsJGJ1uRAPWH268nC9N6Luwd/MJDudj6v+5X7dMsxy7Mg47aey17acMriZiPfwPx8jsjPtkkBmw5NPIWL+r1sbl7BXbc1JfbOR5aAn4l0M/BcewQoueW+paYWyL/51o5J2JO2EOTA9vWe+FnjI9nyRcCF/9h12+CT2MLD5ITsTO7I3bMT/ALaBY5YONiTuXXGBsjf5uP8As3l7OEZffzcb7ct3lmWI8n+/g8ssBLyWpB3J2zyWMLs3yHZC4QYLt05cz+xEV62N3LiwWbeYvAkmH2ezx7azn50gSDs4EhbYxOWKwPJ7MC/hzeQwyQcgxI5EHJk0H84QfZWzOlw9uZdMctdv7tyPO3sOtjETWx8t2U1S3C4kn23JATx5bPZwXXL1OInmrA8iL2xeH7ITJ6LpYB5DTkCV4wb3+MMBLaP9hHbCDYXhurlt9s326WvMsrFeS52TPkIbcLiCeKIFz8D2+2In+Tx5OrklsOnLP7aGyYjGMMsbcOWfmsHbthcy9gnztqll4l5POR3CG+zxgF2As7JB9kXXkQNgewCDtk8kYS2wNJdxbA19uFiubIvhIzsNWr7b3JPrHZwgiLNbhILUQ7GSzpMN+wXWQQfIH1v9mOJe5Yi1a+W/22VbeNuxdb/+y5sv287a3Zk7BFk7+E/F1yDslpsewgh24se5EHbLa6WQL2Uv4g6W/thrPlyiQNfJ8Xya4vkmLSVlmetvYdjzWE+WEsq7PWQMhN2TYW2iTwmdHIGan+Whyd62ucvkT7aexrjHvbB1jj+CF+dnwvvZ9hOMocCwyxlt9jz8+SfJJI8sss/sez7Z9lwjpZ9jrB3z8AnswQNhqX1S8Q49sEEMicPiaiQzy2S3D+OWXFq27P1bvkAMJzKnbS88ltp9sLbpIMnmQkj3KLCxf7Yjp1tEnqW/JNPYGdeXbR5E9J5KLZ3khm3rIN8iyLNvt62dlg2+29nLrsS9vsOez2wnLGDsnokXLa5aAju7e7D6WGkxmXAGTnPIyoWwN2PYwSfqRbW/qEs8WxkUtsvC8T5yVMtN/q+hPY3XIMdnBYDsRvOv4XS8TsuXZGJ43/U+QW/nnC3Pz7esAsMm/I/235dnUsXeocnrDS9YRswkrtzn+Jq9vNsgMR3+w+lki/iLGkeF8uYMn2X8ltkrdbh7KSn4N+Wa9t2EdYT1vVgMJjGPFgLVtN/kF6iCuF8ZDLTbj5bRzz8JZyOfg2aGX/f4c2H/AC1Ucv8AYCVEavZ6tgfZYNORoyEesv23Ls0Z1BHp/FvmTzP9kp0mx+Du7DUnT/Z1DHJxyN2WZY8t20xP6szySDnYExGZGtj7BfJhiMVyXmy97Go6ch//AG76XRkh4wd5YefZFrAvJ/Gy38WbOyfknI/AywNI9mBnLlkOT8s/tx8s7bMAg2M257dZakgYpyNgLkWbloJPmdfYRjeZ5L1sgJxeQ/kCMuPJM9uWCR8tZO7Zvtj+3PD84HC0Pb+15g7toE9LF+T5L9QJ2VgzI68n8Fg28/siZauJ/wAnkdNuMO8kt+Rot/yXXk9dG4ZHJ53YAJkH+PlwufCEvlrbWPJ7B/IQ7BW3IS5bxFmMoFmtyHGB/wBJS7D/AGVY3KCk4HLf5LBIIDwyB43ZHyRPbZeXhYcJcqXiBaffJC5M9jEOWLycNZMuS2Z3JGyeJfG2/ssPy6cixlha2JsFdvgXgltr5I9bxbzsnfxh9ufhyy+X/dh5ZtgyBW2vl9y+S5EuNX5hK5DCZQ1C8sjy18uewDpPsz+pxYfZzYAJX5Kv2w+tw5MJnZye9FpzJozef/Iq9vJaQ+pUlZk9jrIkbDxjA7ljmtyekFodbZ231+TGz8YsTzyeodqt9gJAnWD7OfLr5Z3PxH8s+QZyM8R3qwI2cyxt/ib+2gLYe/lryJ0bDcQRj7ay8hpe/PxQPJxeWrZJnn6I8sHkR5/Y8oekaZG8eyt9n/FtOSfYL17IexJkdcntjO3PJjCVgEQxIPYC/gNWnyxZARFjzkcsuTtrYNy8I65J/kHPITQwLZT8g5yA5sYOSVW1vLxvsHecInPt5PLA9tNtiQyQPLztoS/bDNbQtxsKMYFZtmfb5UB26lOfhAOstuxo7ccbPMt52863XSDdl/lweWtNZkv2FY5F5i96Svj8BfydN/ixfWAXVbYltEt7ssjmt8di5YhtZH0nsSJ0QOCZvBHFOBY4/kYH9gILoggSenLPkw+2XIcdv9YH9s7yC6Y0sHJCbk/yW/bjsNWIzf5S0mQ+2iX7APJyQHrA+Qt5P9hMgJf9IEBYGBYhmn2z7Lr92xnkzYv4AwPsDCcb+RDrD5u3WH1uIX9EIyXrKwX3be5+FlZYxu2osv8ALi3I1y4DIbRcvPLp7f4/AVr+XT5Gp/iOY8IbBu2xLgcvlAHEh4f7beMhB+yxuwOqHOSm2eMI+3f2YLbD+NrYXftsMZYWBaY13bH9smH8sdjgG0z+DVj9tnPwX2Q6eLtA0ZfXsHS9nZcGySw2xBeeyG8vDWLd8jPIkQ/qJnwg70jVvZmCUXksvo2t4w7P29KWbD4xr7Lns7cnytfZe7t7zZw+2Pjatjk5t/pklllhYTz8PZJI5cYOzpI+ZCDM2MfDL+pD2Osh8XSCSeOu2vjlhg8nNNyrbNwm5uzp2JBZIZDblnYZdhQebsmdnMr2H6/Bt0j4To2FtInn7FqWcmA3Je8I3xJNzOTlsd8YH9tv8n+BL7AkfEYdZmY+kcX/AE/L8LCwsiyBb/A3H12WQhvPZTV7bONiOsgvUm/gPxlhOpyIH0s7l4nS6DPEtNsj4WlzGdjWThs/kkWMnprALjyZ6g/J1w8sHt6wu2XNIE8gsJcPzf6WFo9vXl16Wn8lP5H0mKLN/wBpee2b4wvsRf8AZLLP2wsiz8RLtkfxhvb0R8PJJ5YzGA2Eu7+aW/y0GJY3ctfRIcC7jYuezO7CJy2d/OcD1h5WEULLFce/g/y1Lr2wfZ8QR5OuWfL07GmFtDyCJh05ClW/Vj/buWPy7Cw/v2du2J8tbsWfbT8cfIJct3s6tmdh/sPZLRDeTi8kH21tGxhz23H1cQvYH40hHyID6LMlpmQbgkrz8hHkI4zOMjuNlvsYEdie+QL7Jeljk86x/kxvkj9/Mflkk9nLc/BM/E/ljZjCZ208jjsq/bn2bl1y1/JRZbPfzjJ2OxEg/Ht9C+WcNzbQeXSynfthJYn229G49kR+Lt24W2zGm9WwOxjluM9/A8PzUGWfz8JRgMuvINgbiQjw/HI1lAnX8X8cLdvS/wCidH8y3cfizvsQl5InZf1OzYNvIbEBeMC2X8RfskxRg5CD8H/Uo9t0gz9NQTyQQmwxjA4+JTsV8LiXLW1EL3fx+7D3W13JgBC3tw4QhxhJcmc+/g3saPwSj2Zz8NBkatSnz8BfyQ8hjKH9MfJT7cbD5Oxkh5bIDeShIhwsE2wzIgLxkueW9i+SNIjc5bzsushWYhbVbVeWiWH94/pYfS8oSvSH8JDk5qytt75aXwSWMYvL8jfrD2ZSEfCN3Czl3eyaz1YbNm5HJwOEmHL+MIezo5bWFj8phdEiJ7BpYtHZK3J
348+ YDZCz8ro5c+3Lv5I9knsF7MaIUzRl/EGt15fW3JbntgnIg3ll7b9/Hr5a9gxk38a2+WPjJ3YHs6TiGotsy3rej+wHbI4z9yZEU5c8h3RtPbnyR7CX8Y/2+qf5hIz2RuDOmWEL7+eLpwIO9lpLk+U5cbh1CvZRtfSPtaYYXJ4QTNm3SEGs/SNWPUA8nTY78keWy2Fw2n2wmFybMO2MnLI/OIcoMt3KPLvL3LZJ5+UfkzmS326GShjaFrxL4k7fys0WGfbAZFnOFhwgiY4mdEDHkZDMQByzLK2f4hY3YUlwbdHLYcsVzsI7K9v9JytZDp3y0S5han5BKkJmkYtypDGX8tJxj6Rpz8aHtk+wc2Hxacyfa0Ow/IH38HTsN/pIIF8jVwjP2+OfZIkByDMljBn5yTISJKADyBdMnPIfZ/mBeWYsHy+cg+/mLywewdgLNj5adsJOwIyzUP4my5tY/wBsYs15CDZGQEtHkLxA/bcdnPlm+XRYzrI9LTB8ukdMZJ5cdtfV3bcfbxuMQ0xkCkaIxyFHWRLWThy79lTtr8hFh5Kdk+wjz8lsf0XwtPxxsT5KLAw3jD2Dn/EAFttm2N12S/xd+2Iq/l9UVxgnTC+QRLYsIlrCWHeyWbx2RZI9hfbPhPe22xIx1lZPE/5IQZ1/AO5I/JHEn4lDlrmybc9lGVQM8ayk94SvIqOyQSZ7IsQH4w8l55O3n40v+7QLcIdmwgP3f3f+G8uf8OWH2TAsLl5H/DCSyfhmIn9siQyWCEqw+30YGAMjLsBtHbFuF6kKWchDK/De8dT5y3nZZ5ESLOzluRJiGA/970sWyyepTeLIl/efm9jd/Ok95MIYJB5dms/hn24cjxtmWXn/AAGJj8yzLNks7bk9/Mksk7P41bs49sbbblu/ifyPLX8AZoHZKxkjHkYC1OW9sOf5fxch/c2PzMtlyVtCPNhy2OXtkuT/AIfm5bfLZ1CH5ssOnbmy4TDlv4N27M7EPZm52O3yLyZAkxkCdXi3BlnyDDINvJ8jsj7EJ7aZNlm+Xlpsx2//xAAqEQEBAQEBAAIBAwMEAwEBAAABABEhMUFRYRBxgZGh8LHB0eEgQPFQMP/aAAgBAgEBPxBiGnz9wF8v9f8A+m222/8Anv8A/bbf/VaScP6c7/nzO/XPPr/meQ3b2D4jXIMhnkjapsD5tGWqMDll5e5T4kYYc+MsGbv/AJ7bb/57+m2/qf8A8dt/9hV58f30uL6f2Z6f6SV3MujbxIDB9T5y9hzt4ycGT5vPbrH6ZxrOf3+YtzGf/j7+u2222/rttv8A5bbbbbb/AO0J+ghE0AnPz/Pf5tYOD7Lkc5lo6RtredZ+UiZGkB3Z+kau2Z+g0jDHhz/qR9bKvWTz/wANtt//AAjdWQs6hp+ITH2anff039N/UiO+2UT1gAPc7e5fuHDeTdlcvfZ8/TGO3wQ87Dh2F3ZH28/om/oD90b8XzXsDAy0T/8AigvkWw6kyESUbnn4tZKxbB/eUl59wxOf1u4YFtD9/i1C5+/Yirk0Py/whRO/jL5j/WOJPybZa/i0iF7eOW82TXSWx5DmktPZOWsb8/oT6fPYA/8AosZ35KrrP/4uuckaAViP2ZWD/wC3e71/0gLHXxfKi+LEvj/nk7cc2V9zPwdLZ7JRuxyuPxGuuzAH+yW+QL2XcF+IukrnLr6wHxJyeIObdW87H3ftHP02E47smD35mo6/14fz/jEg92//AISQXzAsDfuGT8QDGEQatF6iAhmLZpw9xvl7EJ75OUeyePIkUDy4OxmMgqcf2/ktN8jYXY9yOeyPi3se5J6WhjJ0tDbh2DZctPj9MiH/ANtrRjttF/P97jbr92WWf+5z5gNeWzvPqQV3IcF8YnR1/wAy2cPYBhQkOWJnwkzDxgqzz0+7ZDi7/vdKY11ctEznMvhB+bFcOdmefFk4NvpsFrBrVyZ5Aox1sx7euMO3rJHLGfmKok+8lbO9lzhEmQXxGk0PllMAssHT6IvkvO/+0uXD+b+XLN3F8CXHyfMWTyAgv9r7zOM2X30JSYYXzA6izVIuwd9f+rRe8zZEt2x4QNBqn7SutqMn5hFtZNCy7s4NPi8cj+1gGmP8sL09vA85/eDu292G2N2O+245fWcIMP0HUGQEhONuMpKM+TgvnxdowblPl82zPbt7OP8A1NMiz+ZwJAPl+LZh7DC/HJl9N2fhwth3siFmfV9KP+bY3zj/AKM/f3Hth58TD8FmT+sliPI0/oizc9/4gr1hMm6tf5lppbHZkTme3LE4Mba+GefxKsUeXDkkDgQA9kbvZccuZt40nTYBrL8Fh5aJ6sAydxP4j6Z08y+e/wCPmzuZE1rBD/5+ZOm0CvxM6P8A0BDfmMX8QDTt9BLt/wB58piHLDXL0WOQUGCyAfcRnvglV0vZ9/z2375a8AmXu6f8/e5Ju/2j5DMuxfZQfiEJdDD78kJzuf5tsZ8tJ8SDjHgSGxDVHZtgHZ2n5tPwCx2lPTy/KcA6vj/ePLBIztpzJXstCHOxu98nvk6/MAi9sFzjr3S+yNnHsZtx9kkafxOfE39zPp/vP/to9/8AF57afovlcHspmyUveWouc+2J259XiFsTdp+f/sjzdZQ9ee/4yLR3P95Hs192XA/HPLrMgF582kOEyIh9p+8nH8WQzI4QfFl82+yyaRHy7wzD/wAz5MyHxkRX55/xIz/slnXll++T9+DphZcWwHX3kDN273zMsY6l4eB+Js/OZPmTrmW5EPl45jIobBzst2QzWP2lD9DI20Qz4jecz3I067LxfH+f6R2Wh5GmvsiNZ+IBr4nVryAInx/p3+9kE5K+iTJjLErD/eBIwsB+9wJdHwuXhlrlHrn1YE+c5dDOPz/vDR+OftLqZp+zZEPr5+0AQCMUv0ds4Xbjr217KK9hHqQIFjST5jwgel6AlHieSrZ8bj+ijxOsG8XT8zrcPCRHrpLu9PY37gNmjPL5oHr7EvtyD19zHnsGKcR1OLIRvpYO+sv7Fkm3XSDMN6xt2D9HBs5W+3yQte0f6xxquwfPIMD2b1zffsnNlp/xfkbOneQIU/6urIwHycYmOk/cFn3ktAcMlj7Oft+YG34noDhuGL+LTHAx9wPH9IBr3/OQHXz8zhJ6NlnQfc+SCx6Tk48fpGhkkcY2hyxNOQfF+c4Nuz3l51pX38wBjZuz6vTV9UFActpCi9uY9Zn8EZ6Oe2jjiDpF6+G/62KzI9nzyPE4wL1zbamwp2AuPclpYJ85AT1krUIe4W3rkuWQGT9kCF5G1ObAROf2D3+tjZ8gtAX+9vg7OA+Y6ot92358PbKfMZROQ9oQAf6zjhmm2So7+ZOKfNrUAfJN/wA/NlQDfeQAJ8k+w7IfNwj/ABmb8MFnORDGB7fuW8SDl9oRzLO3uto+ZIeX1l3Z3bA7ai75H1lGNPO/xYp/MgsTdWRKMjsj8zFq+T96r38fRJ0eb/jKHEgTOEiTFc5LD7OQZtgdl1pBYZjkri7ZNGxTsHYIO2MOxgeyNZf62MR+bhD3f8/z6n/O9I4HPiHZcyKNQB9bHhv+dmQSznlk6Q4atsXGHx/va7cX1Af5/rEg+XP+LIflQ/rHbk2Tgn3Ob9LkeoUn0xcTzbYvH/W4ZI9LJRJA5BwI37L0heJKfjaZYcgC/Mhs4mWibLhZ9bFu4XRXX7zemvqD+BNFcA7/AByNR4/rJahHwQfYpY46nYDfw/5sk9b8ToJ/eDGM65+bHfnkgFr/AH/z8RYWF9C9PxOD7jPJUwIRpYI/LCBsa7bs34QV7aGFvZCPj2HCFAemSDrLdd+LIU/2Iz7sbwkeB7Yy1lmo/MG1/wAxs953/P8Am2tJn3szXzsmfBxvtPz+bbg/22c95/eZe/8AF0HzDc+GUbgBd8Sasc2B8Th2SaJHY7fAtDYiH1ddWgas+kuGx5SmcnZSL5jtyH6IdTp7OBvXj/Fo/aYzfYGZ6eXACHzXX/SND9r/AJshPYgqdhS4hD4SgvTy7HA28D8wB5MPbjiwuk7dhkdLfH6BnpHWZEDaOkl1mQ+D/SxQdga783qIw+n+dvf59/rdhZq0+JjDGpr8w7yRmr7J8N2cDrnydl2PuFyef3tJePx/vfFUoVaNz4sQ/cOWY7fE/mH4gkfLR1Khg8sx2xOkHYG9hvqaEZyyLtrI0SQS3Hv5tY8LtOZGz4B/eRkgTOl7F6wyHhgfbB7EsS5Lr7MHwfP+fzKmHv5usesaPzMwmGyboyJ3+kBh5bd2p5d5eRrkK63Tt45IScU88/E3bt812Fwzt1TmZy2B4Ns76SpTxtcJ1gFs86Rps7L2SsgKmdAxn8L3EgeM4SHch24jLUh934sw7MD0uPfbxxkWRaFPL1PVWBuQa1luLes9Oz5kTOkIV+Pj4kx6LULoyGP4FxvB6sxxXhPf+n6sZG9gL5MZDp3+Wc9MCfmDIaWOFyBMtPAgzwtes98Lnr7erXiS5GHLO8vrdYDHIb+Vp16NyAkb35JHLgZaIfLtS4xJ7+XrGVj82tNmiG/xJhJmtsWOrFdnM1tBbu4GwXNyxzbTJ7279bIbZ9wC32e5GQZHiTMucCmpVgIa/iPAzTTy3wHZHPgTbrm3RGEKur5Ih7XkpduP8TYfD5+Y3+y/7idHjyRbA9LSCXnZ+OLOx1kAum3LickNwOS2weQL2FpEOyc2DSe3mDY+Dp3Ypj/bMEeBBeYnYm/iEP0kevzKaJbzZp2eH1ZoNhJvhGA21HNgisuLd9TqyKz8S+U94nqX9ZbTJQmml9rch6JXMll4D2DfYoYXBlkArtiOdnhy56+MIro3o/EhqOxD+H7vv+bl/CNpmO/ufNp+QTB/3hKf9kcLVhn3+bOCDG58ICgCXYO5AMGV5lhOvJ8uIu9jUGHJpB8XEHN/rLflFAocUfX/AHJh/wAa2azr/SAvXyZCz5R0rh75D0joclXkz/acDZG2TY3b45OJHxKcRxm7yNMQWzfbz2TRvGsTZuC8Mchb+21yHYizuscCAOwBtr+GwYQGO7I4fEr8z+0tfwTvJ3Hj7KMb/vdT345D159x5nv38yAVig6+n+17D2I8Tl4YHLb8TobDsggMiOWa3hIC2MgFghycSzCFo9sYv7Tuo5PwPs3APns4p/wf5kOGvWEP2SxV7F3j+Y+kHsnovR8XIvjb9pdyE38S7GxZ/VTbajEHf0JmXEBAjrdNkpHXYIIdsFvnI95cuPTOEBi1hxyQi89kZH7Q0Pv+k4/Mg5Hc5F+T/Rtdzq/2IvR8W3Pi5DuZaesmGfN9p4+5Pqx8fNhl8JOs3WWUy5u/Em0WwjPP0WjRgUg2D34jDG+L3z29oeFh5cuy4fUSn352BYF9tBvklX5CH4iLgtR/lyBsSPPmwWUgbVYD9llMEeJ11HkeR5aQW+iHJs7sEdnrAS4Q85cOsddkzIR8sD21JUr6/wCFgj8Zlh1jaLa+LyX2cD1+oSuITdwhWnkDvUe6dJfuXiwHW37DXdkIvxcnP/AGtxKZV63PYM35geyPq+fiEKPz/NtD8Fg57/WWw/6szkH+ZaNeSaBYsyTF3GyBj9kcQOr7IZce2XEFeR6WphJT9Ptc8P0J8y63NSdPIP0PZyPuLY9h+JryxdvpDhk4/E8hJMX/AImswO/uzr9/5yABlVeQnjyww1+IxSZOHlwCX3D1sPd7bkvX3ZPPYdIxqN7M69gVO+7byGvf0EBYQOB1lAXmzKDJh/mHXpJZhLs6i/egexuSuPNl8fIvY09h7n3fyFo8kj2wfmGjedlrl9N8MW/p5+m4x7brEtgNvy23F72xYa/Cx3GDTsFZOR5GMwH8Ww05MZ+Dn+8u68hMLWz5nL8t3w8sEtRkbeCTes3msv1POJW38y5M1uQN8EmaOx7Ma5ccJXhbrxB26A9nwef3vYzPLog+uQuDtk7y8PDJo+wvDYHH3LpOGEGQJyyyyTJ8ibZYYz26b36n52XfdTv5JdZSErsAxu2T678z0SUXfiNDAcmZ/hCeQjYzD5i0XxlhWS6m7+YxkZ2yTHYb1vHbw5ZZVg+52xHzrOZAHty5sDMg2MJD9M9l42Zlp3d2MErHhvr/AKfmVEdYK4P+pIxJdMu3JRr9x8d2Zjfgy5H5nF9Sd5c8mP8Awy6Eguvp/TnyIGae3UNsufE7vGxYxHSHcuGMtLR5PeN+/fo4ydvRCyKJPqdTGxmRvZeSOE0zdP01TGHWwNjCM+Wvq+CfxtOWA7YLheWPIZB8wzJh7KHMxgfYSe4yUH4ZsxgyLz5hj4QDHYGvkucvR5Hy9ss4I+xk+IVnvR/S3Ln6Mnb4NkKFzrI9kCRkHhaPCGTmy9liETsH1B7JfZRux856sjOSdLmZG6t+rl2ETV01lvkA9teT8LU5AjcFE/QBXHbHt1M+SekpvGRMnNjEpgfi06kOdFkziDHCz8lB5+PuGgcd8sPU5AW/dpDjWZfRHBkAeWU4+24Y2nJEYfix9WX2IzCfxvrlfmEfNuVb6pcbJ21HbQ9l+RFv6PWhPZhnY07fAW65fAuzfm7mBw8sCbnNnwOfU6Z8wz2wO2PiWbvJ2aeP6eptodgzSMMtID2XPbTwunth+JXlt89t5yD7OJrLDjYTnLSXCNA4P1y1fcpxOROvpdAfMDcfm+IXxPsZxlHsRzdsJLSHrsj3JpvCVn4l2v1HUC6lktT59oT9Jmlv1J1rsm8s+5aANvgsfWxoxjDls8WI/mBfpdJXUHEi3brDZGkUeDODkgcjB0lknhkOpcZ/ol0keRi/DNwcl4XBAywyPqAP0g2+bK95ttPmQ46TrEcAS+HydmTPCEP3sXRtX8zLSETaJYyX4h9Rcnsy7e23gtyUkP0d22uRHTl+l0J+LSGEbix6QyOG1fZ+xZ4ebJFzsAbPp82viGY3jsetlNb3sDlfic8fN3NYNe2gbXp5HWRx2Mhl821evL6FjH8LcNlM7L6XXMjk6kbyOCGtmhz+kHoFYCRR/j+JGb1+/f8APqRF7dPjBAHX2B15fD4Q/HxMKltQYgSjaCQ3YGPLV6zPnuAgG3oFz+nn2H8XsS7klLzD+z+jhfjdTYH/AAMko7sLaCf4kskHJNl5l9hE6WcPiyFgMfWfs2h+mA9h3reNkb7df2sGrH82BsYHiT1jkNfYHeEaxt1gBszntg/Fg2s25BxlHVn4kF/sWCHLLwlzEg8Mk6MV9sRrCPPiYxbZnkZ32B9SA2z5JzbiQ3rAesAwY4RJfzP8tq8LVnT9ATy1jAu5/wAR2O/Ba8cfxG+P9kBjre+Tx+5Xv+lg5B8QPxIM28Y2h7CGs6VdT9TJMwN3ye6Fz7E2wBht9GHiH3filJjeXywWMcn52ntl+Lt5dPJC+R+F37H3Th5MHMhe5p9yXAydfOQnzC+NiyvZU9mgwvGz8TgSh47f1SvzLvy3Hdj5XLoXitBmXwpqifa8Ep5IbjP0YzS1FQWBr/ZBHrc/F94DnTUJ/Rfp+kwOsLn2Ju/cNIsZl9T5tjfbsQ/m9baQ26yE78w18hzZw8hzCFIG+SI+SPtzyR92pwYWAfMp8vAsoD3y08kblxxnb2K0sSTXYXxAefpDEZBrKJCvwJ34Rh0I09JecIYeR81sb4LLkM5K9jTrblrdLV6z5B3jJnzYH2F92929eRxsKAJGnFz8Fl/ANgky63B9xj1LoPR+rvmWfDpC5C6J4zoa32mIAtCQ1+LoD6iWBY8s+TB4nT2SZD7J8iSHxvqgnhHzSKBFjHtyu/LS6Lb5bv7fAlnLkywjPYD42nCz7kcSniRo8h/KOPYRPbzxZb1WXsm+/ol6dj7Q/Ejy/eH5snFsz88MD38yfsgjfZQHn9IzuB+bpeWm0dNh8tjYENTfdiOmOQQFS6RpcqwA/MZI2E4RwvyQbSNvbdZAB+bTeMYlCDyxEhwSH4mFDGjP52nVtaBI3sBZ+x2xoS92GfmzHUs3gSHyc3Q3TnJMc2VntxbIXL20ewS+WnxLnxO4SOpPkPxlhm26YwJDfi8MvxCfNr9WkNw68s4BP6WGGv6xFLseyQ6s5D+5UNtl9ZQjrJHr/ST7n+82RFqjkPnSwFvjZ4RRj6hcBS6wP8xcQJ+ZGnYRz82MIPWJ6SB5Y9+fqXf3hu8yMcu+RyXXJYdekE5HyeQuvxAumfxHutm3fbwIR0EJ1bbJtGB9J02GwB2RNIBiQD2+kOQy06j4GPoG3rlieww2VnJR6XvYx5PXtq4zttxtG0EuM1uE9/QhDjdwHdhftmD42L8RRy6gUj4IEfIIOY7M7ekWxMguHskLgLDnwimPt8Z2I8lLcTNs7y5uX0/QcPJHiPv2W8hLPMgfPv3JXyljuRXCNXMnjAwf0n8b1tv4szsv1HrYTcgBZvlrJWHfqQa+2CZK8YZp89nFs9yUPLp42SJDRhmS17GIT7uDAhXCAPL8DY8YPgjjYb07IM/k9ryy1J6ckOAGHsjpI63U+YREu0YwfulGfeQ1+h/ePRMJTrYfgW/WJictpdg98n7wXVKHSRGQPzd+Ns3YcQ1wj4TXF31W3lnOxrliMK4lGLrxkHscggNyXuQZstcIvIcaNgWgkPLJ+b+CA6Nv3YckNj8I0208tkjPmDOZddiG9Lh55CNEutu42+m3xZZ1/QcEMPbLrI/I1wHYHT3+bhZNBDj8l0f0jr7ZIPHyMOlv4XPpdQ3yAN3rZ+Pl0z1da+LCCJFdfqUF89i3Ty3XkANtWHlg7lMjpF3XzGfi67Nes8MZck5dOwTrK4wnZc0Yur5mZiIutn2iwJx5dfMiZI4zoYIAAnTIRtpA8JxlDhAfmHHbSAeXPHsoysg5ajYEDvIqyGXyt6foD8MX5XwE/cQnnA5ybw1jIzjkg0+TpEmdHlj5b0vsnx8WKOewoO/UCzazH4YQzNZYci07uxrqS77bONhT6yFQM2T+LY1s9eSVy6ZlzZHbmHy9n0uiOiyYMkGQ3lxMBrGzZXbatQJjB8nySzI7MhKsu6T+4Pq6bKtvkgbhLzLH8UbcY0Y2nEvaTl2RnI+0JxIvGSeyE98vshjkIdIC1Evzdb5AH4tABz6tuvD6hTObgxsI+f8ASHgw7DtqcjJvq6B5ctTtpAkTnxYtGR5jfzbuCeWHqQMyHmaHDBT9yS3fLiL5d4jtw7ANTkkMRt7IoE56LEcW4HOWR5yKMMgutt1lHkwnJPTA2tBHdH5iwCx5g6J2ML3IO8lzF1LhYMbqbbaPCE+IXha5Frur8JQ1Xm28hCdQmPif3Nn4eTjl6Jm1yGsuDL1vLATfOaZvLAGOBngYHOfMALmOwq7EhObk1yAw8tQRIxz0kEV1h/Nkcf0Ill+fJQ/hJXM5L+CwGwdPxGfytipckjpBnl/FjFtHb0Rp0iRB1Zvuy/GyuFuBEyPZOXfzZak8bAVunpfHdAlJsyGAgd34uMNhDZCwJ9yBotSGxxnZxOQxg+3oOyxibQIudsaMo5vzBdu/PZ3201nA2DrDK2Ji9LfVTnM2FgbMK1CPZHTyVwByEvWEdPLFVzZRwyReGV07D9xT6D/eM8GQ2SaiQJl3CTMRRgcxaushH3th7ObImHL6LUcXwg4Tg/tc4Y4Gy7t5E60IM2+WQ4sBkh0W4fc99uQ+o5EAMjl7MHvZBSDkGEE9P0T5GAeSvcstR1A3GKN+CAxD4uiPZJ7d3nsHGRAORhhkgp4urVD424dOwI5OnV7tHbUiZ1gho2Lt0X3GZBuw2xZAp321gs1adICd+JOY9tRhcAezmo+JPzvWykHLoEiMIPz3VyQdtfCQOWN0PboDKDD4kVYO+3wvJXygbbBWcOr5CPPuPJ3btzuWk35lr6nPZ6GFeL2CRHOQj99ro8mPDkz0Lv2x1bnMOJJuT0ZcLE2zt+SXhWwdQPfYoct0efokEv2IgJ7ZD8r6d5iW7Cfi0cZ+iABGO2dEsGLY8sV29GJ4Ep5KJiI4yERKDraL8506x/1jjA9lPfAkMZO+JYxg2NWOsZyeIHfn/S2PSWI3n/yEfJIHRj/vdLXdsGEX/gw0gJ1/jH
349+ i8st1YPbNV6/8Ad/L/ANLBg9sjHfIbF6/Uhjk+b7OIv4ErhBwln5cPptH5yTjO5IP+eXIltyaVYvzLHBBHBa1Hwkb0mdvkz5eQSvjpYtHn+975z8RrPkH8wg5dTO2THzKYy6cdkmXn3IINkgHnxMnYDrbP2sZtr1asQHVWtcCA/mMhPNEY+Fi7vkqCkXVtYf1kN7OitwXsh1eQQK9/tNoGwEixp62tB3kIN5tuz9v5h71+D+LnOPzJ8EbGmm5F7HOL3Pq3ydG6XYdPowjRM6PLCaEZrG6cLTnZ/IRnjYaYd99gbJwH1JQTVPJVi5YPmy0EHJkDcz7/ADZCzDE2978QHHnzOBkYb5cKO84/7QVa5OZW5a0Xj7+L2PSQ6kEQ5OHmbeIc+5KEnYeXSSM86WXSF6G2O7Jn4R6zyDk9tsPqft92wZ/mSZ/Ra8PsnyJx+l9XlpY9sonRp+14Z/MATGEHx/SdNC5BgKZOx3rJgt4a1n72tz8n9eQhn3/X/wCQAAcL2Hl7P0cmQfy8LFHzGXhl+RP+lg6PHz9rc79yQP7f3h0adttbdOfuTgCdawHCB78/5u3vJPly+15b9TPJc8fcFWW4fpZq4RvD4uIMtKN8Q5J3twzyFy7YnNuRarDzeTpNumuSdPbXcENdORl34ks/zcKJS5Ode28fCC9efEgn1f/EACoQAQEAAgICAgICAwEBAQEBAQERACExQVFhcYGRobHwwdHh8RBAUCAw/9oACAEBAAE/ECtnzCptsBSQFeU3bAgsUg8Cdc+TZnc/+THJmsv/AMv/ANmTJk/+/Gff/wBDJk//AM3/AOX/AOhkyZP/AMu/qChAjsNYXV51cWfQLVCEoADfBVRxaAgDUFduIQ0TT5eBJCzXJ97xQFNGoL8+MqEqsePFn94x0eLKneKIXaeD+3GZ0nLhc06Dzql4x6s9Q114nGO3lIqgHY998GI+QdL0fvKIWVHrrHaz6wQEb8azV2acqLTJV1sTyIDtwyqBB074ITwkVF1wPBIQrt/oVl/+XL/9MDJk/wDk/wDkyZMTWTJkwMDHHI4Yf/H/AOTeTJ/+iL0ZcBVUCpt1YYXT0keFzwjzq1OBzdqtHDqsOAOv9ZYUhbX968ZtwThQbd6cCLRK5P8AjHla3jwxBZeB3MCjd6Xb7yQUKBV+sJIbu+sVNAZcP6HFFLHVHvrBswhFXAYpQSHv9GBQLweT84einzi141CCEEROjePJj1SSiI7tJGURdO/GIiZjqnpK/nXWscmTAyf/ACYGTJkyZP8A4hkMhk//AMzJkyZMmT/9HcwTz+NEO+3Y8g+MVrS9XFalzvsrXG+xs1RWNSF/ejZXkdb4MUElcLUm/wAuBKktHfvfeI38mzfPfXWGEBIgbeMGm4dKGA20g273luNJnqT/ADfrAIgXlNmOg0QeHzgREE0NOIH6H+f1l0BQb9fnOigPXtxxAq7P85ryPe+fWcetbNJF5gXYdTY5J57Qe0YBedTLOrFaIz1Xk3xz4w2UJQjHjWT/AOI//Eyf/wAJQnnmMSE1jGzKwXX1i8bc7SfOEoSXyP8A6oFWGCUT/wCkLaJEv1F+RMIRCIdFwKzcTpdDcHBcgdn1DwklnCYwlu6MF0rAVq7HkRUDWKM5A7nL7feLSiSbti774V+ctvx2C++zHxIdUX+zCtahBl9Y0ja7i33ixCOJ4T5xiDpNN5zaqndSA3jQWUgpPeILRqIEfGHpWbb7dfeEUqjQZUeMLvuCpHBiXXfnGhCsCF0PFxNROgLGACGxHoOYQciFDKFrUm4opshM6kHygK2XScdZRG8VIo0hEaMpTSkUP/4qVWRQCrPBmmhEDoMu3qHzjfnuaIoByXc6jXjB8ZXqIN8e3e/o7S+ikKZZThnms+sJtiCl4/x/ecJzLANlLrz8epgyc3YRt7gQ5deFwY52tuKPVLN8795dH0SJZ2cVh+neEwlCgU51tdf9DnH8EIIkU47j940fFMLQSME/DWa1MsIAUfmABAW4uxMvAQDd1CdvOOFroHl7yRrtR38tHvvxi7pNqAeevOQyXug19vbvxlIoNDfL3foxjUMEB0af74wDuotrzkIhXg95sWgvrDQVnq8v+4xpOAaeZljX33rzPnWINRZL53jULvqr/jGCniV/TKm5b3E1dZQkBBNgX/N3hLXyQb847J6yDRVKcpej5AKvDjoLSESGlCtk5bK49bVgaNBg6KBwgEaSDwSgYQDokw//AIrKhIGAn7/XjzjdFESRXbsRPcoczBpJ4RKenLr73NZB85TGWHItaY3rGyjEVIDei5502bHKGEUConKFdHyj8h1BEVSZDWhDT9ZE0rlsUg1RTnyHpx6RCsFU4BTT0fJFSkQXEVOaHnn1w8tAWU1scaFCe+mjA8YFIDyW6TWt/ThwuF2ZU897/wDRcBeOQ6O33esq9hBGVoUItN1n05u3n1wUDR1Xm0k3gikJSXY8/GULQ9gsa/xgAKrwvG43xrAV2poDvF7dO3oDT+cXot6eeDeK7YMVb7EkyvQOoMP1iAgu5hB0q6r+MhFOhwe8cBIKG+Ru+WYECGldmvjIwJQDZU3p1/5jgjnJJ40GEoHRnI+8kT+Cb+cbTNvnGj6EydIB5Zs7u5M1R1aiqrCOARWO9KyLJxgCsAAmmDLpDdztKBuDp0F5lWh//ACBCgV7WB+cJoCyjgDNJF5RT3p8/wAYumwFE0mWXR/0JhbJWlBCpVNULw9eclSLXBPIRvD+kmDSymm1YXZdD4UdmrJSB53D4cAkpHnHmWwlZSREqicxpBxHPnVgVA66N5xxaEnymPdBZ4+HOZV6BVISs1d6fRhPQYsD1Ubw1/o7r2Eg22CFFm3lOGYF4ULCNC8Jr5bxdYA5SJNCqTXBzdVarj7WilgqrREgcjQMwzUDo6ozaDt3yy2OBgVsawCI83649YMBRGg3ep7PoMUO6e5QRf3nEje0CLtVFkab/jfEPRSsh4T2Yw07OkJr8TODAAdDfq4RCst2s2KJ0aesKJL+VtfH/uCpDVFfIfGALgoPOckbLHHpfMxnkm2bve8qySGk7pP85vCjhre/GTKsza0j16xQlqqyOCDYcrv8GHAvo0zZwFMaSDyAujDylKKAQCWe4BDUobdR0Rz4Mt0kSwsEKxOSMl4VR0gGmgaNGCTLl/8A0IEFBWHv/wCc4QF9rDKErzxhSW+AIYILTOIIrRGtcDcHN8sDZWzsmEvvjFPjjq0QDk70g37xbNHA2BM2tkEqBRYIm61mxQgW1njZeS8UtGyOC68uN8Y3uKTF4CRXwct88YgskgTOU7J2iXaBgXhLaDAVdj2LpnhtLJ5FHBCI9zkOJhDKITQWhhE2Tyb3iAGulKgTYpTXQ8YtG43AIxDt8iTwUEjZsBUitooCT946fFibw7rD8rOZi9hW0E8LsE8T0LYmPGk9i8Ng2z3gQBhZtuQ6DlN/nlo6wpW4luqB3Wd4GtbEHKKXdvHAvsD3ohXdbFOV+HtxZPxVMJQvaC+JrYqW2sMlU1oiJ5J0TcAKFHyLK0BLBHE4zTVOSd+cREKdPS9fn+cAkHbzPWACPs2bvk/jHhQFTS1+sSjsAtJ9e8UpTVT3j50NeT/XCLx0AusBE51CQyoWWwhdk/0OLSBww3iorDSNzxc0QO0GDjWngAxjQIThceHyoSBQhqbFRhl0yHMj6NRKAcrO82MJbvMLFegivUgsUpJpHXLsKuBITTQAOAh/8P8A80hhSrNGHsWD5eMiWTM34HmrvwHV3PeACkdOp8vGXIFWzQqaCm2jmdYBNNRCCIEJ5Fl4uRuoua2qWrm7dnDGpfGMbUCCCp0g9JihBjEROdaDVPDw6lBNlQ2YVVOXVsaZvwRGDqwVtPHdxHymajghHlbo2XAJEdjN/Ap3x8eWkFJjzKtTg38G9zEDeoFChVjKBta1sS20Jga9kRXRpkYY1LikqDU2BHjXsyZrLXuThqrobU44bZ1dyC6tEXhwjWaFWGqqaaStBAYYmSHu/RCiqBrhNvdNNMNMqUXQK0jJyCeOTzyUiI0VAOlTEGJ0AEugIzp5zaDFDBEOHqYv2aAHgVHOzgnBwEF7pVhuG5EAxV+UHRbQMkbBTbjU4pDItHvBKTuAnSFQThgTSV8g35/yKnAr91Uk1rsDNe/W+Qm0jrnf5ybgRvmmr9cZey0DXBO8ekql6v8A3IdA3R5ecvY1I/nKWRNF3XImgOOt4kjcoOgEuK+/3cMGVHZevBvn6ysvPQA4p+8096y13+cbtsEAfnz3mvQXZzY8flxCG5zZWmt5vYQdQQIcIU8BVY45jhNBm2iQpSPyJ4gYCPRbaXYIwBGl5msB4x2k8bTUadJMokRygs3T5HBA5QCnzhNoArisVi//AIUCwIULtD/0/wDvc0ldHvjpfMU4w4NppvAdapX4F4Mjhs26tQULALzW02KR7F1cSNROufrQe0mvykFLErAGJ1MKVYLhm4cpUa3Xxm1tq7vNK6s5uh8YBoeqCIEYKOnJOyBDBHKlBwLdN2jw7UogEGdAQCNUN75YeIxCdw+SaFCR1S6eS6pGgg7U0a6lcPvRA4VZYBYtlUltypSBOAoA7Rokmwx30ItCQJo01O47xnCC45pErW+jsdu4CCBMECxCDQ3ULd4gXxCCMsdzfF8HIVq4JtuhATQvGyKXG42gDVoTXmI2preBfECi67SdI+Udb4uAPMJsb/8Ab5wPYRdJaaoTgj5fuqDgwAAKOeY+9Y33G9gmSLdFBBY83F/RQtkbC43POIOwYaFAAAGzQaD4w8/aJpxCjo2VTzDKDkobZXYThAsqAm8vlFQCTXn35sHnjOCCQqmmvRQ8eY84UJOpSTuBiBRRmdI7MK8XicPZE04BJikLd3sHx/nJi02rI+pjfAWBgqJagIvjnCCRsgJvWI5JE22j4w0iQDgfk3hoLsNkweHBM8ec2QDjYv8AXFytpdA4xZPeEH+O8ehI2sI+cH08refWPnuSps+fOCGmVAcwQ9/cThTqw17glsjqHCmztUbrshEVXfFfAit4tHskFRFU8JF5xNarEi35FOzFPyiMHTATbXlefty0hhQAvcpdw57zUY20JsaLR3I8e9w//wCaUatAIfP1lVBEvJespZd+MpvfGHeDWEjCh74en1h5VVDQDgI96Oh+XBC6CwsklU0/KHLjqET1Bougml3zGOxyXUkQCQrpuIz4YIgKymkKqiaWPbeGA4/TFReG3QrtSOsKkGEJkVLsEbJHcYqqzPepQDpA8iCpRbNOIACWNAXc7d7SHUsEAVDW5UkSwjm7QDSLe/it4mGKraWmEHqL7fW8riN7ALs4qThrL9jXYzGVzwu5acTFfF1RdBodm5sI7QUt9wApYLoNa5pfACKDUrsrb1NHxrDhHoSeYSKrsbweDFZ1BbEOSvs+NY9wzwx87P5614wGa9Bq0JdL1Hie7hLvOjRRIg4DNs2QLI7xEjsGoA6X0ZtKSRQUgDHaNnLbscm2vpEClB5RQKmvnFAaTAuiDeic874M5txYI0VyTZz48GAS9AlNW9xDs633mrBAuz4Bx3lzrCi8lZtU4/jKhy6jIQdTVtnn4xMQPtSh2tjIOvgZLv2kqKBoQVFDmGsFwKaTWLELVJtab5yxzAArsE58E1w6t0GB15RG498RmGkOlw0INh6HGMIGyyYwW0GscbfGDV89Ff8AJ/zBSjTc7/7iapB0J31h1gix5ND3jISbrfBCriQS7zNJMWJLXk/bxnEFVH4QvPeBslgOnjLG75MDvCOPs6lyoRtRyH+MW0+JCFLWVSikeYSTbWtAAoKEEghvqtTaQwpLTq8FghpvEqgosIIgAFWrXNoXqNQSBrAB5JwBq5QJm8AIa97u9fGBtpUAUijcPkXYHLhuIT1QNuSOxBBYacoQgB6UUfpfvECCleDAKgjNPrLhsdK4ZC8QgFocxu5YCU7cwZnFpspvkw+SoAum+vLD7cn+pXoatctx/HfGONIVdkmveb6mLYNQ4cRU2b85eTtxURqOglHG0Sqy9yHNQnhFvubpioZiIi8hBg4eYStwGiKKjrQDhqXV0wcMCC0UjC6Ias9vJhkFcLZgHFqRk8shv4UAgAIsLKeIvRxhJWwQ6diGovSTIxyWghNCwFM5HTrGq29kHkaA/O+3GAwUAbUvXoDgjsPGIAbqLAmKBU1p6dGVcyZ5DuqlN7NppfKzE37Ugc7MPie5DSAVaHArzB+R+81CAmvTX331iAALAQWpby/CMvSjAQ8Naj1y3rTgOqquRAUPGte44qWEmVr5O/tjALCMEem9eD51jBFHdZ48ZboA7G4v/vvK0k0DZOep/lkxMfK2pjV0JbGoeFzyyaeKbu2KHPywI/SABVU06NmpbMhW8ph9UNoa69dmH4FW4JXfSyEOKeGOdeiMnwlVpNzzcRymR0CEHm70b6mNwRayXkfJG2fxm4fRE1kGQNvnil1jQMQDCgUWmrPtCONKIkw/kTxwsdkmHKiQGoPw5r+e8F9AcMNnyp51vrA9G1ALtG5Xa7hxwcSeLw1hoEAUVm9suBOTtS6kTbKg7NIcYAO0YBTBXyyo84JEVFTQTv8AvnEJlkzAbs8HXiYjuSogrvvWjAUYce9UJ+tGFGYqBY81n7xVFGQtGuevxhqiqqPEsUPjvEcBY+LoD/WWpHY8R6LjaUF2u/7chabaXdzqRRjbc50aKn+cEFlCYcE7G6Ks3cAT4JxpZpI0UUVSYuQR8o2HpDuh0Ku7Fu7yKBzp6tKJvswa0UHAqS04U3h0mGoQg3tFkunnLsgFtkFAfYO2oS1L6AhIvSHOhTWmre/ISoTU0DbbU1u4MShBdydboY7Y04zADwrKOhs1aF39YWMBEAlALplXj3vOK2pA/I3WhZNOFs4S3Da3zJBv3mkkEC2hDZJ4lTiZWe8CNw43w7+OSrHNzRqwt4nKbmuMJYxIhasNA1Wmu0cNXU0BqSPaCG2ETB6UIe1ABhJe3AccPI2rY2pFedBfEesJG6sWCkDHRsFGbqY4y7ErFpfEEd60XXGiI0vCiSHVKEq87hNuQ03uAUE215WJsF9K0VjmOydPfIM4UIE4XN9QOvI5XhKiCrC7EpKUNgoYoyHRKhFgBoRYyhhoAjgB0lbdT7fWApEwvDVayg+mOalwYlccX6PePXZAkAwEa6D4VmNG94kJVIHJ0NAJDFwjaUmcw6ePHXWJdPZ7J4PvvFgqoGt3s985sBAAutxvzN/ccarCASC9a2885WAdKWxw28f8zY3cKWOB8f8AcCJhX6fj+3NLg6L3Mlu2s6CQjt2ePOIuujyUIqEopO/MzQtTYQSyAC77f7wG4HSUitNMxsfA5Vb4KC6FFTYHHfmkv4u8yjpUptAS4k1QcCDYeVKBbu9ZVnABoSt3IccR+chWSyrioIiZXjNIxoGQnEGq64JMpUBEECMYcEjs97Ao6kSJDg5Sk8Y0IGdOZ/Abcs0O+CI0G7ZDhdHeNalyxMboJWnOr5yEXodGkk3aw7r1SpRDIiCS6TUGnNvrJd2xs+p+salA8Xi+MVAwIvpjPmYDUJq09mzUD4JveEACRNFHI2Nvn51iJMREQFNxAL8nzhnLYVR78uGkKFQ87MDkI0aF3v8AbiLJSh1r1iA/Aar6/GES47+HZzkEQ7SbyhhYXcuDIRFHjjx5wgrWfNaIUghDamTCLMCNwag8Ng9TLzdLDdCjorjQNPGXsGaiSmwdbbo6ohTIGkTsoqefBryIMVIgqsuxE0q4sALmBgiNNwR5csiLkNgEHYCou2eQJnIviAHc3aC8+i6mQz5ToxBvhTa+ugm7Y1TsU0qICMEld4s5N1ZBTSUFVS6dTLYbpLeBR4Wu+tdKdNCmgVKREXYR2CFc8ThFIajVtHQpuAarXRzcRlL+ErwdqFXCMBlUbtry8+XADeYCiTe6vJTglyw0wBdMQ4QHdT2LxBn6EtNLzo5vvKtBIGyF0WK6SxWIIRUUG44HwJDmXePLwLQODXbsFe03i4hn8ZQ1QcjYSIosEqg6BaIcLOrDeBDPmGweuozmsaAiVqSKNLbCEiIygEIFIWGbTYSldkJ5cvbSkuCpoYADaThcT+j0aDfjFtUq1sJfTX7wsXsVdca/GFcQSNNk0CU0c79F61hvHA3Z0PzgByxru8FH5MOqEPDib1MQUdSyW6g4s6wiiYP83v6yYoKYQ3U8cesIEjyTUm1+M+L2XQ2ks1m1BWjH8J+8ILChqg3/AMx5k4FDZtAd7+o5DO8KoYAco/CbhqbvrA1mnrnq5rcKAIKGAi3ffHWHcOIvA55Jtm7uZGbJuBJAgNEHXsDE38YUA279vDhNG8nLcAVKRrrk6tIE2GO9wgqKThXGjh3jvjEu2ug5DWebjXQoQjNuyC6jB5xUZiIFEgUPrfd4wnt6FleEDbShO0fWJHWzeNiKBR/1jbeY2AALtip36XyxkLgUiKkAJtqI6cjzJIAXaCo0m4c84OJETdFDyGJbi0l29scGp6HYACirxY78OsHikSqvX+f94I4WACe67OjNyDSUH2neR90cAF+cSqHEMcFCzrERIYDtxe2CDSA83vnDM8w3Zis7opsXk8ZzF9rh8KgxX4ej4xDasSWlIdglAfYxvKNpShb6jANiiMxmOJ4XT/IEaA0A4gg9KABAVtQeRpcKLRxHxNEUMVexwgsAAs9KHk6OaTGg9C6XTTek23dKOIy7hc6O8BGzx0+DiJwoUKsBNGR86RcvmwRcRQEEKTEmhjhtNu+PR1zoQ5C4TgkQkbgRbGcc0aVNl6yGm5pjZFJiWgVKlp33/wCYBMiGC0ODs5H1oZK/NiDy1WjOBEb4cVTiw1godQDvjYZGVAoGNhoF66t1uUao3eiIiQtKrzCjggH6pyEqCaUnB7yE3qApCaC0JtnfNWpqBYN5QOStRjk6C+gCkC62CPZDIL6QSIqUdRk4ceVAFtHmNHd0O/8AJj4S9TiSwSi/aHNy3liKeEQaF1Fdl51m9sqjZEEiALOOKJheoSG9gcjqc8cdZVlZIg4HQPe94HQSGK6V4UbvXPeIJ5ARHU88jm6NtxE8F7J96xqhZWtDsP3+cIIOqwAwZzydfnCQpAyc5JvREDodcfDzlFDKgA373vr1idwUzYDQzz/rOQ6WpF1uHOxxcVnZaNf+Yylo3p7xJg1eTXH8TCQk5eA/1hqsigXR0oGeBYpSvRQCVKCzTY3zy4s53NFhdN7i1izWnDwvKnJ2wSU3wyl1o1gVCLRoAdFGXs3MqQakkgQVA02dGKwLSi6wBERA4eZOs5jB7t1052fgZIck1gemhELfAGpsphGpRTsGiztzouAX8/jsFKCxdHvBfFQ6Nu23V3sNpgt4xdTmxZK3c7WmUW8AEKA6UhQW74wtym2GyMIbgvW2da0oSnrsT77cpiXlx94t1Qq/r1hWrt4isebyD1+sKUDy6DtbeucEJEXbpe637xhyYpqeXc/eHXI62pyniYhLjVPP3+NYjbIFbXA9oJ+xnGMG13iuaGgt/B5eMGs0hegyshKgdd/eO2s6H9THfPOEMFpKXAbJvYIjBQjSFBsAFKE1GOyPnwWknzWnXAOpxBHaUqAnQ+QK4Ekzn2XIUQCaFPBh6KIcN6WYsVJDhMGUi2mREtkqRs7XnNBY4DYB9RWoaX4EMBFsat2v0eeuMbvXgEeZqoEX7XIuhbo+B0toLxt1DHfLNCF5FiLz3XZw7T1nTmoct0zeKEIxhDUaaVrQuoJipkyUIVWEIcVzpMYVTS2iDV2C1o3vT3pFiCgbAKWO+LOx2BxY8Wb1y8bfRms09Cg3FNIbxd6OnJd/AUE0rjbOqjjxCG9Js28T8Cl3loo5KiNWoJm+805sB3kdCIjXSjJUJNQ0CkvC0CrVXow8CnyVaFIqnQeVMS50IjIAR0pQmsdXb37jqdiWlTG4edFhXpzRae8l/qW6zba78c4LgYCREOQP1v1gBEnRdt5sVuIwHqvfeLaRwq9ydO+LhKmrwNDj9ZseDWtcdfa4T
350+ RIpJHx8fi55IgaQTRPnOSonFvDznGUQCbC38c4imAdInEwGd+KTfxlHqWXaXIoOqa2n8azjOiE+36/jDLDW+hoG6COo0mVuSIr5o2UHCI6cAYWSFF3jSR2kNW0+cXLPZLBvheCibJ3tY0TAdjZ1sWpzXu4lZr3huyuHh/GBytEQFhdUG0yn5ySuYoiq7HTPCpreafOilE0IpU2vETY4ugM0rt4iTZX3OOzBBBO6iSsl1fcwADQMEgbuLe2aXVyrc0V3m7wPett4aCkK7KFxKgosdtBwgbooH0N4IW26o1jpeAxG9BeA8ZsXQYHp5MWEpS/8+8GMi2YNE3PP5yBKDY3+fjLzNEkvXGMQ8BGVdveCiPsbH66/Ll00seD8ZNk9U8o95NSKgOtc/wA4SUBRw/J/GEPDR2EeKg+HvCnk6M2Fn+XKKLQQ1/T3nAdRvkO80fRZTB5ChWr4aZTgHRilmb0MIQBwdcSmhEpsLCwABamKHuuxKKHsLHnsbg2KBnBQaSTwKTpMEtPpniovBWvVR4TFBmgS05KxeW6vOGfJAyIhfZfenWscgOtQ6EHB/uzsJRqi5bcPPN/eNOoLKuu+OPOEofSKoEIIXzvr4zv3BIuBJ/maBmLTJRAUQrUt0QWuAxLhNZVgLQMDUOERxGBqMdHQyKqDrnbFOKWR75wBqAaF3uNhZzEUcSg6Gy94nR4ovRU3o20o6w5RjFE7VgpVPwTBQRSZAgbEKXynUwjQK5g0FqVHXNRw/AIjm3YQu/HeNAA+gLrU1APO68txNYogOQ3bv+fOUGvKx+wPrFZZIWy+zi6584F2wrQaWc7/AN/ObrFiukmn1/7cvuigoFZreOOoJbQHvDKwVckHYJxEcW6zkNjvvrCwpDQ2fC3uzj1izGqELa974yJug7rYeJkNirIr/Q/1g5vUhQNrrmG8FJKIXYcfeARZu6DOtZKQQhB4cn65OucE2Axzq3W85t10HXvI8miJ2Km9DpP5xk2k6MKa2olMKh6gfo5HCoWYHb8ibqJdg6lAWcpx8PG8vSZbo28A5F8g4NmXtpLxWhbx3C44b5IiJOLLBXnp5xZEreGypXdmCDLvKesTnIloBV5pJ3i4TQImzc3ouYL1UgYF2CEwiANWW1CmX/jMI7Dq/OuMAyWCOQQ07E64scuVoEgYqWxXDovEx9iYLB2PwP7yYY2u50kDQmjgbpu0CZdwI+pP85sZAKIqvDeO+cIvRWKmrB5Xn5xQUBJGNujaHluQhI5PLm/XDmhEUTCOJ5/Qd4gUKtT9sJBKlFfjxi2ORAcfjJw4bPO5gBRIGQ53ve8bxMjvO9beOd4hFbwreo5yNqKCH1i7t1eQ+uOsAo6nCnzvDDpyLCJGRrc0wHuvfVm+YjR3Fm0bjiHLo5OwfAa5OV1otGEGCQQCCKUCjvjFrQFjGinajHSoNrMVlOXQBdDMCuyqDCwoIL5zuOF0A1hATbIJuNbyzCFFXlQ3R9CcdX1ne8F6pVgrDROfO8gP2SsBeeS3VvHdyUgcR0HUEh1PRryWGOUMislQu1dHaTGCNUKi13A7GKe9AqG2dwyAgPJAeNaiPWojWgTIoRFJp2J5As08jVODbXQ+McK6ZAVXQNobiug3hdcxnEjrQe8VWq4A4Q4BVTgQ4/Lm5k7DP2A2LS3cuuAViA3zBwpQ1GtoeDJzVYFet+PN2f7RHW0cBCeX5/7iCIUIcM656v1lLqptvXifeUT7C07fjrAAfEYDbr+84gA2k0p7m8vlF0qvFtvfGI2EGo6HRNjOPvBUlN+5H/fdxo2awoD3vX4xtgQKrs3r+/rE49PI/riJNCFhfUzrYS7C3eIDKQSrLWH4yYahKh6b8Y8kLBo7Hf8AOFXEU/kf494qFG3VEv3xlXgSDuP91grQFZq8EkN+pMUrWdw5nk6a4kTK7+PEwSkRsG3aiuDnZnZyCQhqceZjypLPRlBr1rfGWHzXNxyzjv3Mo2W4uNgWCk15vZRk8OoeD4Nr194EDi7S2VoM43xvK8BTRaNIoOk1XxxnFGiIlOGwrQA4GanLQKxmwqvYhxvWcL6AQa2gvYemspzQY9REJwScRbd48skQ7IdGkS2lLhHxjFSC7nABfLvEscBiRQ3Ma2mqodO8b6OC6idJzX5wJi61LHdCzWsLA2uip+GFEkhE6RwDxiMORBN/Aa+DDOMW/GIxqVTSe8sesvgXr++MfqFIWxOLzhVk1AR061cq+RjBEn3/AG4esIUAGrOsfVFjojnvjN/yQWuieMQts4LJVG1YwaKSVabjVp5QFhG6Ba7Ma7SWXZqQTlvaaMTzmpXXYkQaVgptjaGVKDgA4BjXesYUMGJ7hW8S+SOjcGgOtWgaQU5cSOlo5yQIMR04W7T3iyRDZKcr08teXnHZHVQaIcBVeEpzvJJyugPCrbOfXOpiLY6faTfH8NnO8bDLLsXXWz5tmucL0CLd0K6YSROH04nWNF3fJJunv5y14KRHAp2S9Vy7REkeZUzkLJ0c4sTsex46k5fbgd4z1rfBV91hlWVXKT3BLz34/N7eBKSBMIHECr5nnnn3iqruopWxerq7wbiOiQ7N34cSUsnG6xPnFlfCG33r4wUYRFGx4X3373jAiAEDX++bhuJzo8TxvATsAVcpP519GTO2tVE4U9yfeKIgBeSs0H1MI+4MDR7/ADkMEMTjwluGOgBuI6hynaYZ0JeH1+cORK0nB/d44X5Th4qet5eoKutQ6+dePOWzwC8nmuXriZ31t/lMkibVqUCvL4MdgZ0SGuP2GCsCIi0P3o/jFgoKRle33vAS2+MEuV49cZPv1sITQgrLC+8bIq2ned3hGOw86kTU15KaCKz5+6zpC7K6bdsg8zEWUEIpRPuO28a7c0KAoN7p8x5wRM3ClAUOBvvXTWqxHKm3jsRAUnJDH/G15buwpU9u7yPIBLoQKq9AbwNJhhHEeQKgc98YtIjhOtZrpMWW+RGmSKCfAZAltL2fWU6DQSvSni/xhwEjlVfgDU/eIbQSKh8zv7wzwBJTvjjL0OSpPyd9+sCCLq4vrA1rN9nu9ZtAK1VsfzigW4iLrtylIKwug50P+POLClFlcfD3iQGnb/GKlwUj+WRQSFFwPfu4hDIcmE3gLejbpwNJ1OnjRwRRThAIv63AWbTWMBikdRroDk7SGwgAY1m9tiiAbe7vmG20vvALGBBd4ImnsSYwBlUwS0aq2PNLZa5MfkgLtp2p7eMFvfod2qOUsAhCfOKKFBkbYrTsnGqcJY3aiAHQ8nBvn84ILqoEeez/AH+cCNKaSiyDz/dlwyoNUugCK61X6+lOnSOKD1NPd/q1CmkDjQ6PkwYpUFjvyvx45uNUFzWx6hz7185AZHAh13ft/OHgKHcXiTIXkAIgbtzYSYo+K63qrfvG90MHwI/vD5SgtQmyc63llSKjkjhymgRGeL8yH6ziFJSJggGy/wCxwgDIMSW5ZSbdUQbGOsIL3VxmuN4jpIB6hv8AOHh3Udt/ecktmnWk/WcJAyuDX4v97yyCBeBr89dTFEg2h1/3EQQSubJvz94NHAFSJJ8bX8ZK8xp0a51xg8qRRemLqd8wt8n7JhkCUQLCzFgcJlFEqyTrGdbNpNu61R3ycZfiGqcD+UpyWO9YibEAiRwA2+r9aMMz7/RvfEb5Ji6PATLsE7GU+esinEAsgOB9GpvTJoYo0kSrQ5Q9Xb3mhjobRCl7E4cixRlHyNgb1QzQ5JUPEkoE7GpDXBwUCVE1UijYroJqTjhhoZFn7C4boigmsezAMh04h1vBuQ0EjTs6x2IQwLNermssaBs1wU4x6MsUia1/Z5yRLUR58ZWQnbvx+dYVgfYN/dwSLDwd/eIjagdFmAgUvAc/GFqRBx39YeAQchPvHwoCjw/EydaJ48e/rNfzgOI1/dYJ9GkevRlDhpXVnmzA0vjIQXaw4lroS4CWprCmi7+BQjY1Wx9akdJBdDbpCMRUCqQhRRJaHXlOGNHYoq6mQvRHYBYdregEIb4bHr6p56KzaCTg+QtJLzhmGV5cAifKP36xgu5C0cG3VJpPveSwQCJF4B1udDLwc4OpUtGnZ4WpQn8YHlFJXyMlXHzrZijaV2hV5R29zgvRgm55O1FYjTeQ4vqlCjlU71gIiUwg67fl16wdYStXguzGaS1isb4Orfxjg0ujoEffnGmdJ1uE67ffeLqMph4NvjWAo1pZ2jT6e8AQATYHEhs+cpoJCkQX47zUjDS7B1x+3LewbTSo9pr/AJkLAo7cDvXH5zgsAl5F/v5wmChdUC6XC5C+yCeNf3WDlfOCjjn5DAogFdO/Bg4jtZXhviYZrVLcNUKfjnIbFIxgS0/P/uAMBCQQTcH3jxMI0xgpT5uFUU2jovU/veThskTVf6whuqbp188axABpYXncvz/nDcyE6juI/wDPjIcZCiXQ3jnd19ZeAr5u8cTRb4PdEqpGRmxAcFGtP1iPY5+Q7I+K3vehkgpSCVsHUGtyC4NK41Crt+WCLJOElHkN2e9a5gu6rAXq7xhTllmzI6XayOQYJup5OJwY3Umqyg735ltF5Ygj2c5FOBPb75xC28MFIhIdvE83F/8A4gpDmNrU58Wk5AjbKigM5WHLaRaq4emRdIr242XetAEimUZI61AcX09Yiy2obCLmjRDl5wKegL+KkHmRpqGMobaQnHeB3NiG5PPOAWsuntOvEyBQrQe/zgG5z4gX3zgA4BoF2+N6/usR7St0D/syYUJ3x/WALWu3H2by8siWWBP36zjEOhhx4cieEc1/n84IJLqnWakM+dX7Y982AImGBQUBnAGi26MT1oQ7qVTiAgQ7eHgPkMaCqghVw0JqqYvoBLXy7DkQIJBHKhIpKYSARoUaTVdrzCS2bp0HYF7QyvzD40OQ4L3LDjFaQXYqFbwHY/8ASjoO1dEU4BYtfRi68nxI+97E/wBFLEFhQcNlP795dWBKU0NL2Pves5cW4swRGtR3dvMmQcRq0bbFXfG/POGhTAWAERY7DXjvAKyp5B0Otmn6cFERs00CM4967/hIoS7a18bnH6xyJgTU3vsMGtCBOjz1kLYltOOOvEy8Wzx0O/Z/fWKqFNI4PP6/GBSoYF0n49fr4zvfRcIXjo+c6ONV3foyiUTNNb/zzi54kbhv+mX/AEYHyRt7cuFom+jRf7xgRkZosnbhw4kf5PGTtHQtVdH6ze2HoAvdfjCB7A8dbH94bCO5Em042bxjMnQ4O/51kwBKd6MXN1UFdfh/PJinTvs1odmNAtXiQ43g5hC2hfPs/nOEAgV1Yo/x0u+DpNBCEloRRSfthEnmW6NaBE96fOAe7UCiMcQi71xKZfPQnmKaDlENsYbE1FkQBQqsoF8R4wezWbF7I87vviYvFYsF3Hewm3hZOM233IIlQEZKD9NMMO420IbELDuN8AuJ+2gAOx8O1VmqPCiITzpG6IHb/nCq8CAKEN/afnCMaGwUn/iU7cn9U8x8/PIP1kyTgrw9uLD373k3HCWnTnYS8PjrGrQUukb07FXX3JkjJUai+31hagqBB+c7sdb/ALMTwZTRcPUEEgH6/OWEX4wBbq+FmXQelqqYyorsev8A3+MW5pFNAY3BHOmvgzZ2XKGi96wOJE2Bu+TPjh9/Wc5D6pVoHgC1dJ2MnRzuCMCBvryUHFRuEzlBYanHKeWhUUkigALvRfDSuGCne6Gk4eSdtI0jcbZaRE1UQjsHk3RgckRA7hpRV+Z0AvlCiTSxsmzX37FBmsyyR30f4+GQpSiJajPbK7avOUywC1R5mt9azlgz0M274fN/eMg4gwX3udSnnfnAxLT4gmxqcXT9YlIQFDSTnjmcbwEJo0BhpRLwM4yKWNqNh3/n9YiX3tdO8PIeXpHqzpyogWL4n941xmnGxA7SM4+Dn+EUjvBEmx48b7ww5Y4F7nvNYgXc8vP4+sBMrCpE+0MYNHTRunBfjBCo2LRZ+cqFAql56PG/3xl3FRTKcP26y9QCJYjwW/j85GoQNcb3rDJQ74Gutav+MVD7A0cDAAWnTx/3CBUaEMTk4vvOcTBSFq/3eMEKianDinnz940c1ABqfPjebMabBKxwDpALDwn8YFiJwnj39zJKUYAsIa9CFcRhBiTVTjY/g1x1lzL7gVYO3ABCQ4zj409ka6CKyaDHW8A9PbeJqbCEadSVDG9QI4IQTmaLedRNJOAOql0Fc9+esADEqRISpp5KYiOmoEViEImO5DuuA7DQTlIdwr6h5w/AH7EASnYHsukmMpMJIiihdabvT5yWXZ2RdS8BiPWbiea7ZTtviw8Y4xRRWtW9FahKHBkI6q2VWKvR3+cr6p3DV5d+nd24aJ6iCqWERewf44wdy9eDvcYU72SegxQSejQl4Bzxv51k09KpveE53rcm82E1Np+r9frAshsB4Ly+PvEHsJs6/vnCVBn4/fnJU3IdD1iTBU2GhzTdzUG4Li7nuYNsvnHmz8MHZQGUWE4hMsaDFHV83KOxx8vapHEoUcJhlNEfSAj51EigmcIWaRBnJqljEpNKN9QFgGwofTVrzgoIEkKqJQY2DgcXBFMCynBv7HY4IrINHmWePtuOPrJOWa5/u81ehbrOSvJ4+PjGvFgM70Udx49ngy+sSMLQh1eP1mvSjaI9P8evjAiXsnbV40x9+sbBICd3kOeYn0ORSBdON0fvk/8AbhhiaHCM4enFfIo8o3vfGGksqL9IbJfxiq0BKJc1E8/N1msKJENrvYPHnU56wQAkY0hTt5eep1iDXph3Ods4b94IBKtGhlK2ANR53vT/AFxkEzpVCzYN38ZsAyVHkMQjyiHstwRbdDrXOGQpFoo6H9TFSSAnh53jbNQhNvUMAA9Lb62f3xiBS0OvB/fGbhrN8F8J95bSaEWTg/zjXtEdRfG8SXXNRs8bNdGIpfavO8AAVAzUOO83GGp7bJvxcgowQO3j8f5yaIkANdRk/wCYYYI4xDnYuPZKaIU5s+RNesG2tQg8yJ2J3NJTJ65gANtahqaC3apZ55NIwaHIrfmGB5GhGLeDvhOMNQWLrbodCPV1d5ZlOOikIeV9AR04LaY2Fi2cgEhyvJEPs2SdwMO49YhraQKK5YfxjHQ7qE4kgmrs/ORdtNgre9NeZ1JrNINv5HK/x9Y2e4LSnIiaies7/pVOoOG7vxh0JPaF7eIHWsPU4tWsCJer1/3CovSbFNAvOz63o8M9S2jVB5N0wRwGploq8g5qhB1Gesrurx2Yobx9Ymmj+ccsOIPOF13RAS4cLYx1XLktfHLg05Q2rDJK2F45+MTgmpRgeF2fGTGkxBRzVW2o0UUrcNQqWgFoBW17MO9d3c6hGg6VYF9HaQaSs4walRSySCIlHvULZi5amgEdwO21vjABpyKZrVFAIm3hRgpCKNohYd8Dtu++0JFANmIh/wCm2d4G1vWsOimzRefS+s4F3MNdbop5mb1Sy5siOhPyOYbuILmR4rnocG/WFO80F3pXp/1kEJxHsQVJyEuEHjIJDhRekDWSgIVOlvBx/hzYBG9Q8cd7vvCAu1VnUOHT2nPOb0G9nuNJsOf8ZdADbnJtvXf9cGpQUNL2lP747wdDcsFX0994BaR1sv1t/eG5SgpR0T9bydkmx/1hIwMs7cSQpwMZeHmQ6HCjIdHrv/WRV3pqGNr/AIJ85GKsF5Px55/Oa0Q+QnWNimtA5P8AlcCWgIx8l1+s4EkT2R7N4IwRsRVGtl/usAgGgkhk3e6qgVyMLFY27vNL/GRZW0DVdzx8ZPgYoEfjn+mSCy2DTrZ/zrBZZyjbqL/jAf8AqAVqPAEOcApUbjYBzUOwi4mymM5FZrmA6AOsUH9tLET6Hu94nqzXDqR5BEYd94wZYtlrp6Xje/xiV0nkQA84DghoLeTp3NN1+cdB6RTEFbnnxw47udgKbl4OI/jfWEIS0Fp4+7klmFd+27Tn+7xosRbiN5D5y6a9ogRIJ1ZruesK1l0T2cKyb2dfOLOlpwGlCjazX7wn76Dmg1DwoN8c4RvokKnIF30W3nIajtUH4/3gwAXqYwhrwdZ2oyiDr8Y0T4hNYVBHC5B4tx6yT3NeG4MgZxUWzAVEWqBcW+DQ8lksOYJ48h1+6YQnqKan0f7yRWl6XaheHk7jkK+iCPbQ4G97l2viTZKpIEvAojCBN5FDoUDdRpEF57qagDORDyqQLCiM0h2YENlAojRo0Lu7QIlRVZG7CJ3sGDUm+cQoCqlbmnzN6zhYeRLzV3DWLAZCg1kOOddP4wjfIYti3hrdP5x3UBAhuOjVbwne5iU2Kse5PL5pdubl3ECQkqy2GDUCArflofRze/OP6uwvALwdc4WdiEyKNsL+X88ZqUoBSnXKnG8VQYDk3h3z7/GJUugppR2B5nesb1WYiHn9T9YraqgIR/szTi8alW+ZhK26Qv5Of4wwlPgu/eClsG9tHzgzEOSQuAKHZfthw0Va1/G/GMAqcOWvOCqvBW/yxKnc2lmaoHLpvOvx/vImSQ7+U7wCqCp34fWK5EN0X1yfWbEJCtB8wvvCTVtupPV/OJ7I4vw9Y53Lxg69esK8EgOh/jf8dZubaABQ/wDY/WIjZBjRFQEorHR39YNPCHIFkp1JzPvDtjNCaLd/fPrDMRJNyEVPRefOVLEJsEF0aCznxgSopHS8EkgSPzOMunI+oBu3VNe8VBypsQQ/Xx6Y5/HSLct+jFeT5MJLPCzl6wq12QEWBzSLdU+dSr4AHJu4B57/APMFwppIAHR+sQQU4C0Ks54/rjChbMgYmtJGIj/GOv3RCRvgtLz/ALwwg2Ui3Tuk2bLr8cq0QpGx5Vk4nWSKCEJ+Um/9es57bUEPB6d/eAFY2QP5ziBnvxlBrXjf1gzdni/ziDgOmsiBEYRlOMb4Xpvf99YgiTmBk10g2DjKUPbGPFy006TcmDGFKVv4wTwNRWRBc8cAM6XD53KiNKG6BVPDWCY2l0aQMpAQEBLcWVrQGPQCI2XohhiS01WglUgBvodASIqhmIrexyGojhXEqoXoDc6l3AiDHWHCwA4ahvqbL6ZlPy4apfLePPOAMFU8ifR5HydmLCxowt0I9i8EH0u2xlWtQ54Avp377AGxOydKGknL64cq5R8wP7S8fjjI2zVoKsutKBgF9A25DvETfaZHT0cYA4tCVcjl67/7nOSkFYDf1+94TZeUVsz5v5xoAHWh3vjEEAIhYcdPzkEEhdgD8O8DptOVNn5e/eFC+vT+cJW1Sx0fzkFA8rMeIqeF2TNoo2CGz3MftW3BhvfD8Hr5xc1MBgWaE8i737TF9JKhdvc5t2qdZwso20vCGnT61zzgMMtkcj0c9fGKCIFC5Hi3WXGY8g/puDDAdYgPCa37+MRhAbleLLhSsegLt94tEh5A/wB9f2ZFROIwp5KYGiUd7D8P1ghgZp3E4P8AGVbDyHX1duETGcNc5eoiiwQ4AeOX6cMMdj4JZdcPnGDDVRq7OzLrQLoUA8f5MgcPpZpKfIho15w6h8gAVXZrid5aRoFAmr/vCwKQitGchOJMDDKCfWUxbS0Ij3t5494UETtznoX4xAz9ah9BscVYYUQa7nBCzr3l5w6YHkFGR2Wn8YfNR3mjssOPO7rjWyijqbeC+3X/ADWAIZkt4aEaeHiaw2AhGm9OjZw4EdCyvGdENZzDCnidW/OF4pwBceO5Y4C9EPZZOWYOQ4VFMTgDJx+ccq2cL/DBEArBs9veU3ql0/GcVHtGstxKO80aAFCwGgZBxk6aynhFAgESw2Ea0dMOAQFS6gQOgCoFtY78g8kILM7wS6NwKwHK691gMFhlC12LuJH84bK6KB2HDUjenEyAstaQa5dU8MnGutJ2AdDsCcL7dcFmIBbQLQKCsL+Lm/yubV30uwOSHu5z7IOTSiT4ep+8UO+Ry1IL6359znIrxN1chfG4nOOQia6IbXfj/ZkA4leFsjDv/eJrefQJhASJsUTfV9f74w8bSSoIcPzijDByQ8SDz84dE26UT7wJqWVPZ8n7caIBlSnymIbxrkfXnvnB
351+ QDbSXevHjFAnvgfxiHZHB1GELoyHjxhjqYPArmgg3ADQLpbP243KXEAcDy/k8GKkhpHX/NuKGdBTom0Hj4XjUy9QVUbDrT/eMWZBUCWsPGj1lulNiNPk/wB3gOgTeF/mbmAHRAs292TfjeC2PkxPt4zTNUhdfQ3A3wJofYjtwK8FGop66PHvxhAZ1RzG+u8IKy+D43jx5YLwgvKUfiugcsGSANrsBNjsmub1kEP7ASnP6HnBTsEHCSbeNZSfUSH+WEtaxIGkFX66we4s8W9Dn1mnmEXrfbMA4oNU7T5576yLjRJK15PPePosNit7deXKIg/5EPOHzSKIeB73m21KUDheTvv85pCoVIQ4Xh/27w0q15IN5a63Pd96YDwpaKDvg/8AM22Am4FDLOeTjpMVSvWJ0bOi9zbecFqo0O3vs5xAI7VGcc01Zs5CRk0QdYOOg3s4zQcek2fUw3P66/bFHIb1Tr1hVexyxR8YEXvxEH/uVAtm8xygBJUFNdMdZdwcudVehCSewGqesmAid1IiQ4BU1YzFQok+bzNO+N7wKrfqAsG71qJ0cdlJcZvTsDfJA+KopKyGgEtLzd89waMS2yLuu2lTe98kcP28h5hWlvHV63gtRq6FdF3834c4gxTsklI6jN0riX6jeNJ9tVhWPVap968J+ZzmtUI2Vt+eA58/OWNKCgbcIadv1jaRhB1vW2z+/ksEkgMKABvbjSNnwwPtxsO0HNF0ho/jPaWbpvGgYYCF1HoHq/M897xB1IEUHtPWKccSTsMPagbth983HNSmuX2XGCOnYP2w+E1XKADpG/vrCGMUwvHy4iEUREF6Q6w4CI0dlan72DN3I+gRaC962+/WBiIbi8331Tv/AN0iFE2++MmwBJLnxB4CfGXPSNufwYCgE6Y3yzrAWrRD03/WK0KdG2SWWOASfrN6LDvZ5dTESjeg37n96wlIBtpfZ/esMJGdhxz795sQ8LBHpNjp7xtWhhN5oDRdKQQGFVBsyI+g65rwyGIiYSnuZ2FhQKaHKhsygpbjVDJsABJb4cQAo7SNdXrHqKVF+Nn+c3/X67js8YFEbaM3jKpUlEPvCRZQ5kvPxhSABQ3tFJF/1i6nAA8EiUT84BoJBsCmw1Hg8wzV7IUKeHRli7grDpZeuMJuJnSSrOjvEO0tZQMwlItHk4w4CI0aP+skWq03qeA8YGk28M/XeJEaggUH/mMQs8roHNCbwKS4GsFWkUXKRqTdN/pzaGeusKRPBHRlYfEoEkDaJSnQqkxl4TeUJoTYQGdMjC51oRBgsNFEBKdgPO2mURdOgrZxZK5rSUa6d2JfvYVOMMzjAS0OBAFxwHMmOIY4pWADFVW7KHsEPWxQibd6Is947twJBHRDVENt4BZ6BeHtncj1Ac6fagFhNbEfOLH0bQR2nXbjvvE2fgjKb/mHxyYwJIG8TmcUvb5wcihWQe06/vrLWiMSoXku+vZgKitrQa+MoLdTYHqr8/6xE4NZTdKwi3/zFkpdymHpSH0fOUpYKl0k1rXGG1DKrUuvzjpsnYsafLn8J6zR/ZHxmowDe3fpb/rCQZbOQfnJNN1wmKAR8MbaYao1NxwxuPl8CX+3CM4C0CEu9mv+4BkS68CE/bjuo3s6wHRHjnkyNGcqq/rLzY7c4N7A89mOAmngc/0xwgN93PmwHU/rnjThsH+cbvCd148Oz/GaCCVH7DLNgUAnWRvQ6sCafvNWD3uH4O/mZy2yLySs6WFwMtBWCp0Lvfjy48RIk4lTft/jFATERsLgDCS3ai7DqcOscQIVM8iOuV7985p2FLQOmdccO8sGopRkFf3+sQlG2PHjjGBjwWuFwbQNxJMvBcmadP8A5ijvi8nQN/jEgqGbDqanTnJDFS6nME7xeIhLLOYdySOnxhNUXQHA0YJyaLc5dUaB5zv+Mczak2N94SV053r8eN4tlbofZ95sVIZtfLxkhUbrVLvjLSkoM1gYGRupp+8uUs1W69YyAwk5BgQLZLyx5p40zHOZEuaPLXbtjXho307SgNNtwgE7bwY9bQIG8gi9ipPoImbAgolASF5I2pg0kN2dC7LBDb04sQ7Ss0IBK2N8RPCgHKI4VapSU0e82Ua2jTTVeV0f7Z0sHAQvCGmc0Sc4/UACtbWnW+/bkRIJJobW7n59BuiPMKmHPc/zhK8FI5UpvudmRkteX48PP3jxAkaE7utcfX3lC0qQ8jq6v9mAQDsllvnTOsalC0B+HY+sMy3OkJOdtH+mXAJ2OP4/r5yYACNBH4GzGeAE3Rvuk+pmzc5C6eR4cBoA883AuZ+c6IuXJ0AyWi123VcPotFQE9WmIBwiqD/54y0KUanyTVR/VyehIu2g0Ifi/eDbzXp/GAlkPlxAHDvnAFg3V3gLjYp1vNBJl2s8/jISnSByxGGJqamQVBp7uh/WTjBWh7eeMKBg0XswaFeiw/8AuaagNw/LiZadoUG89i4yKWtUA0TyNDs45uJDisYPjQV4nyMOs+OoNn7QxHwobCrz1ktn07gmuThGmu8QIMwFuJE8b5xygUmhBr85V1AOdPRfifjAABrmKdGI39Ehr4zaJnh+C3EabyMFUQ8bTUx3wSl4LvZvJdNIGlvfcxTTWqravplis34MP0/YSm0vHlr4cf7DIF9V985JQCCw8BKxi7187wxsXYcYJBjmft3xgrUNc6cMlAEibH44yAmAq33rDJ8JsY6BFglf9YYRq8hQMR7bNjS5tQ4O5e5iKEk2hA8YQB2JKAngsNmPzpeVlksbZadhdttI4cKEyxdBUccU0jlGFqEJyDwFa5gRzcFgC2tBOSGjX0YDYgdg0IABeNmtDREWFsj2dENH+M0pKylju610c6wbNEKXo8DVf1k1kklN+dSNDu9bOcPhe3WPb5rf0YrUuxU74cZlBXh2eh/OT5of5fFKPF4dYpCjYCLoGu2YOGoGG8XkdPnx9I5Ri/0X1kKgRYQey07vOVEaTRk9yc/WBo1mgMftnPeFrAQBdnvN8gVOBu761ziC2Q6h2vOvX97yYnS+n4y3l8gRy41dnWjlyIA9/tjRXT1Uwk5HicCh7DQa+A+sagIkSa2TjAd8n72wl1j8TEhVPxgmGZ3MADeeP9c3Eu3JHf4MQrIohgQhv1MGdHaVMUop/hxRzLYyXuDrOYRSJh2oJ+n85QM0oz74xyRDhdP58TNZ0KuhOD7uNlBF0329ZDsGQCKfKG/I+MErwU263l32ud4iBW7t+nX5wpEQortY8/HWPEhS3sptecJUvtp95SUXfKfWJglHmKiH/LA1CLaqeQP+YdJV/j+84ICh5aI68cZAx7Qo/u76zavE7hoj7PScZozBUOvxMGWBCiB5eHrXM3zlDpq6UTlEL6I8ZBbSjHht179cYqk7qIuz16/pnFAPcDUTzpwWuzdW3wYQKhtt4+sJTTSGH41x1jcI4sbb48/eXRU2/wDZwBCRKxA/sxSgJpNMtvxuIB/vFt85bo+t4OMUclV+P/c4EQJ3MEYoJsElyVPNIPRwBpTRWRjTHRRPA70CeyRUaXKMxI3tpILpjS8xJm2/REsiIuG6th0mckMYQRJZda/1jgHaKvmabR3xrnIprwrRtL6/gywJRJN0WL0P24YXPEI5RbVnc36wCqhoAAHTrnmU8YDDgpAtTalfO1vnrERAQagHvlDTqZq1AAGOqLx8T/WEyuF2gPtT+8YbOqUATiH99bxslXAKeCuuU15esr8Qqpzskm/D/OLHJUUHu9n74+MiIAoHCZruY3oCYfkg1fh6nxic/ssTnivHrDLiIShzwL1gEJ18XmeMZS2nBltJngwgibyxjPNRgrvDBG2cphzzHa/MOMClVTUui551y8GFSK6V5ccJHomvziU0X2YScnW9GNw6+AfmnjG0NGTceMHgC2PWX6q2aA+LmwVWyrPjfGIeBopqvl3MY65A6adzHW8AAvvORmALvj8Yuk+YPOI3Vi3kEfmuOAU2goLyMCI1FE0YSQ3qlah/KZtm5F2jmHb8YQXoNI0p9OsVULteplIdkgf5zS5ABEL5HiP6wqRTMSlWdXHJo33+cBA9K8rxzhzxUPZJffH9uKW6js4SrJxxrRS42pthH+D9YdM3eAcG3zhmwER4MK0cAveOIZYavPG33nA1RtiX678dYtBAtQXJPvACKheY7jx+85iomjTzcnBvdO7D5xJCGUqX1g1K1a2T7wYdATAfjW8mG9KBB40YrZ4nQPP3lkdzRK+cIQ7lsa+DC5NjNlULQ2RqNAYKZROiaaAx62fkqlN7KEQWwkMN7POUkqXAACrt0BvxlI4NTR+O8XX5FjT7xzXLs3y9/vGN61O/USpNc/WMjeSixcyx4/vO+v0ik8a2M8YalziLw4/JhpHoBPRK358YnR2u9Gfn+cMGWF5E6Anrk6wDK+dhf4Yoa6lfiomAiXKj05yZArR9A/nDFSNXNNP1yYV4ZYL7TTjw+3b9G87PJyA9Bp88/PGF+2RzOpGz+95ajEGoBY/iZE0pUQflHUyLq8LvAqoPnBaoXjjKBU8c4I0b5AxUsw9c43Vw1ogoLQnWCL2dy3CHhtHB+0MsD5JE53t4+PONyGgSB5scN+c10zk1qu/GLyNCNIDljPjEIz8HbxMXmHCJ84xEVq2PlP1gpzYOA9a/8w2g7IDoDj7cq8vQQB4MEwmbSKdL0cB6cQr8lQqtxzB0d47UEJcutTpm9IuvSmc2R6BoHLGf+r0P6Ug2m6deP4xKrRCPalkXqk+Ac08oHpq1O+esayrZFHvXRZk9Cbl4xXwfRzdHyL+8SWUV2Xgr7kwAndV065xAd5+HB/vIemggpLxR+ce0avMbfjy68+8VINoSPkVf8YCRToJjqXg+MNKzKSJGvx5/tHSRIbR8+f5wLKe0aYsAhvg3xiYIO91X5w3YRK7cVJTZ5D/Rm1vW6vzxgi3eU59XIdo0tF/5m6XQRn1TG7L2GlMBA2Duu/xigABoOs9eMpDIR3gFXYd8q0HKpUjcH2k0UPGiZp10KB81eOX4PwlFe0E6r1myFmOv+QwWDKv4yO8IOqtTQ4894npULvHNYu8thf3c2IFFMPrEsi5A1OU/vGK8xKQqGxe+5gwOTYt+MnHXYG0jcP06r/xhN6SCcClhwg/xifbgDX99ZyXZ5twO/UTe2MUoNv8AnFQKF8/wyPNt5FXEoRE04PFwrdvjnFkEsQGy/wDvrAh4ErY/GLwfP4+bgkROVWzzjXWvZ7+Mfem+V+sPRjSBHlesgwh6c/jA82d8/kwA7VZq1kMbqIgwlJVEIY0uI7GBjTsZ0N3NZGBkbwvtvHBQv5xcAWpN6T/eblFyif4xQGEkyDslODh+M56Oa6HaweejvLbZqN2R/k6xBC4GRQFnkvw+muMxbI8KIHirvXfOaZoCehZfld/rEXglFcaY7wgAxundC/49YhsGeEw30suVN8cdZfKWo8888k384gAdCAwvOLDXsra2b+pghVPKDlJOdcYNE0FtqPg1TnBQ/WQz97x3fSnQdECPP1hP+QlFeXTs4wsA7BhipClKjs/WNSR2sXIQ1JCphDgnQf5uaE7wbT7xToVZQ4BUSPlcGS+dTA+cDCs8buTJJwLa/nHaIzz9MTYFFLsLv+P3gYiisW226Of4cP7eLyOxWc7/AJxBdsrfkOn+AxZ8dK6bmjMVr+QhdelycZBL+S8afE04WAhNFm+fmTCnWUZFd3ejZ+8dVIASJTkbcrMUJKlMD5fh9YC2FSwO+3e/xgOWAkccieMDoiFbkPJMd+sl4nr/ANyclWCEEP6GsBuCs+/xmiNtJTxkZr2wsVnnETZ4Vg0ParUf4wYDH2YEgzia/wAYeh4hF/VMqn4g/WAZ688X6mIir0qJg5Fd06xVBpv+S5ztE/thrulb/jGbpnGLOE7KODF5Ht+cCoV5G9v1h5muvOhz98ZG6YlvLovPX6yioIX05dt4qxBIA8bOffP/AGUCwpA+guXxuKnXutYzY0GLYso9/wDMeaIaHXbJu4WQGiz9L1MU6QzSvO2+F1bM2zbNSX43P84G7ojwVDY1wqcdYO4DrAdVQiAXrInFQOG1W9p9x3xlSUISrxR2WGe8OTU0SgiH01DvD2HJtxP64YRoQ5Q2vXx7w2aLSzX2/wCMhyGFcKTnGQXiARGHh3+8q0HDNj1ZjkrZTf8AzKYz4cs4nE53jGYvRAzhvtYc/WHS+4AIvxx4PWHTNhtSdw9H7wRlulQpUJk+TwBXg3zr4+c0l8nJQ94IAYkUae8FpZNJXpmEE15U+OTEoqmwz994gJd0G8+JLiwfaPX7xcMazgRwFF7L28YbASgLYvN2d3RiOlVoTY7gN3hEobrRHZG3CUQRIG8lJOfy77EjoMkXseE3+cCJovhjfAX+94oNsvEAjoPq+8YGqOrKeiayDMb3f4HfOVCJUUSG9P8AvNjrAbYHl+sT6mtHU8vGv7vHFBItR+v7vBdcFKB/mfOFR4RwX9/xiKtNuk38PP6zkT0g5nnlgtCLE17rJPhGQ/N7wU9hVJflwhH1sYevH/mElAGxp+/OAsUppQfeEsD3pz8Y+xnISvjxiqNAolzWQm5EwTazlY3GGADmLgCg6tf8YI3VSu/eIbS9v8YQYzgrkhbG5dXGngJA/K8f8zmQHOTcvzOc5doEBtEVOE/eMe2htJJJeZ847iRKPO6s84Q2g7KPJeQ8HnBFzMqD9fWAooTuuu0ifj1jYCjeprnZlo9cCQ8+8YIHLQLfn6yH3IlwtkNqNlOTCgOuO9/GHA20g0YAHSjpBx/n+cr3QUhEDaRacdzUx2iUrF2NBTmQ2ax8wrbHm5OQINNp6co4p3FPvKRkgHdhvnBXVexBkAHE3G+vLsx23ob6HM+Q/OOTy7Uv0xKeNpRH1cIJg7kD7mUtXNC3AB5vDejWHATZJautns/jOiqpQN+tec3ByZeX1PMmHoRSk9DpS649ecMhw3nPrWCELCjxtYRyILjI0Tnnr+cagpahrfuzKpYgUkHb24oqLFBD7yINMBUIvdtnWeBKJIeS7x2kYiD9JiiBCbV9ef8AeMHsoE76vGNtWhSYnkdzt6yaG2CyePXeIQXI2Ot/4wVSrZZgQx867ddGBRk5IXj/AHg66aN76nOVpKokF5DnnDipUjvWMlwulp3098fvNxGgNSHr8fxjxr4d4KheRz74/GEU7IQR/wDcCpiAls+d+sNc03sifJ+cXNEgIfyxSVmq/t/OslcFojU1ziytrq4N/wAZHFATQTxcOhE2Qu5vDQnOwD5wS8Dv3hxCJNCh53lpkdqg+J4zTnJAMPxk5FXbGPn85uXqh/piLDerxjZjvgwrQspDlgMVgvYfpyG6wE628ThxZRRK0loxNIvNwiVg31FmifNbydYn1Yq7uucmgR+7/wCZIVWhqfjF6qcMHAdfWOCtHdAdb3jiFOQxPcxVYkMOXadGnARXB0Vk92TBXUqBH0vPnAOqGwonuYV3m6Anxpr4ykM1hoBsgXfz3M2fIvLndN7Bzc9FtR0ILtHrjEj1SLR3DinT/wBxSNI0I9jd83nAfWvZxsN/xhJWyJ4Tj85wV3BDDXny3rAFvYwZNnUxIrd5F1d97MZuuxDtPBrjAYA0tocMvsx1FxkE+f8APjAHwCK0ncQ9ZQpXz+Soc/GXuic+eqXv/mUEvYp8wesEOK2LGoaTeJCeaj9C/v17wkGI5290f84Qq3Ygk1zHP24sATiu3vLPaF20/wBZgooXSiHab63m4poHS8fu5I17AkbrgzvYh0zzs5xG5Gt2yTgX/eSUYBUii7G29B24LSG6t384puBCrZkRKK5kOvvDrQCyEuG7rIE1xBEAhEI0/OIEutkLU/nCkJJQYNHL6mDfY0LyL/fzgLY5atuDPAFKLj2hVl8sCNTO42ZXkOKbP1lh2A+RhQ1BCtwihDwSOWFDZHk6wI4puFPGCBDNeHv5+MIIlhAojf3/AExAxukGOYaPxh9RAUUX+/4wwsJqN/dyDXbYLrCAKG1gyA/IDkwIurOMgWkOh2zDthGo5x/AUkqP3kDSO+5hGBUXofPrCbe4jXv65zUDwdXBIkuwbwJuh3j5n9/nB8EKjP08eMTO6rRp9YJG/Cn5zYkdov4ed4eU2DgLpD2vrJoIrT44e82byvHXNUjol8ZF0GLoJeR064+sYVp0gD3wLvAsUSA4Yya8uAxBIuy6D+Q+8Ng+ABgn0F5onV9qYh6FO8Aov6Y8qarBepeDleesOHOCldfj+M2KHUr0MRL6yH5pucmKIJYaPex+cMFoQYm361ciZGreiCIQ15mNWDVAUeF8f6yOIimTXjXjNim/W3dn98448EhfMf2ZEtgE/wAno+cCUFNuo73P4zkDXfh89+cT0nSpLNb/AB+c9HDri3Qa1y84KpTnQzrRj7Dzwh883G1PYafjePyhKUz8m+sY+c4X4YpvciHE/Uwxp7lVPOJhgl2RytgIZ8swhICADG+f4xQanUi+BRxgWlf/ABlCRaCZRNz95AqyO3L8YgkAsbtMSeOjlVySII2zb33gtFy3tecQlI1NTzgmlXkNF4MoKm+T/X91jLtUZ5OHDUB1fLxinc8ixcUgISoW4oacFd348by64Vo4msYAUhK/4ZIHCY2NPE7zR1CW05tSUsCB8ZFaIul18YgK6WdX/POPChGro6MOFxeKk+/rCIF2R2zXL9BMYOUPw+sV9gPHTFnKSfP1ivjqBvNoFn2r36mEnUDqDzMaQiFm/wAmRZMkF+MRyuLe+NdEsSV/3gXakqRtZ/fGMRqA7ouxHXi+r5wAyZ801r6cp1ak7JIGoML/ADkPASg1yBwE/wBY7QFW4Gqzv/eUhyBRR4nxnn5dNrxzz5xutMhXrXJgvDlQU5JZ32dZt+pCx4Pwv4x3woJRH+vxlCXXnQH7694xmhx6flx4yF/U5fjvHVCWzA9g9/8AMD0YghW2BtvX84EN/qSLabMv0ypol3uOtM4yitzC6htp3x34MsigYCaK3j0mONQG0/OAqJ2G0blGgrg7+dZTtBzGvnFFQYb0el+HBkUachrx1rB61CIE7m9ZfXq0D9+rlgqzd7K5patA0Xuc4hYe0t8b36yFkbxzv+cZSAOe/fE+sIw7TSGcNA2hNzi/jHUPg9H/AHrDxnkDb/dfziEEXYqd9eJjUJV9A1/jF1AhXgW79U/ZjArY9DnX8mOOq1DxvswKQ5BOh/jrKwi6FG6esQicIBCvyO+9Zbspwxvn/GJFGg2P31xhiJZBzrin9c61XpXr7xcTDILCY0oNFXk3/WaPDuCy+PjFTGjY27/d3kJuVJI8hvzkMkADXR++sj3CSjTvhwIIQ3OT+/5xgxDndyDG6fUZ3lx83OA+MhUBoOCdGaFQIPrxiEF70wyEY7eDirnh4QNdmG6VodutY5hpQG3Rm2umgjJm5LRlq5fNEq2fjLwiOhJx/wAyPtUL05cchUo64fnEa0Gm7iUhbTx/zNIXXEaYOwKbqbuHYRYEO6/fODC+7RU/PvEg8EBqXdPzkpEgA7ayHUPtkgaeIWnqBtPVFNqNKxI5TbNa940wN02B5+JicZJpDelOHbrHVAX5UTr5wdFHdw2C9Ef6YQTgdFe/4zZ8EWs6d4L8E8g/887ypbqOc52NXGD2oA9ixvRc1kEB7UR1rj9mMwVWynEeeJ/GEJts0nhTsp6wFlsKqI87wOIDIhOxvjBzpxAK11HWn6cOqf5VSu5h4cupaeQ/GMQhtGuXjrLMhoEB79YUJQUOGl3o+cWccRinPDN984V3veCvN0fvAvZqqlv3/dYeS1VVP5T9Y4ag2cOVDBD1LhQRmyj+Xk/xmnhULd1/vnN4Joh20/5+8rMKixU4/Wv+4nNwsPkxfs+zP2LgBnt04oVZENNyfnucYiGCa0vGtJPsx7ZbkrzJO3/vjC0whhqRdd/PzgJkXYVlmn6vnEwUJW5qWHlvPreQ0EOD1r8azeFDb+vrEBQl4OHrl5xCrMgVw7+OsMCgboechB8LZYf6wCmUlfH
352+ Z/nCiBdXswKirqn9OHMIInXP9+83AC6TtxQRk4u+XV8GPNBfsPvAEICUXfjDAaDt17/nKShSX4v3/ADgwwXXa/wC8BvHte+8Ceo2z4xaCVEdhf54wZKJJOGcT8YxWtfx/XClcXbp9Yp0m7J/bgJ4isr4/X84c2wguvn3/AMwjAHbY+MMCCTbS5dEClNVyIkAmPEKdvzhoIW6uc5S20SfiayIMo2w7I3ABqKby+OE+8lAI5cUa8Ds3jeIKCPAdFXIZaQKBILzhjgKtEk/WEpgLNA4xFWBTTWtTzf1hjyc3KHN8f7wRzYc6+DA3ZH/bCztIY188Y5/zpODd6neLpDYFQHp5vPFcDF5N0GdNcc8VxcyUQuprzrFPcE5jmD/5rHMQIs63ww4eC3Xzhn3TvPuXESJwBRE0TzliRJBH/DlgCJG/L1XGkErZSghOj5clJpYPy0v+sB6kFw1ikUQ06k141iaDTe4vx3xggg1pGjBM35wR/b/OFAENjuYG12EDYWidtpjfATdsPD10ymgjUqC3jrh/eFQtoPnT9msHUYkE3E3X+MtShh1dM/bmiBErQU/7k00Vq9z5Ou+cv0ApMnQPkH5yvWPap1xe8USELwa6+o/nBTDBRgbvXM/WPASpnZQQflj4me3MoeR15TfxlnAKA34c+v4wBUydDc3qeMEithHXEm/bfr3jwz2XXH1zxgVXo0Bv/X7+8UcRP0TR4nm4p3E02YvPrNyCTqp8a6yhTg2nf/uPhUaF2Qh/57znCB5NBn93kmqNfbUP7vFOJbPM9cbuT0w0I/fGDUmJ6EvWOQNkYnJT/uCzdoUrrW/GFoQhAunjPAGa/wB5xJva07+/zcOHiKOXz6ZlW7dKmznFgkAAbb/MxNKkaoCWv2YYZDpycvOR/Il0Nk+cLIPgtwKdNoj5v7wagM0PZ/jAyqHG0PrI1EvDOMfghRP695f5fl3rFVZop37xCioqv3+s2oyyGn3jiArejeuHvEOvkWl/xm6LcXr9fOBbMTdcT08Mzjg4hE+L74xQZIkAfJfN6xCq6FOHZP8Ajif21q1M38z/AF1mnHwyc/SJxgjBchj+W3h88YLDBUkXvl+eMBeYUoRKgKeKHv3m2FqhryPY6pvnjHZzKgX8v9njHOEBRON/Lzrn1hWTRsOUnc+PHrAcmRVDTW/jJwUL3gPEYT4uBKsclmjzU/WTAABry8/eKQ5SFF5P4wei0fb0v3lALsYX4r+MaFUoCxy9/rB+DAVydgYAKYRAaT36TdqsgbOdZCcpeuJf7rJBIdxaPfPb3+sAhgRVEd1dcuLSW70O/wDWJBBilBWyv95msVYjjIuj9d/+jHJxiNYp3ChP+ZEuQo1bo+VXv7wcG7CeFD0dejFiioKS8Xz1ixrDzn5adr85YDavKsDXx65xgMgoVPTyh+XLgGrNAO08Ks8Ru8bE2GkQfr3cMsA3sccHfH94RQoQiutDOf8AXWFnn5ZL431eMhKRS3/jv8lwlEIQhERfx/h5wogONOGBeehyD1oKk2/IO/Uy4eCJFaR5MIhAPKcC8/HzgmsXYlo67djhs+8ab5Q7+fOLGVfOAwfvr/WmbAQAGE/7+MCxSeHX/uGuegkG6v2TKmTmOtAfkRwmTA9y9bwOzIbl5n9MZbggxnNb8jhtBtdB7/hmORUNmw6nzN4WVQ0AQhKb5O82DgXM2RfW64srDd2rr87y52qFTn731hIzm2uDHD4NxNz+94bBobKJs/phgAFR3CXfx/GEhEGyKit9fH5zfOLFQJeeeTCrYcNYgA6pv4zdrESDwVPjBBDYiP5vjw5eBgkTeJENihR3v9Y7JQCrgf75yyUadvlr6zeN4NPOAJVSj4a/ZggUC706xnJBo54V+N/nLFp2JCt9cf3zgYlrZQX5cfnGTTVDbqaXfIfvO0vyiJsfeCTQKzQs33/l8ZW6shN92c61PWGnz2Zhdr+MJakH0J584o3JW+dN/H8Y4GT2k5PXi4RTRayPe+XJhAVoh6w4TJLPPOs40A0d/hmkLuk5/wBZz8haC3rTziCALWtLv8c/+4JztY+ey+NJ4jreUArAYqdvld9e8ObThJzHwqRY6mITVptp6Tvd8c4d+J0mjXPSA3zcjGBPEH5Fbns4piKBEtFp0OaPxTSYDweS8t631w/HzheiLbIOBwbl9Zp2ra0GFeSlEGcHUF0HpxAIvwtejB4thVbVzvjj+qogBpF0r/fOWxtkaad/wYomba3s/wCs426AWQK16zZUW00p/OE3DF33I+Htt6wCEyAsFTn8TCnUUS7JpfvKriUDV0v0JzjRjAwhGX6xGMFMXs/VVyoBU7cNT8ZrCwKCy+PTv4znrog4+jv1i4AOjGU/eHzYtYpu9cVwVTNup1J773hNtS8tR55LiW0K2Sdq/wB8ZebHAC3e/F79ZogPig1z8VyrBdF2Fv3vz3cL2xWNzs545fzkzbrQg1Ifxm6FLW4vn1iSCWngln8Y0kJvJtx5lcClFKee/wDeKwhF4M3P3h+KGrCDNfrIliB7Of8AGElAZyY8/wBuc0EEeVgft/XziBgqGnPT9YrGUitmlPfN8LhqFUMWvHvkwTuqH++p+ciMXCVttvr/AFggE4gWuOO9YEfg2Ox44HxmvDZ2Uox9PrGYqSKzXv4XAvUhN3W1vmuPpsjNi9mTOrklPeWXYh7l/wBJnQXRpfGULOfXR3+cd0cEyC8pOtusrYR0K8I/2YY4gTgLP987wOYkZboiT768YGPJDh4ZTgIqjTi9fEx0zCG68/jnEudReO1v4XeM+E3Uo6u/Tm99kmjqS/1zREQREfS6f+ZWApBfsX7n5y1HVHSHOz9mIiFwCt8b7wUjgKDrTzkElp0lgi9ov1X3jXBCCWAeV8h+LhOqQnW9zni3CsRAXBkdSPes4airndCUTUgPi5t2fFCh5NeIvzvFuDQiSf4IM4Y61hU1mINItIdng3+A9tIBUrz/ADH6wDMT+T8PB9MjtNVk3fBLWb8h5yXO0TGiHPA+PG/Vt0iOWEa/l5t8YslBpNHx4WWw+siFCL2dV9bOc14aQqABtfZ+/eAvdToT/OKOcCjDQN+w/HvAFGpAPA5fn8zDNJSKNqeeP1hADpgSCP04JEDoRgLnwET3m8KYNoO9c1ZPjN66C3zUEnr+cEgEVNBJCT3higCgSws409z3jBETTol/Ca94AVvUx4KjqSkNVvUEe+HIO7fx/GOSxxE5VH/H+sIgQQjE2572fkwyU0Mb6/8APvEHpJaF488n5yY/CV1pUPn63i5TZ+SzSdX+cKE0FBtBTXzcT+pdg1p8cwfvjC2LFwuko9nGO5iJQ4fNxEIjoaTzfzkxIrUITjzjOeRDYnd/xg3fiHFqIN3T/TDd+cb8bTEiC2JYX/bghtBApruj08OSIEBKPaXv4zXukT4GesactoJTTfqpiUiAkE56evcx9OiiqVd+MR8CweT/AI1zgJSqAu/GvPH7xMAd0tLx9OEH7wnDiFWmANSYvoyArSsyqW/Bsd4lYeq0XjNsUQkj6/X6yoL91zj5Is3vz/jBwNGvZnsCjyTx85FKThaeaYnMVCwT1rBCNnaGw/pTFA8ugc5d+5lRkVDBf8ExKqbKNKuzIUdq0BeePCIamEA/lkQnD42/rBBPUOdIcc+Lw68ZrMGwoG3jxZPGEnxrgADfaOr66Vw+NODU7X8ScBIAGKWACNbH/A/sxa6qfZh/n+cOtu7m5Ruh0+n7mvvArEWFqLQnjafGWoCDjtrL5uJToHCvc+fD3knYJXejr8+veAgCjTssf95cIjwc1Gf1yEHRC11fx77cfkjZFU411vFyEaC6QgZ2w+O8La4WvN+XrGFQV+4Q/DPxjaLAAlmjPZydcZzg9ROCGj8fnHZSChVhd92/xgtCjBhIXz4/nHBDyPYD8d/j7FDSVV5Nexv3vD3yquZhb6in9M3TIWJdf+4m3idL1/g/WFFcUKavHGnXHrBqo2E0ts7NHXjN+yctCzfnfWtC94Z1XXSPLxxP5+cXToEew2U6j6TOKsR2Goj3v+9Y3SCnsEfnU54TH0NrwUaOfOuf15EgKjOiQc+L/BlOBJNKg0b1uephvOJoiP8AU9mI7eqCC6fl/GBiUVOZxpfa4WMqAL5F/Z9e8QMHkb5Qfsc0BAB5k/v5wEuFlkNuuv8ApiQ0JRFRS5QV9g1oYifeV51Qjcjb8YYK8Ra9Xyb+pimSjQYac/xvzMVhewgU3rl4fvBkaagFWKa6P95OmorxwW6jHf8AzHWwBvi8tfHH4wu7UFRdqKIkTRI4CHHKDHQc71+fOSbEp8n/AJg6WPs9t/WWkldHJs094bCsNmgh7/u8FgRF42bv4y2C2vJMfTUA29pgkdoQ2s4nmnFwhFVBEhT1u/3eds9ACj8YwkAZvQu2WaCUd9YFhU4IHKmpqCHfnK1i8zfex9d5Uc2S36+zC9aDZr1+nErYGbePZiYNMCUrf+f4xCo0ZQvxiexDSH+85LI25BIvzqdZpDA1NnQfafcxaIGvd8/P+HFEDSt7pr1J34wYVE3PG2p17w/QhtpZxv5c3sRM4CL3/GCTYASbCR80XDRihWyqD43PrGU4h0CfH3gQoctev64W1IduusBQiCG1m/HrAt8wouuJ/GFlCKcKsocIy3L02c18XEF0SiQTX7O83BtQfLvISoI99OvrItVYIqXv443gnCV+R8/OBIY5PO7v1/rBEWAE3sj/AOZs2uINrP8AGCC7Zmnnj8rm7POYobEl17yiUJNBd/ttNZVZULPHIH3vGPciISr++sW7KdAXgvyTOaiCTjXzHLHdAw5/us3vFoOkrj9/OLU1TacJv8ZIut0Tbzr7yuvDbwaJh4DFEsIUr8H4MfyKA7njGUXQFFS/gzalojh9YUpI7TzPnFwhQ4e7mjqoUDeH8T8GRI1KvO7f4wXUqPC6R6Z0n+TIK9Y6aRl6EJ4xAtrItlZJQo/twWHAWOTZfE4dx7zgECticR6s777yQYlN5NjthqenvImf4GVG1SRN6Zj7SgVAEITyDP3vHDQjXSALvrscUhpc363H7vuZMTn35hxzTTw4d0soWsHD+R7wR2XYA20h9n8YxRbh1pdGBAhzeY1TvAAqCU2Nen08PjAMWkEbqb6cEqLYmxTafCv18ZGgCtgyjuc+M0OysJVQX53frHTVmVt2eTc+HNlSAdq8np1lyF00CGxuvZjxKrkbruY4hWsSEvP985D4uAbqL/OIYkwDwOeuz9YE+4VZY1ir2IeRx/vCO4nIT0ox71nkPSJAm5s458Y+JmpsC62fE57eTB0qS7bBs1zT419zIWyxKS/IQeGY1RuQadfIij7352sCXgoFvsKwdBhj8AKkm0u5YH1bbiPqL102+N/Rg0hBvs0CfxnDjCbEWT1OfxkwTI3ITmvwYhNqlG3zPfOXMu0dmn/n6zVhoMtX9Y5oilFckg9dfvK9KdWzpiXvAFGxCcX7Hn6Plg4EBQeHp3HF3LjER44OV2vrAF95Awai6sb+uMaAnY1Iredf+HKHO+KoWEka72mhinO0adSLQko10ccYoqULEsUjrUNdrgFpyjpFfWv1gSaNt0Setd4hLlSewf6XOICq+BL1UXzMDtGN0So+xH4xD8gD0VBP/fWfy9wCr8/5ZwY4Dhfo39ZKl1Nw6Hf5cfg8Beel/es2tBSxOHv55xjZRofXH6fzgnQmgXeneQGUW05DX54wFWv2GNIgI3n+7yxXIPCwfn3icDTZ3ghSJR3eD/X7wipAgvN84txS1yP8c5eCdL4cf37zSOaDzfLPj9ZqoOc7KWfvJIwQqk/lhlIUM7UvHrGDyAHfo/jEABsXZnM+f4mXsBwe1m/HHziGatCpVy8SddZawspobwP98Y4swF1tpv0IxRqRDmu32VlxZoIh8JvxvXrEIJ4OZKXgwtsC66Lx8YERVQQ52feKBk1Rocm/C395wuAoVrhrcnL1kBLZNQK2et284jjezaU83p9/WOoEEOrh62GKBAtGa8P55zkGiOq7XU444eMEKICNnJnD1O+fWQNQQbgdE+v1lKFmmiNfG0+cQoVvak/XcT14wCwEpkNHT6TEpA2ztBGfXn9Y9yuVDo5+cpKNEDZkfKGvHxlymAUL6HOv4YmwLUt0FrfX9MZUDUPng/hxJacvEMSBKJDvdO2NFxnGjKRW63j4oOe0p5ex+MQLEKaUfn1gvdEFKm0b0748H09Ild0o8L5k/eJYggnQePU/jAIvnEAIOJPL7yaTQNpZKfBuecrA0BBgPxA/jKI4dzTkJO+ssKnYTW3B64M3PQKvG7/JjBEAOldpfvAT7uSghTu9ee8FsKFcHQnjjEHQC1ohOPM+zGpAeyAXd3qmLgVChCAhAiPWPAIoEciv4MLWJKIvBPW8EBdA2R4Jx1joKx+n+ip9YgCHc3Qhfx+94gQ5B57P+MRlBL5Nl49ZObd43Uu3jXUxjOJbd8ien8ZqREoIg/I+DgwCjfbZoKD8pzjnBFDSf9OQkDr5P6ZBZe3OhL+gw1LUeOkuUaEqF23AVCSK9n/NYUllThpPXGUCuooE8b+MkMlJoTL9R1jqheGbWkwZIO+xeH95qZ2iaem/7zjnqSqjYn/MKDVddGoYwsow7f33ig0rwCT+ckrKhb3z/GIZpYvGuf75wre/Ajxp7dnnBBUWQHTv06x6ELRyQgr20f14zfWACW7fwezNsWwQiXvw762CIxxvQR7HFXS779/lQGlsJmteKfeEEgj6ywZQAWsgqhFN7kfCw/J9ZrlBuNfXjHnSJRaDvBUv1Xy4T4cREgqMWH0Nhz4ON0xQYQnYkPD6y+NqgbBUP84AqQ7vd9/BiFWS8aGiTrhjWO9B1CQ18YCIGtWyOzrQ8de8S6jX2lj+Ofj3g47TbajJ8c57KIawn/HIMCRlEeP8Z//Z"/>
413353
414− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
354+ Example content:<br>
355+ The names "<b>John Doe</b>" for males, "<b>Jane Doe</b>" or "<b>Jane Roe</b>" for females, or "<b>Jonnie Doe</b>" and "<b>Janie Doe</b>" for children, or just "<b>Doe</b>" non-gender-specifically are used as placeholder names for a party whose true identity is unknown or must be withheld in a legal action, case, or discussion. The names are also used to refer to acorpse or hospital patient whose identity is unknown. This practice is widely used in the United States and Canada, but is rarely used in other English-speaking countries including the United Kingdom itself, from where the use of "John Doe" in a legal context originates. The names Joe Bloggs or John Smith are used in the UK instead, as well as in Australia and New Zealand.</p>
415356
416− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
357+ <p>John Doe is sometimes used to refer to a typical male in other contexts as well, in a similar manner to John Q. Public, known in Great Britain as Joe Public, John Smith or Joe Bloggs. For example, the first name listed on a form is often John Doe, along with a fictional address or other fictional information to provide an example of how to fill in the form. The name is also used frequently in popular culture, for example in the Frank Capra film <i>Meet John Doe</i>. John Doe was also the name of a 2002 American television series.</p>
417358
418− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
359+ <p>Similarly, a child or baby whose identity is unknown may be referred to as <b>Baby Doe</b>. A notorious murder case in Kansas City, Missouri, referred to the baby victim as <b>Precious Doe</b>. Other unidentified female murder victims are Cali Doe and Princess Doe. Additional persons may be called James Doe, Judy Doe, etc. However, to avoid possible confusion, if two anonymous or unknown parties are cited in a specific case or action, the surnames Doe and Roe may be used simultaneously; for example, "John Doe v. Jane Roe". If several anonymous parties are referenced, they may simply be labelled John Doe #1, John Doe #2, etc. (the U.S. Operation Delego cited 21 (numbered) "John Doe"s) or labelled with other variants of Doe / Roe / Poe / etc. Other early alternatives such as <b>John Stiles</b> and <b>Richard Miles</b> are now rarely used, and <b>Mary Major</b> has been used in some American federal cases.</p>
419360
420− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
361+ <p><img style="height:1.6881cm;width:1.6881cm;" align="left" src="data:image/*;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAfsQAAH7EBQMFB5wAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABzvSURBVHic7Z15kBvXfee/r7txDYCZwdwHZzgHyeE1kimZUuxITsWbcnkt2WVl5a04tbUbO77ipLZSSbbWFa82m3XZTuQ4m9psUqk4ye5KdjlKyknJ8lUbK5ZTukiKFA+RQw6H4BzkXBhgZjC40d1v/8DcAzT67gbwPn+Q8xro1z8A/e3fO37v98gXn/k9OjIyCkIIdnOwDABEVZns/cd4efsyB8t7zdBa3jxSobxtjQXlHZN2fWZV5V2fQ2V5V8ny8p77YvtzVivvFIyU996yGstkz6faLnNgMBgVYQJhMBRgAmEwFGACYTAUYAJhMBRgAmEwFGACYTAUYAJhMBRgAmEwFGACYTAUYAJhMBRgAmEwFGACYTAUEPSe+Dz5Ee4U49gXvLnN/qjZPUVS5r1Kx/exdXx3NKbuuqvauDfKs+w191dT5T0V61BxHBWOl3t/pd9DVd27/ij7GVTUjQrHy71f8XoVPmfFunf9/Sttv4ZeoX+/VarRLZANmkNalKsKROvNquW4WQKpdlzrTazLbguOaxVI2eNUZd0G/za1vl02FmkRRmBNLAZDAd0epBFJTyQgruaQjSYhtHjhafWBFmW0PtYH3s87bR7DAphAVLL++gLmv/EOwBHIeRGE50B4AlCK/GIGff9uzGkTGRbAmlgqif9oGnJBgpwTAQpQUYaclyAXZKz+9B5AnbaQYQVMICqgEoWcESu+LuckSGljnUGGO2ECUUHqcgzFRK7i64QDxPW8jRYx7IIJRAXF1RxAy7ehiMDBP9QCb2/QZqsYdsAEogI+5AX4g18VIQR8yIOh//QQCFdhxo1R0zCBqEBKFwFJPnCceDmMPPMI+KDHAasYdsAEopb9ifQEgrb3D8DHmlZ1DROICny9QYDfLxAeweMRhyxi2AUTiApoUS4bhCe0eJ0wh2EjTCAqyN3bgFzY1weRKfhmnzMGMWyDCUQF2TvroOJegchFGR7mQeoeJhAV5GaSBw9SgAuwULZ6hwmkClSiKMayB45zHvbVNQLsV65C/n4KxHMwlJ142VfXCLBfuQq56STKhepyPrb+oxFgAqlCdmoNcl46+AILb28ImECqkL29VlYMZUXDqDuYQKpQXDnYQQewuXCKuZF6hwmkCgcmCDchAof8fNpmaxh2wwSiABVl0DJRvAAAQpCNlpkfaQDy8RzEdBFiRkQuVnkhWT3AZroUkDKl5Az7Z9GBUh8kc3cdrY/3mXpNKlPklzIoruRQiOfgbfcjfLwVnNcdo2Ybd5K4+IVzoDIFlWR4Qh488IUziIy3OW2aJTCBKCBnRRCegJZbjk4pCgvmNrHySxlM/eEl5GPZUsYUGQBXauYFBkIY/txphEaaTb2mJihw439chVyUtgcuihtFXPnyJZz49VPofrzXOdssgjWxFKi2SrAYN695sXE9geu/8xpy82nIeQlSRoSUEyFlRFBRRmY6iYlnzmHx+zOmXVMrK28tI7eSPTCqJ2ZEXP+Ta8gulR/QqGWYQBQgHg5UrjxSVVwzL1HDzF++AzkvVb4eBeSChLlvTyLx5pJp19XCyptLkLLlh7c5D4fM/fobtGACUYB4OMUJQSljzlDv+sVlFFfViU3OS1h4MWr4mnpoOhQCVynEpk6X5DOBKMBV8SCcl8fa64uGr5N4dUHTxGNmNoXcQsbwdbXSdqajYrOTihRN/fW3/JgJRAHi5RE+01nqMJdBzom4/413kL61aug6mXLh9Ep2eTiIqYKha+pBaBJAy4x6E0LQcrwVge6A7TZZDRNIFXo/cQqkTMqfLeSChJk/ugRRb3+EUhSWNXZuZQq+yf4ByNTdDXDCwYcF5+Mw/EujtttjB0wgVRAiPnT+4hHF6F05J+LusxdBJe39kbnnbgIac2pRSQbvwGKtxVfuQ8zuHfMmXMl7RE7V5zwIE4gK2j80VEoeVwEqUeTn05j64uuQspVz+JZj7a1lHYGPpGIIjFXIooz4pZUDgxZEIDj+2ZO22mInTCAqIDxB/2dPK85my3kJufk05v7sqqa6pbQ2QQEAOCD5Tlz7eQZYvRov20GPjLejqa/+OudbMIGoJHiqHcHT7RU77EApPVDqnTju/Pfzqod/9Wy8QwhB6Gir5vOMsPDj+5Bye8XMB3j0/cIhW+2wGyYQDfR+4qRihx3YjNGKrmP+W5Oq6hz81CnNqxPlgoSAjUOq+XgO8QvLB5pXVKRof6jDNjucgAlEA542Pzp/cbTqDS3nJcT/aRaZqfWqdbY81Inep0ZLk5Iq4Hw8QkdaQAT7frqZ70TLTpi2nIjU/dZzTCAa6XhiGHyoerJquSgh+tW3sPDC7aqjW/6BkKosKYQjiDzciRP/7RHV9holn8hj4Z/uQd4X0cz7efS+39xIZjfCBKIRwhP0fHysek4sWsoKH/v+NCb/yxtI3UhUfKun2VuK3K12bYFD31Oj9nkPCtz42uWy3oOKFJ1nu+yxw0FYuLsOKi6iKoNckJCdTiL67EV42wPoeWoEkff07LnJk9cTqur0dvjRNBTWZbMe7n1vGqm7yQPeAwBCI2EIKjxprcM8iA6Kq3nQooZ5CFraxzB3P4W5v76Ba59/BambO+Epa+cWIVepj3AErQ916jVZM8nJNUSfvw0pd3COhvfzOPTBQdtscRImEB20vrdX945SUlaEuF7A1FfewvrFZUjpIrJzqarncX4e4ZP2zFbnYllc/f2LkAvlJzAJT9D9c7WxOMpHjCUYZ00sHXg6Auh4YggrP5jWnf5HzkuY/tOr4AMCiHJU/fb7w2PWz31IGRFXnjlfMSKA8/IY/OgwOBtH0YzgI35D59fGp3QhnR8dBWdwiFPKiigkcqrCRgjPYf7FKIrr1kXxSlkRV37vAgqJvGKY/6EPNUbzCmAeRDfEw6H/U6cx97+u2JJETi5IWP7hLJZ/OIuH/ur9yN5LYeG7d0ElGZGz3ZDzEng/j+BIM4KDYcUZ/+06i/L2znJiuoir//UCcouZiv0hInDo/fm+muicm7V+iwnEAM0PdyEw3IzM5JriE9cs5KIMzsfj4idfLi0HLsigMsX6tQQgU4AnIABkkSI00oz2R7vg7wmikMghH8sht5RBfiWLwmoe4kZxe36GUgrQzSXGCoMFhAMOPz1i+ec0ipmLG5lADNL/mXFMfeE10AodWrPZ8lZUkg4cQ3HnfRuTa0jfTYIIpbRF1UbJACiLg+fQ8Ug3/F31tyhKCdYHMYivpwltvzDgmrxVu5GLMqSsqEoc1SA8MPLLR02wylqIyWvjmUBMoPtjR+t6vxDCEbSd6USgr8lpUxTROfKuXKf5VTYenI9H/ydO1t2eIUTgwHl5hIbCOPIrY06bo4gV4gBYH8Q0Wt/bi9j3p5G9m6zprO+EJ9vNxd5/1Y++fz2IoIuzlRBYJw6ACcRUIu/rQ25uA7RYWwLhfTwopfCEveh8bw86Hu1Cy8mI7mgBu7BaHAATiKkQjoAQ4v7NpwggBARIBRmhoTC6Hu9F29kuNPXu9DHM7uyaDUfssZEJxESIwNVEhsGmgRAGnx5F5EwHPDUw6bcbAoCz8WtmAjERwhPXC4TzcOh6rBedj9VGsOFuOGJ9k2o/TCAmUmqzu1chvF8ApRQ9Hxhw2hRNbAnDiW+WCcRMXNbEIjwB4Tn4uvxoORFBeCyC5rHW0gpGl7PVlFIRUmYpTCAmQjZjoZyGDwigMkXn473o/8gwAv3Bkl1uMK4KhACCA02pSjCBmIjTfRDOx6PpUAh9HxlC26Pd4FVmSnEDHAF4zj3C2IIJxESq5cyy9toEkTMdOPY7Z1w/RAvszGHwxN5RKa0wgZiImjUYVsH5ePQ+OeTY9atBtsSw+X8tiBhgAjEVJwVCRQpft7PBhFtegZBSkN/W37UkiP0wgZiIk00sKsnwtu5NULB1gxLs3KRk15Dp7te3jlHsrI/fXEe1HVpGsHOjb3X6t445NQxrNUwgZuKgB/G1etER3Hl61+oT220wgZiIk8F9Td0B1EiikZqCfaUmQnhSPX+PRYQH3BuSXsswgZiJQx6EEwjCAyFHrl3vMIGYiFPtft7Lo6nBkinYBROImYiyM0M5BAh0GcsgyCgP66QbxMMBIR8Q8gAZv4woAexJALSDXKTMg1gEE4gOBA4IeYGwF/Dv+gY3TEivowdZkuGPGEvSzCgPE4hKeFLyFM1eIFBhEZ7dWzNv4Q176nOWzgUwgSjAkZKnaPYCTd7q96AZCdr0EGhn/Q+rYAIpQ8gLtPiBoEfbyG1uNQ+5yn6EVtDUy/ofVsEEsgkhQIsPaA8AerOIpuYzkPP2ehFCCMKH2ByIVTS8QDgCtPmBtgAMh2pszKRKmdJthPNyCDIPYhkNKxCBK3mLSMC8CfD0QsacijTACQSBTiYQq2g4gXh5oKMJaPWZP/OdS+TNrVAFVAaa2CShZTSMQAIC0NkENFs0XVBMFSGW2RHWaqSCxGbRLaTuBSJwQE8IaLX4Htq4lwbv4yFmym9+aRW8hwPvwr1J6oW6jcUiKDWljrVbLw4ASM2lrb9IGagMpO7b3/dpFOpSIEEvcKQN6A3ZF4HuDXu29/yzE8IDsctx26/bKNSVQDwcMNgMjLTujZGyg56f6ULHeBuIzTHvhBC0jIZtvWYjURd9EAKgMwh0B51LPLZ+dwOxq3Hb50GKWREtQ0wgVlHzHiToAcba7W1O7UcWKc5/+bIjG+cIAQFLl1Zsv26jUNMC6QoCo22Az2E/OPHcbWRXcrZ7DwAQMyKmvjNt+3UbhZoUiMABo5GS13A6ynv15hruvDgDyYE5kG0bJteRWc46dv16puYEEvICYx1A2AXrg6S8hDe/9DakvHPiAEoRAdM/mHPUhnqlpgTSEyoN37olafmVP59AMWXvxGA5pIKMu9+fA5VdvztizeGSW00ZgQOOuKRJtcXSxRXc++mC495jC1mUsXQ+5rQZdYfrBRL0Aidc0qTaorBRxFt/cMXRfsd+xKyEa391y7HEdfWKqwXS4geOuqhJtcWlr19zJDCxGrmVHOZfW3LajLrCZbfeDu0BYCTivh2H7v1kAbHLccfWnysh5iRc+8ZN5kVMxJUC6Q4CQ63u6W9skY3n8Pb/vO5K77FFIVnEwhvMi5iF6wTSHwYONTttRRkocOHLVxxL7aMWMSvi+v+57bQZdYNrBEIADLWUhnLdyJ0XZ7AeTUKW3C0QAMguZ7F8iUX4moErBEJIKWSkw9kdxCqSupfG9f89aW7TipTWkzd1B9B8OATea95PIeYl3PzWlGn1NTKuiOYdabVnUZMeqERx7ktvm9spJ4DgF/D41x5B65FSe3Lun+fx9p9ch1QwQYQUWJtKIruSQ6DDpV9sjeC4BzncUsos4lYmvjmFzFLWvFnqMuIAgIH392H8s8ch+E1aPkspZn50z5y6GhhHBdIbKkXkupXVyXVM/cO0eU0rUgpP3y+OLYafGEDPo13gfcZFIhVkRL83y4Z8DeKYQDqaXDpatYlUkHDuS2+b0+QBdsTxbHlxbPHQb59GoN1nyn6HUl5C7ArrrBvBEYG0+kvzHG7m6l/cRGGjaM4TWKU4gNJuUe/98rvBmdBpl3Iy7rw4Y7ieRsZ2gYS8pcBDt00C7mblWgJzL8+bE2tFAI9KcWwR7G3CqU8egxAw1tSilGLprRXbUxHVE7YKROBKsVVuCx/ZjVyU8dYfXjUnSnfTczxWoc+hxOiHDyPY22S4qcUJBIsXWJSvXmwVyGgE8Lg8x9mN/3u71LQyyqbneN/XHkHrqI7OFgHOfuFBcAYjNcWshLmX5w3V0cjYJpDeUCk6180kpzcQfWnWFO/haRLw+NcfRYsecWwSHgzh6NPD4A0O/bo1uLIWsEUgIS8w0GLHlfRDKcWFr5oTa8X7ePzsV8+iZdh4Op6xj4/C1+o1VAfhOZZcTieWC4TnSstkXdztAADc+ccZpJeyhjOT8D4ej3zxXYgcM+eJwAkED//WuCEvIuUkzL2yYIo9jYblAhlpBUyY97KUzHION567bXjUivfzGP/McfQ80mmSZSU6HmhDeEB/FCelFItvLDuSlqjWsVQg7YHSzk1u59IfXzPctOL9PEY/PIjhJwZMsmov458ZM+RFKAUSN9ZMtKgxsEwgPFcKX3c7K9cSSEysGYq14jwc2o634uQnj5lo2V46xtvQPKg/a4VUkHD/1UVzjWoALBPIQLP7h3RBgct/esPQqBUhBL4WLx595ozliatPf3pMd5wWlSju/5QJRCuWCCToAbpduvBpN/f+ZQFZgxkJOS+Hn/3Ku+EJWr9yoGO8Dc2H9XuRYkZEcjplrlF1jiUCGXF5KAlQyiN17S9uGorU5f08Hv7tcYQH7XsajH/6uH4vIlMssVl1TZgukO5gad7D7URfmoWY0x+jxHk59JztRP/7eky0qjrtpyNoHgrras7JBZnl8NWIqQLhiLtD2LcopkVMPDcFMavfewgBAWd+87SJVqln/NNj4Hz6frrcqv078dYypgqkO1jaZtntTP3DXUOjVryPxyO/+y5b+h3laD8VQcuwPi9SWDchzqyBME0gPAH6a8B7SHkJU/84o3vkivfxOPyBfnQ+2GayZdo4/Sl9XqSQLFhgTf1imkB6w+5LEVqOuz+cA4x4Dy+H0786ZqJF+mg/FYGnSbsHK6bZ2hAtmHJL8wToq4FhXSpR3Pp2VPfIleDn8cDnTxqOrjWLzne1ax8udPvwosswRSDtTaXFUG5n7ifzukNKCCEI9Qcx8PO9Jluln66HOyBo3M63qbMGYn9chCm3dbeLM5NsQ4GJ56cgZvU1MTgPwZnfcmbUqhJd72qHLGoTfLDPpdn5XIphgTR5gHANzHvEr6+ikNQ3gsN5OPT/XK++lYEW4m/3IdSv7Ybn/TXg6l2E4W+rJrwHgLs/mNM9csXxBOOfPm6yRebQ91iPpnXr+VU2iqUFQwLhCNBZAwKRChLmX1vSNffB+3mc/MQxeJs9FlhmnObDIU2hJ3q9aKNiSCDtgdronC+8sQzC6xu+8bf5MPLhQZMtMo/IsZbSYg+VsHkQbRi6vWuleRV9aVZXbijeVwpGNCPLoVUUUkVN4i+yHFma0C0QL+HQ7PIsJUAp9mj11rrm8zgPh55HO9F+KmKBVeYh+HgtDsRQ/Fkjolsg3d5ATcw5zb08r8sDcDzBg58/aYFF5hLo8GsafHDLttW1gm6BdHlqY8Jp7uV5zTeF4Odx4t8fNZxuxw54Pw9OQ0dQLsrmbeXQAOgWiIe4v3cuZkRszKU1n+cJeTDykcMWWGQNvoh6IXM8Ybl6NeD+u9wAC+dimrOkC34eD/7GSXBCLTQgSwTa1HcGicChmGICUUtdC2TyhaimpyUhBOHDIfT+TJeFVpmPJ6w+HotwBMU0mwtRS90KZPXWOtILGU3ncB6CM//xlEUWWYcnpGESk7CQdy3UrUAm/y6qKWEz4Qi6HuowlGzaKbxaguEokF9jk4VqqUuB5FbzWLwQ0zRaw3k5jP3yqIVWWYc3LKhe5yGLMluXroG6FEj0xVnNczT+Vq9pCaftxhP0qB7qlYsycgkmELXUnUBkUUb0uzOQNCyMEgICjj49YqFV1uKLeDVttJNZYql/1FJ3Arn3yoKm0AsAIBww+IF+awyyAX+bD1oSnGRXctYZU2fUnUBu/W1U06pB3sfj2L8dAW/CrrJO4W/za+pvsTUh6qndu6IMiYk15OLano6EACMfcW84uxoC7T5NTUoW8q6euhLI0sUVTTcK7+Uw+tHDEALOJIAzC97PawrILGZEczYqbQDqSiCxy3FQSUMHhBAcfXrYOoNsJNDuU/1ejieYeP62hdbUD3UlkJyGzueW99A0C+1imjVsGCoVZEz/6J7mSINGpG4EklnKapshJgTHPlYf3gMAImMt2pYVS8Drz1w0vC9jvVMXAsksZfHKb74JSUNoSfup1rrxHgDQPBSGoCF5gyzJyMayePP3L7HNPRWo7d4pdsRRSBZU9z94P4++x+zd18NqQn1Nmud/pLyMxMQaXvvdt/DA506Udq8ygWKqiPjEGuLvrCJ+fRVrk+uaBk/K4Y/4MPrUYYw8OQhBR05ivdS8QF79z+c1iQMo5ejtfrjDQqvsp5AsQs8aNjEnYeVKAj/5jdfhDXvQdqIVbcdbER4KoflwGE1d1deaSAUJSxdWEHs7jvj1VSSnU6Z7pdxqHtf/ZhKTL0Qx/OQgjv6bIXibrV/xWdMCycXzyCby2kauAHibPWjqro0lw2pJL2Z0L6WlMgWVKXKJPOZfW8LiuRh4LwdZpAAomofC6H53B4afHIS/zYf8agGZpQw27meweG4Zi+djtvVlimkRky9EcefFGYw8MYAjTw/DH1E/gqeVmhbIxPO3NW8iQ3iCvvd0W2SRc6QXsob2W9yNLMp7cv6uTq5j9fY6br0QBcdxkIrOd+ylnITb35lG9KVZHP7gIRz72AgCnean2anZTvqVP5/A3CsLmhMycAKH4ScHTLWl9KR1luRMCrDSDFpqmrpBHLuRCjKi353F//vkv2Dim1OG+zr7qTkPIuUknP/KZcSuJnS59fBgCM1D6ucMyhG/vor5V5eQnNnAxkwa2XgOnEAgNHngCQoIHwqifTyCjvE2tB5tsWV9e6PPachFGTe/OYW5l+fxwOdPoOdspyn1ulogUkFGNpZDNpZFZimLxQsxLF9cKT3JdDwphICAsV/SF9YuZkTM/vM87n5vtuxe47JIUUgWUEgWkF7IYHFzu2Xey6PtRAvax9vQcTqCthOturdxVkLL6sl6Jr2QwRvPXMTYx0dx8j8cNVyfKwWSjeVw/quXsXprfTPKluy4dwPNCM5D0PsebQkZkjMpRF+cwdxP5nVlJZQKEmJXEohdSZRsEAhaj7Rse5j2k8bmYwrJIlZvraHIYqv2cOvbd0pb1H3OWD2uEEgunkdqPo30fAap+2nc+e5sqW9BzUuVyfs4HHlqSHVQnyzKuPmtO5j8u6jmUTLleikSN9eQuLmG239/F4QQNA+H0HWmHd1nO9F+OqK4OjCXyGP+1SUkJlaRuKk9MUUj8c5f38K9D91D67D+9LG2C4RSimR0A/Eba4hfX0XixioyyzYs4KFAoEvd0O7qrXVc/Po1bMwebEqZDaUU69ENrEc3cPs70xACPDofLIml+2wHmroCkHIS5l9fwuzL84i9HWeZETWQSRt7gNgikORMCotvLiN2NYHEjTXd26AZQSrIuPRH13D/pwsY+fAgust04iilmHhuCpMvRB27CcWshIU3l7Hw5jIAINQfRDaeYzFTOhFFY/eaJQKRRRkrV1exeG4ZC+eWkVl0xxpoSikWz8eweD6G7oc78OCvn9zesy85ncL1v7mFxfMxh63cS+q+9tSpjB1cIxBKKWKXE5j78X3Mv77siJfQwtLFFfz4s69i6IOHkJxOYeVawmmTGBbguEA25tKY/fF9zL08X3PJAOSijOhLs06bwbAQySmBpOJpvPLsG7o2p2Ew7EIUjfXddIeaZJNZJg6G6zHaxKrZWCwGQw2S5JAHYTBqAUEw1s1mAmHUNUwgDIYCHo+xvANMIIy6xuNlAmEwKuJYEysk1d5OTIzGI+A1lntAt7xGpGPo7e3dd3RvKDmtsHiDAFVS1FR+sex5ROlF5RpLtqg7b3+gfPnzyOZ5
362+ B1/bMVO7nYqfTdlIhfMUvxUd51lhy67Tyq1UqJI9Jew1tnpUt0B6+/rwB89+fbtcyp1Q+gRk7z/Gy9tfzMHyrrfpKG8eqVDetsaC8o5Juz6zqvKuz6GyvKtkeXn3fbDzOauVdwpGynvzd+wv64P1QRgMBZhAGAwFmEAYDAWYQBgMBZhAGAwFmEAYDAWYQBgMBZhAGAwFmEAYDAWYQBgMBZhAGAwFmEAYDAWYQBgMBf4/fQGdtWECNsgAAAAASUVORK5CYII="/>
421363
422− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
364+ File created by <a href="https://www.online-convert.com" target="_blank">https://www.online-convert.com</a><br>
365+ More example files: <a href="https://www.online-convert.com/file-type" target="_blank">https://www.online-convert.com/file-type</a><br>
366+ Text of "Example content": <a href="https://en.wikipedia.org/wiki/John_Doe" target="_blank">Wikipedia</a><br>
367+ License: <a href="https://creativecommons.org/licenses/by-sa/3.0/" target="_blank">Attribution-ShareAlike 3.0 Unported</a>
423368
424− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"J"},"finish_reason":null}]}
369+ <img style="height:0.6949cm;width:1.9741cm;" align="right" src="data:image/*;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAYAAABjyArgAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAEZ0FNQQAAsY58+1GTAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAj2SURBVHja7FpLbBvHGf72IaMyInZ9SgKqiHQTdfH6eUossmlTuI7tZS27dtzUpA8NGqMgldpy2kiiKFupo9qh2MIx2iYS4/QaaP0CGqcwV2qAWpRtUnAA6kYGkFDnJIVKAVvc3elhd4e7FPWgHkHj+BeGOzuPf3e/+eaff/4RQwhxMQzzFZ7ImgshhGEAEAC4cfM6WJYFy7LgOA4sy4FjWbCceWVZMAwLlmHAMAzAMJYWEBAQnUAnOnTdSJqmGVddg6bp0HWN1ulEp+0JIdbL0PzjIAf3HwIAMACIBS7HcUZiuVKe44w6ljNBZsAwrB1fExwTWN0AU9PMZM9rTpB1XafA2oF+nEDmATjB5XjwjquRrl25jmQyiVQqhdnCrENRnasOO3fuhO+HPuzd9zI0nQPLqsaAaCwYMOZY2qaPToyZAHMOMYuDe28sDfljGdls1lHu8XggHZCwdceWVYGxXvoZAOSTW/8Az/MUVJ7njcTxGFZG0HeuD1NTU8tS6Ha70f67drS07IKqadA0FapqJk2FqmqU4ZWYXM7iB//5EhfjFzGRnQAAeL1eiKIIAMhkMlAUBQDQ5GnCidAJPPPs01UBsJ76D+4/ZAD8z+FPwXN8CVi+BjU8j0hnN+QhmXYQBAGSJKGhoQEtLS0AgOHhYeTzeciyjJmZGdpW8ks42f5b1G6shaqqKKoqVLUIVVWdJsMCWDdtuQ3orwtfI3QijEKhAEmSEIvF0NDQ4PiIfD6PtrY2yLIMl8uF3r7eZYOw3vopwLf+dQs1FrA1PGr4Gge4giAgHA4jFApBEIQFFSYSCbS1tVGgmzxNeH/gb/hebS1UtYhisUiZXBHkMnvc+WYXJrITCAQCGBwcLE0707TYmZ5IJBAMBtHkacKZcz3LAqCS/snJSUxNThqzsb4e9fX1K9Z/cP8hsADAmTaY5zjwnJO5oiginU4jEoksCi4ABAIB5HI5OsUmshM433fBYctZ6pEwpWT+2QG8N5bGRHYCkiSh/dSpJT8mEAhAkiRMZCdwbyy9LJtbrv/vly/D+/wLOHr4CI4ePgLv8y/g05s3V6TfEhYAWMst4zgMKyMOcJPJ5Lxps5gIgoBkMklBlodkDA+PgOP4yiCzltsHB8jyx8Y7xGIxeJqby/3LigtiLBZz9F1MyvWP3r6N7q4I6p95Fl6vDwdaWwEAv/7Va/hTf3/V+h0AGww2WNx3ro8CNTg4uCRrFwPZ6tv3hz7TlzbBZUyfmjU9DAYlkM3pn81m4fV65w1uMBikzA8Gg466hoYGeL3eeZ5AJbHrLxQKyKbvAwD2Sz/D+4kBvHP+j3irq9MwDwODVet3Mtj8+GtXrlNvIRwOUxauRARBoCM+NTWFa1ev0w2LAfLCJsKSSs9PJBIV84v1WUjsbXvfNYj11w8/oGU/fuklAEChUMCXDx5UrZ8CbLEpmUxScEKhEG2kKAr8fj98Ph98Ph+i0eiCdf3mdLLslsXi5K2kjb0l08AwlU3ENykulwvxeBwbXXW4dOlSxTYPHz5akW5jo8EwYBkGqVTKcLEkiQKjKAp8Pp+jk6IoUBQFoVAIfr9/Xt34+DhdlSVJQiKRQCqVMnaANmCBErglr7ykK5PJVFzMLOYGAoF59ZX6LCT2tjU8j/aTJ7GxtpaWjd6+TfPPNTxXtX4bg40PtXZomzdvpg3a2tqo/cnlcnTRO3bsGGWyKIrI5XIYGhpy+MgAaH62MFsyB/Rq4TrfRHg8HiiKgnw+7yi3u2v2vOWzKooCj8ez5IeX65+cnER3VwSv/PwwenvOoLfnDLo6OgAAp06frlq/A2D74lJuZ6wRCwQC1MjncjkEAgFaZ20+JEmidfaFp+R+0Z8lX0w6IDkGeDlitbX6VqM/ePw4gsePGwM3MIDBgQE8evgIe/a+jCNHX6lav8NE/D/K1h1b0ORpgizLCAaD89haCVxZltHkaVpW3KCS/re6OvGT3bvxxRcGq5ubm6mLWK1+J4OJc1dktzMWmxOJBGZmZpDJZNDY2IhoNFrydc1tsr3OPm1L/iv9WdbLnf59O1wuFxKJBPx+P9Vl94Pz+Tz8fj/6+/vhcrlwInRi2R9fSf/2HdtxoLUVB1pb4WluXpV+ymDrhetcdZgtzGJ8fJw2iEQi9OGbNm1yAGfVZTKZeXWWWLrqXHUgxLYdBoE1pubdvJd7yvUU4hf78c7bfZBlGbIsQxRFiKIIQRCgKAolw0qCMeutn67bo3dHsWHDBkS7opCHZAiCgOnpaYdnEI/HaYzB6/UiEolQ9sbjcdrWXgcAjY2NyOfzePFHL+JC7Dwezc2hWJxDUS2iWFShWXEJXYOu6TQIX75T+zaGK2mw5/adf6OmZgM+G/kMod+E6LYwHA6v6qWtAAkAnH37LH66ZzfminOYKxahFosoqmUAVwj4fNsD7iwAeqTj9bXA7XYDAKLR6DwXqRqZmZmhq67b7TYD8VZoUodu2mLLXDyuwgKATnRomnGOdqa3hwLk9/sdMd5qwPX5fLRv+5vtZoBdK4FsC1HSRZY8XkdGdHEHQDoiHWTsXopk7qfJq7981VrqiSiKJJ1Ok+VKLpcjoijS/pJfIpn7aTJ2L0V6ento+XcolW7Cb4TInfQYyXyeIZJfouWCIJDu7m4yPT29ILDT09Oku7ubCIJA++3YuYOMf54hdzJjpCPS8V0ElzDlTmlnpAP7/RJ4nseFvgv46PJHKz4yip7phqqqGB1N4fXXXl/5FLOZDftphn33WX6/Vs+w36/KRNhTZ6TDYPL9NBlIfEDcbveyR8ztdpP4n+Mkcz9N7mTGyHt/eW/VLCCELJq3l61W/1LPXDWDLQm/EcLRXxylpxBKchhXr1xd9Nh+n7QPXm8LPWu7cuUqzkbPrn6RqMCutWJu+TMqnfethsXMYvvWrdu2oDPShfofuG2nEfZwIxx+q/WPJ1OTk3j3fAwjwyNrswrbQFxr07DQsxZ75poBbMmull3Ys3cPtm3fhu+7XM4YrulafVUo4O6du7hx7caaAftNMXgpG7/uAD+RlQtDCNnIMMx/n0CxDhsMQpj/DQDwRbusfJXB0QAAAABJRU5ErkJggg=="/></p>
425370
426− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
371+ <p>Feel free to use and share the file according to license above.</p>
427372
428− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
373+ </body>
374+ </html>
375+ headers:
376+ Content-Type:
377+ - text/html; charset=UTF-8
378+ status: 200 OK
379+ code: 200
380+ duration: 165.532958ms
381+- id: 3
382+ request:
383+ proto: HTTP/1.1
384+ proto_major: 1
385+ proto_minor: 1
386+ content_length: 34286
387+ host: ""
388+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/fetch_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"fetch the content from https://example-files.online-convert.com/website/html/example.html and tell me if it contains the word 'John Doe'\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_74e206507d5046e8a4b0aa5e\",\"function\":{\"arguments\":\"{\\\"format\\\": \\\"text\\\", \\\"url\\\": \\\"https://example-files.online-convert.com/website/html/example.html\\\"}\",\"name\":\"fetch\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to fetch content from a URL and check if it contains the word 'John Doe'. Let me use the fetch tool.\"},{\"content\":\"HTML test file Purpose: Provide example of this file type Document file type: HTML Version: 1.0 Remark:\",\"tool_call_id\":\"call_74e206507d5046e8a4b0aa5e\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
389+ headers:
390+ Accept:
391+ - application/json
392+ Content-Type:
393+ - application/json
394+ User-Agent:
395+ - Charm-Crush/devel (https://charm.land/crush)
396+ url: https://hyper.charm.land/v1/chat/completions
397+ method: POST
398+ response:
399+ proto: HTTP/2.0
400+ proto_major: 2
401+ proto_minor: 0
402+ content_length: -1
403+ uncompressed: true
404+ body: |+
405+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
429406
430− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
407+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
431408
432− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
409+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fetched"},"finish_reason":null}]}
433410
434− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
411+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content doesn"},"finish_reason":null}]}
435412
436− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
413+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'t seem"},"finish_reason":null}]}
437414
438− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
415+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to contain"},"finish_reason":null}]}
439416
440− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
417+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
441418
442− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
419+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"John Doe"},"finish_reason":null}]}
443420
444− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"D"},"finish_reason":null}]}
421+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"\". Let me check"},"finish_reason":null}]}
445422
446− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
423+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
447424
448− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
425+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" carefully -"},"finish_reason":null}]}
449426
450− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
427+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the output"},"finish_reason":null}]}
451428
452− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
429+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" seems truncated"},"finish_reason":null}]}
453430
454− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
431+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":". Let"},"finish_reason":null}]}
455432
456− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
433+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me try"},"finish_reason":null}]}
457434
458− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
435+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fetching"},"finish_reason":null}]}
459436
460− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
437+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
461438
462− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
439+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" html"},"finish_reason":null}]}
463440
464− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
441+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" format"},"finish_reason":null}]}
465442
466− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
443+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
467444
468− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
445+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" get the"},"finish_reason":null}]}
469446
470− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
447+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" full content."},"finish_reason":null}]}
471448
472− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
449+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_3be36893074d462db576bd59","type":"function","index":0,"function":{"name":"fetch","arguments":""}}]},"finish_reason":null}]}
473450
474− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
451+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
475452
476− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
453+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
477454
478− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
455+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"format\": "}}]},"finish_reason":null}]}
479456
480− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
457+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"html\", "}}]},"finish_reason":null}]}
481458
482− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
459+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"url\": "}}]},"finish_reason":null}]}
483460
484− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Check"},"finish_reason":null}]}
461+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"https://example"}}]},"finish_reason":null}]}
485462
486− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" if"},"finish_reason":null}]}
463+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
487464
488− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
465+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online-"}}]},"finish_reason":null}]}
489466
490− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".html"},"finish_reason":null}]}
467+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert.com/"}}]},"finish_reason":null}]}
491468
492− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" contains"},"finish_reason":null}]}
469+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"website/html"}}]},"finish_reason":null}]}
493470
494− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" '"},"finish_reason":null}]}
471+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
495472
496− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"John"},"finish_reason":null}]}
473+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".html"}}]},"finish_reason":null}]}
497474
498− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
475+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
499476
500− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"'"},"finish_reason":null}]}
477+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
501478
502− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
479+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
503480
504− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":173,"completion_tokens":183,"total_tokens":420,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.00013191,"hypercredits":0.0026382},"remaining":{"hypercredits":0}}}
481+ data: {"id":"chatcmpl-21dd60a7cd71549e9e6231dc","object":"chat.completion.chunk","created":1778597345,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":778,"completion_tokens":65,"total_tokens":7883,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":36}}}
505482
506483 data: [DONE]
507484
@@ -510,8 +487,8 @@ interactions:
510487 - text/event-stream
511488 status: 200 OK
512489 code: 200
513− duration: 1.005238292s
514−- id: 2
490+ duration: 3.695552042s
491+- id: 4
515492 request:
516493 proto: HTTP/1.1
517494 proto_major: 1
@@ -581,15 +558,15 @@ interactions:
581558 - text/html; charset=UTF-8
582559 status: 200 OK
583560 code: 200
584− duration: 147.645375ms
585−- id: 3
561+ duration: 154.72225ms
562+- id: 5
586563 request:
587564 proto: HTTP/1.1
588565 proto_major: 1
589566 proto_minor: 1
590− content_length: 36231
567+ content_length: 34992
591568 host: ""
592− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/fetch_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"fetch the content from https://example-files.online-convert.com/website/html/example.html and tell me if it contains the word 'John Doe'\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_60557666b1c79950\",\"function\":{\"arguments\":\"{\\\"format\\\": \\\"text\\\", \\\"url\\\": \\\"https://example-files.online-convert.com/website/html/example.html\\\"}\",\"name\":\"fetch\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to fetch content from a URL and check if it contains the word 'John Doe'.\"},{\"content\":\"HTML test file Purpose: Provide example of this file type Document file type: HTML Version: 1.0 Remark:\",\"tool_call_id\":\"call_60557666b1c79950\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
569+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/fetch_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"fetch the content from https://example-files.online-convert.com/website/html/example.html and tell me if it contains the word 'John Doe'\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_74e206507d5046e8a4b0aa5e\",\"function\":{\"arguments\":\"{\\\"format\\\": \\\"text\\\", \\\"url\\\": \\\"https://example-files.online-convert.com/website/html/example.html\\\"}\",\"name\":\"fetch\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to fetch content from a URL and check if it contains the word 'John Doe'. Let me use the fetch tool.\"},{\"content\":\"HTML test file Purpose: Provide example of this file type Document file type: HTML Version: 1.0 Remark:\",\"tool_call_id\":\"call_74e206507d5046e8a4b0aa5e\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_3be36893074d462db576bd59\",\"function\":{\"arguments\":\"{\\\"format\\\": \\\"html\\\", \\\"url\\\": \\\"https://example-files.online-convert.com/website/html/example.html\\\"}\",\"name\":\"fetch\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The fetched content doesn't seem to contain \\\"John Doe\\\". Let me check more carefully - the output seems truncated. Let me try fetching as html format to get the full content.\"},{\"content\":\"<html>\\n<body>\\n\\n\\n\\t\\t<h1>HTML test file</h1>\\n\\n<p>Purpose: Provide example of this file type<br/>\\nDocument file type: HTML<br/>\\nVersion: 1.0<br/>\\nRemark:</p>\\n\\n<p></p>\\n</body>\\n</html>\",\"tool_call_id\":\"call_3be36893074d462db576bd59\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
593570 headers:
594571 Accept:
595572 - application/json
@@ -606,39 +583,53 @@ interactions:
606583 content_length: -1
607584 uncompressed: true
608585 body: |+
609− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
586+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
587+
588+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"No"},"finish_reason":null}]}
589+
590+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":", the"},"finish_reason":null}]}
591+
592+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" page does"},"finish_reason":null}]}
593+
594+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" not contain"},"finish_reason":null}]}
595+
596+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the word"},"finish_reason":null}]}
597+
598+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" \"John"},"finish_reason":null}]}
599+
600+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Doe\"."},"finish_reason":null}]}
610601
611− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"No"},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Its content"},"finish_reason":null}]}
612603
613− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
604+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" is"},"finish_reason":null}]}
614605
615− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
606+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" just a"},"finish_reason":null}]}
616607
617− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" fetched"},"finish_reason":null}]}
608+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" basic"},"finish_reason":null}]}
618609
619− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" HTML test"},"finish_reason":null}]}
620611
621− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" does"},"finish_reason":null}]}
612+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
622613
623− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" not"},"finish_reason":null}]}
614+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with a"},"finish_reason":null}]}
624615
625− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" contain"},"finish_reason":null}]}
616+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" heading and"},"finish_reason":null}]}
626617
627− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
618+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" some"},"finish_reason":null}]}
628619
629− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" word"},"finish_reason":null}]}
620+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" metadata ("},"finish_reason":null}]}
630621
631− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" \""},"finish_reason":null}]}
622+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"purpose"},"finish_reason":null}]}
632623
633− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"John"},"finish_reason":null}]}
624+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":", file"},"finish_reason":null}]}
634625
635− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" type, version"},"finish_reason":null}]}
636627
637− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"\"."},"finish_reason":null}]}
628+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":")."},"finish_reason":null}]}
638629
639− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
630+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
640631
641− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":753,"completion_tokens":16,"total_tokens":8248,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0011246000000000001,"hypercredits":0.022492},"remaining":{"hypercredits":0}}}
632+ data: {"id":"chatcmpl-6756b8e9c05e7811b40c247a","object":"chat.completion.chunk","created":1778597353,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":868,"completion_tokens":38,"total_tokens":7946,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":37}}}
642633
643634 data: [DONE]
644635
@@ -647,4 +638,4 @@ interactions:
647638 - text/event-stream
648639 status: 200 OK
649640 code: 200
650− duration: 977.248916ms
641+ duration: 6.389163583s
internal/agent/testdata/TestCoderAgent/glm-5.1/glob_tool.yaml+169−595
@@ -2,120 +2,6 @@
22version: 2
33interactions:
44- id: 0
5− request:
6− proto: HTTP/1.1
7− proto_major: 1
8− proto_minor: 1
9− content_length: 35633
10− host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files in the current directory\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12− headers:
13− Accept:
14− - application/json
15− Content-Type:
16− - application/json
17− User-Agent:
18− - Charm-Crush/devel (https://charm.land/crush)
19− url: https://hyper.charm.land/v1/chat/completions
20− method: POST
21− response:
22− proto: HTTP/2.0
23− proto_major: 2
24− proto_minor: 0
25− content_length: -1
26− uncompressed: true
27− body: |+
28− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
30− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_ad74b69d4b477328","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
31−
32− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\": \""}}]},"finish_reason":null}]}
33−
34− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"**"}}]},"finish_reason":null}]}
35−
36− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/*."}}]},"finish_reason":null}]}
37−
38− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
39−
40− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
41−
42− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
43−
44− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
45−
46− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":679,"completion_tokens":13,"total_tokens":8171,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0010077999999999999,"hypercredits":0.020155999999999997},"remaining":{"hypercredits":0}}}
47−
48− data: [DONE]
49−
50− headers:
51− Content-Type:
52− - text/event-stream
53− status: 200 OK
54− code: 200
55− duration: 2.191829958s
56−- id: 1
57− request:
58− proto: HTTP/1.1
59− proto_major: 1
60− proto_minor: 1
61− content_length: 35910
62− host: ""
63− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files in the current directory\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_ad74b69d4b477328\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool/main.go\",\"tool_call_id\":\"call_ad74b69d4b477328\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
64− headers:
65− Accept:
66− - application/json
67− Content-Type:
68− - application/json
69− User-Agent:
70− - Charm-Crush/devel (https://charm.land/crush)
71− url: https://hyper.charm.land/v1/chat/completions
72− method: POST
73− response:
74− proto: HTTP/2.0
75− proto_major: 2
76− proto_minor: 0
77− content_length: -1
78− uncompressed: true
79− body: |+
80− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
81−
82− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
83−
84− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
85−
86− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
87−
88− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
89−
90− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
91−
92− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
93−
94− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
95−
96− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
97−
98− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
99−
100− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
101−
102− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
103−
104− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
105−
106− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
107−
108− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":36,"completion_tokens":14,"total_tokens":8207,"prompt_tokens_details":{"cached_tokens":8157},"cost":{"usd":0.00011200000000000001,"hypercredits":0.0022400000000000002},"remaining":{"hypercredits":0}}}
109−
110− data: [DONE]
111−
112− headers:
113− Content-Type:
114− - text/event-stream
115− status: 200 OK
116− code: 200
117− duration: 1.449032542s
118−- id: 2
1195 request:
1206 proto: HTTP/1.1
1217 proto_major: 1
@@ -139,593 +25,281 @@ interactions:
13925 content_length: -1
14026 uncompressed: true
14127 body: |+
142− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
143−
144− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
145−
146− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
147−
148− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
149−
150− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
151−
152− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
153−
154− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
155−
156− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
157−
158− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
159−
160− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
161−
162− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
163−
164− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
165−
166− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
167−
168− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
169−
170− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
171−
172− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
173−
174− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
185−
186− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
187−
188− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
189−
190− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
191−
192− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
193−
194− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
195−
196− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
197−
198− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
199−
200− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
201−
202− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
203−
204− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
205−
206− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
207−
208− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
209−
210− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
211−
212− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
213−
214− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
215−
216− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
217−
218− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
219−
220− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
221−
222− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
223−
224− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
225−
226− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
227−
228− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
229−
230− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Finding"},"finish_reason":null}]}
231−
232− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
233−
234− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
235−
236− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Files"},"finish_reason":null}]}
237−
238− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
239−
240− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Glob"},"finish_reason":null}]}
241−
242− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
243−
244− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Current"},"finish_reason":null}]}
245−
246− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Directory"},"finish_reason":null}]}
247−
248− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
249−
250− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
251−
252− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
253−
254− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
255−
256− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
257−
258− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
259−
260− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
261−
262− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
263−
264− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
265−
266− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
267−
268− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Finding"},"finish_reason":null}]}
269−
270− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
271−
272− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
273−
274− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Files"},"finish_reason":null}]}
275−
276− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
277−
278− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Glob"},"finish_reason":null}]}
279−
280− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
281−
282− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Current"},"finish_reason":null}]}
283−
284− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Directory"},"finish_reason":null}]}
285−
286− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
287−
288− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
289−
290− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
291−
292− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
293−
294− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
295−
296− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Finding"},"finish_reason":null}]}
297−
298− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
299−
300− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
301−
302− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
30329
304− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
30531
306− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
30733
308− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
30935
310− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
31137
312− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
31339
314− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
31541
316− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
31743
318− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
31945
320− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
32147
322− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
32349
324− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
32551
326− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
32753
328− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
32955
330− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
33157
332− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
33359
334− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
33561
336− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
33763
338− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
33965
340− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
34167
342− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
34369
344− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
34571
346− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
34773
348− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Files"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
34975
350− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
35177
352− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" must"},"finish_reason":null}]}
35379
354− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
35581
356− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
35783
358− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
35985
360− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
36187
362− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
36389
364− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
36591
366− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
36793
368− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
36995
370− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
37197
372− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
37399
374− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
375101
376− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
377103
378− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
379105
380− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
381107
382− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
383109
384− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
385111
386− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summarize"},"finish_reason":null}]}
387113
388− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Glob"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
389115
390− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
391117
392− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
393119
394− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
395121
396− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Finding"},"finish_reason":null}]}
397123
398− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
399125
400− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
401127
402− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Files"},"finish_reason":null}]}
403129
404− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
405131
406− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Glob"},"finish_reason":null}]}
407133
408− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
409135
410− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Current"},"finish_reason":null}]}
411137
412− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Directory"},"finish_reason":null}]}
413139
414− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
415141
416− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
417143
418− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
419145
420− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
421147
422− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
423149
424− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
425151
426− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
427153
428− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Current"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
429155
430− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Finding"},"finish_reason":null}]}
431157
432− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
433159
434− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
435161
436− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Files"},"finish_reason":null}]}
437163
438− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
439165
440− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Glob"},"finish_reason":null}]}
441167
442− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
443169
444− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Current"},"finish_reason":null}]}
445171
446− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Directory"},"finish_reason":null}]}
447173
448− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Directory"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
449175
450− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-0c77c926525c023d5e9f33e3","object":"chat.completion.chunk","created":1778597355,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":163,"completion_tokens":82,"total_tokens":293,"prompt_tokens_details":{"cached_tokens":48}}}
451177
452− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
453−
454− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
455−
456− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
457−
458− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
459−
460− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
461−
462− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
463−
464− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
465−
466− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
467−
468− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
469−
470− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
471−
472− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
473−
474− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Or"},"finish_reason":null}]}
475−
476− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
477−
478− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Use"},"finish_reason":null}]}
479−
480− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
481−
482− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
483−
484− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
485−
486− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
487−
488− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
489−
490− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
491−
492− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
493−
494− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
495−
496− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" dir"},"finish_reason":null}]}
497−
498− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
499−
500− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
501−
502− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
503−
504− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
505−
506− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Use"},"finish_reason":null}]}
507−
508− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
509−
510− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
511−
512− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")+"},"finish_reason":null}]}
513−
514− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
515−
516− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
517−
518− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
519−
520− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
521−
522− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
523−
524− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
525−
526− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
527−
528− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
529−
530− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
531−
532− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
533−
534− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
535−
536− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
537−
538− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
539−
540− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
541−
542− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
543−
544− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
545−
546− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
547−
548− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
549−
550− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
551−
552− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
553−
554− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
555−
556− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
557−
558− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
559−
560− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
561−
562− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
563−
564− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
565−
566− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
567−
568− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
569−
570− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
571−
572− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
573−
574− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
575−
576− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
577−
578− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
579−
580− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
581−
582− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
583−
584− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
585−
586− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
587−
588− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
589−
590− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
591−
592− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
593−
594− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
595−
596− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
597−
598− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
599−
600− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
601−
602− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
603−
604− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
605−
606− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
607−
608− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
609−
610− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
611−
612− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
613−
614− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
615−
616− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
617−
618− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
619−
620− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
621−
622− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
623−
624− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
625−
626− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
627−
628− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
629−
630− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
631−
632− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
633−
634− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
635−
636− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
637−
638− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
639−
640− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
641−
642− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
643−
644− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
645−
646− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
647−
648− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
649−
650− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
651−
652− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
653−
654− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
655−
656− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
657−
658− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
659−
660− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
661−
662− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
663−
664− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" dir"},"finish_reason":null}]}
178+ data: [DONE]
665179
666− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
180+ headers:
181+ Content-Type:
182+ - text/event-stream
183+ status: 200 OK
184+ code: 200
185+ duration: 539.286125ms
186+- id: 1
187+ request:
188+ proto: HTTP/1.1
189+ proto_major: 1
190+ proto_minor: 1
191+ content_length: 33645
192+ host: ""
193+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files in the current directory\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
194+ headers:
195+ Accept:
196+ - application/json
197+ Content-Type:
198+ - application/json
199+ User-Agent:
200+ - Charm-Crush/devel (https://charm.land/crush)
201+ url: https://hyper.charm.land/v1/chat/completions
202+ method: POST
203+ response:
204+ proto: HTTP/2.0
205+ proto_major: 2
206+ proto_minor: 0
207+ content_length: -1
208+ uncompressed: true
209+ body: |+
210+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
667211
668− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_678a92c4217946c3a5ebf102","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
669213
670− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
671215
672− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
673217
674− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"path\": "}}]},"finish_reason":null}]}
675219
676− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp/c"}}]},"finish_reason":null}]}
677221
678− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush-test"}}]},"finish_reason":null}]}
679223
680− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
681225
682− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
683227
684− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Both"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
685229
686− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/glm"}}]},"finish_reason":null}]}
687231
688− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-5"}}]},"finish_reason":null}]}
689233
690− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".1"}}]},"finish_reason":null}]}
691235
692− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/glob_tool"}}]},"finish_reason":null}]}
693237
694− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", "}}]},"finish_reason":null}]}
695239
696− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
697241
698− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"*."}}]},"finish_reason":null}]}
699243
700− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go\""}}]},"finish_reason":null}]}
701245
702− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
703247
704− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
705249
706− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Use"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-1beb7bb732a1dc9c9224afe9","object":"chat.completion.chunk","created":1778597357,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7744,"completion_tokens":33,"total_tokens":7777,"completion_tokens_details":{"reasoning_tokens":32}}}
707251
708− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
252+ data: [DONE]
709253
710− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
254+ headers:
255+ Content-Type:
256+ - text/event-stream
257+ status: 200 OK
258+ code: 200
259+ duration: 2.416067083s
260+- id: 2
261+ request:
262+ proto: HTTP/1.1
263+ proto_major: 1
264+ proto_minor: 1
265+ content_length: 33999
266+ host: ""
267+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files in the current directory\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_678a92c4217946c3a5ebf102\",\"function\":{\"arguments\":\"{\\\"path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\\", \\\"pattern\\\": \\\"*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool/main.go\",\"tool_call_id\":\"call_678a92c4217946c3a5ebf102\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
268+ headers:
269+ Accept:
270+ - application/json
271+ Content-Type:
272+ - application/json
273+ User-Agent:
274+ - Charm-Crush/devel (https://charm.land/crush)
275+ url: https://hyper.charm.land/v1/chat/completions
276+ method: POST
277+ response:
278+ proto: HTTP/2.0
279+ proto_major: 2
280+ proto_minor: 0
281+ content_length: -1
282+ uncompressed: true
283+ body: |+
284+ data: {"id":"chatcmpl-05f41bca68c4196b751cb426","object":"chat.completion.chunk","created":1778597364,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
711285
712− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" locate"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-05f41bca68c4196b751cb426","object":"chat.completion.chunk","created":1778597364,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
713287
714− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-05f41bca68c4196b751cb426","object":"chat.completion.chunk","created":1778597364,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
715289
716− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-05f41bca68c4196b751cb426","object":"chat.completion.chunk","created":1778597364,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1 `."},"finish_reason":null}]}
717291
718− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-05f41bca68c4196b751cb426","object":"chat.completion.chunk","created":1778597364,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
719293
720− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-05f41bca68c4196b751cb426","object":"chat.completion.chunk","created":1778597364,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` file"},"finish_reason":null}]}
721295
722− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-05f41bca68c4196b751cb426","object":"chat.completion.chunk","created":1778597364,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":": `main"},"finish_reason":null}]}
723297
724− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-05f41bca68c4196b751cb426","object":"chat.completion.chunk","created":1778597364,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go`"},"finish_reason":null}]}
725299
726− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
300+ data: {"id":"chatcmpl-05f41bca68c4196b751cb426","object":"chat.completion.chunk","created":1778597364,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
727301
728− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":157,"completion_tokens":298,"total_tokens":519,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.00019385200000000003,"hypercredits":0.0038770400000000004},"remaining":{"hypercredits":0}}}
302+ data: {"id":"chatcmpl-05f41bca68c4196b751cb426","object":"chat.completion.chunk","created":1778597364,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":759,"completion_tokens":14,"total_tokens":7813,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":13}}}
729303
730304 data: [DONE]
731305
@@ -734,4 +308,4 @@ interactions:
734308 - text/event-stream
735309 status: 200 OK
736310 code: 200
737− duration: 648.718041ms
311+ duration: 6.472530833s
internal/agent/testdata/TestCoderAgent/glm-5.1/grep_tool.yaml+182−288
@@ -2,62 +2,6 @@
22version: 2
33interactions:
44- id: 0
5− request:
6− proto: HTTP/1.1
7− proto_major: 1
8− proto_minor: 1
9− content_length: 35631
10− host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use grep to search for the word 'package' in go files\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12− headers:
13− Accept:
14− - application/json
15− Content-Type:
16− - application/json
17− User-Agent:
18− - Charm-Crush/devel (https://charm.land/crush)
19− url: https://hyper.charm.land/v1/chat/completions
20− method: POST
21− response:
22− proto: HTTP/2.0
23− proto_major: 2
24− proto_minor: 0
25− content_length: -1
26− uncompressed: true
27− body: |+
28− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
30− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_a57bfe141bf85225","type":"function","index":0,"function":{"name":"grep","arguments":""}}]},"finish_reason":null}]}
31−
32− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"include\": \""}}]},"finish_reason":null}]}
33−
34− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"*."}}]},"finish_reason":null}]}
35−
36− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
37−
38− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
39−
40− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"pattern\": \""}}]},"finish_reason":null}]}
41−
42− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"package"}}]},"finish_reason":null}]}
43−
44− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
45−
46− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
47−
48− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
49−
50− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":680,"completion_tokens":18,"total_tokens":8177,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0010312,"hypercredits":0.020623999999999997},"remaining":{"hypercredits":0}}}
51−
52− data: [DONE]
53−
54− headers:
55− Content-Type:
56− - text/event-stream
57− status: 200 OK
58− code: 200
59− duration: 1.505379s
60−- id: 1
615 request:
626 proto: HTTP/1.1
637 proto_major: 1
@@ -81,345 +25,307 @@ interactions:
8125 content_length: -1
8226 uncompressed: true
8327 body: |+
84− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
85−
86− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
87−
88− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
89−
90− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
91−
92− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
93−
94− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
95−
96− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
97−
98− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
99−
100− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" They"},"finish_reason":null}]}
101−
102− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" gave"},"finish_reason":null}]}
103−
104− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
105−
106− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" phrase"},"finish_reason":null}]}
107−
108− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
109−
110− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
111−
112− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
11329
114− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
11531
116− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
11733
118− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
11935
120− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
12137
122− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
12339
124− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
12541
126− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
12743
128− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
12945
130− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
13147
132− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
13349
134− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
13551
136− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
13753
138− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
13955
140− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
14157
142− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
14359
144− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
14561
146− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
14763
148− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
14965
150− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
15167
152− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
15369
154− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
15571
156− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
15773
158− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
15975
160− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
16177
162− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
16379
164− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
16581
166− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
16783
168− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
16985
170− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
17187
172− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
17389
174− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
17591
176− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
17793
178− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
17995
180− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
18197
182− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
18399
184− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
185101
186− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"G"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
187103
188− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"rep"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
189105
190− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
191107
192− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
193109
194− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
195111
196− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
197113
198− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
199115
200− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
201117
202− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
203119
204− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
205121
206− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
207123
208− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
209125
210− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" limit"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
211127
212− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
213129
214− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" something"},"finish_reason":null}]}
215131
216− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
217133
218− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
219135
220− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Using"},"finish_reason":null}]}
221137
222− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
223139
224− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
225141
226− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
227143
228− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"G"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" package"},"finish_reason":null}]}
229145
230− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"rep"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
231147
232− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
233149
234− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
235151
236− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
237153
238− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
239155
240− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
241157
242− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
243159
244− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
245161
246− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
247163
248− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
249165
250− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
251167
252− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
253169
254− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
255171
256− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" G"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
257173
258− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
259175
260− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
261177
262− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
263179
264− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
265181
266− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" package"},"finish_reason":null}]}
267183
268− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
269185
270− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
271187
272− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
273189
274− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
275191
276− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
277193
278− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
279195
280− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
281197
282− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
283199
284− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
285201
286− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Or"},"finish_reason":null}]}
287203
288− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
289205
290− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"grep"},"finish_reason":null}]}
291207
292− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
293209
294− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
295211
296− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
297213
298− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
299215
300− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
301217
302− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
303219
304− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" source"},"finish_reason":null}]}
305221
306− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
307223
308− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
309225
310− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
311227
312− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" k"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
313229
314− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
315231
316− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
317233
318− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Provide"},"finish_reason":null}]}
319235
320− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
321237
322− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
323239
324− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
325241
326− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"grep"},"finish_reason":null}]}
327243
328− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
329245
330− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" package"},"finish_reason":null}]}
331247
332− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
333249
334− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
335251
336− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" source"},"finish_reason":null}]}
337253
338− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
339255
340− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
341257
342− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-20d39cc88cdd5a5f8d186ad0","object":"chat.completion.chunk","created":1778597364,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":24,"completion_tokens":123,"total_tokens":339,"prompt_tokens_details":{"cached_tokens":192}}}
343259
344− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
345−
346− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
347−
348− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" G"},"finish_reason":null}]}
349−
350− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
351−
352− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
353−
354− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
355−
356− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
357−
358− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
359−
360− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
361−
362− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
363−
364− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
365−
366− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
367−
368− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
369−
370− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
371−
372− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
373−
374− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
375−
376− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
377−
378− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
379−
380− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
381−
382− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
383−
384− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
260+ data: [DONE]
385261
386− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
262+ headers:
263+ Content-Type:
264+ - text/event-stream
265+ status: 200 OK
266+ code: 200
267+ duration: 552.038958ms
268+- id: 1
269+ request:
270+ proto: HTTP/1.1
271+ proto_major: 1
272+ proto_minor: 1
273+ content_length: 33643
274+ host: ""
275+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use grep to search for the word 'package' in go files\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
276+ headers:
277+ Accept:
278+ - application/json
279+ Content-Type:
280+ - application/json
281+ User-Agent:
282+ - Charm-Crush/devel (https://charm.land/crush)
283+ url: https://hyper.charm.land/v1/chat/completions
284+ method: POST
285+ response:
286+ proto: HTTP/2.0
287+ proto_major: 2
288+ proto_minor: 0
289+ content_length: -1
290+ uncompressed: true
291+ body: |+
292+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
387293
388− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
389295
390− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
391297
392− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants to search for"},"finish_reason":null}]}
393299
394− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the word"},"finish_reason":null}]}
395301
396− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" 'package"},"finish_reason":null}]}
397303
398− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"' in Go"},"finish_reason":null}]}
399305
400− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Provide"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" files."},"finish_reason":null}]}
401307
402− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_596727092909456da0b8340d","type":"function","index":0,"function":{"name":"grep","arguments":""}}]},"finish_reason":null}]}
403309
404− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
405311
406− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
407313
408− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"rep"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"include\": \"*."}}]},"finish_reason":null}]}
409315
410− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go\""}}]},"finish_reason":null}]}
411317
412− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" '"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", "}}]},"finish_reason":null}]}
413319
414− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
415321
416− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"'"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"package\""}}]},"finish_reason":null}]}
417323
418− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
419325
420− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
326+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
421327
422− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":201,"completion_tokens":179,"total_tokens":380,"completion_tokens_details":{"reasoning_tokens":129},"cost":{"usd":0.00020686400000000002,"hypercredits":0.00413728},"remaining":{"hypercredits":0}}}
328+ data: {"id":"chatcmpl-8c7c12d18b49b0b51650ea6a","object":"chat.completion.chunk","created":1778597368,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7745,"completion_tokens":33,"total_tokens":7778,"completion_tokens_details":{"reasoning_tokens":15}}}
423329
424330 data: [DONE]
425331
@@ -428,15 +334,15 @@ interactions:
428334 - text/event-stream
429335 status: 200 OK
430336 code: 200
431− duration: 541.974834ms
337+ duration: 4.030870625s
432338- id: 2
433339 request:
434340 proto: HTTP/1.1
435341 proto_major: 1
436342 proto_minor: 1
437− content_length: 35983
343+ content_length: 34094
438344 host: ""
439− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use grep to search for the word 'package' in go files\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_a57bfe141bf85225\",\"function\":{\"arguments\":\"{\\\"include\\\": \\\"*.go\\\", \\\"pattern\\\": \\\"package\\\"}\",\"name\":\"grep\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"Found 1 matches\\n/tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool/main.go:\\n Line 1, Char 1: package main\\n\",\"tool_call_id\":\"call_a57bfe141bf85225\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
345+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use grep to search for the word 'package' in go files\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_596727092909456da0b8340d\",\"function\":{\"arguments\":\"{\\\"include\\\": \\\"*.go\\\", \\\"pattern\\\": \\\"package\\\"}\",\"name\":\"grep\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to search for the word 'package' in Go files.\"},{\"content\":\"Found 1 matches\\n/tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool/main.go:\\n Line 1, Char 1: package main\\n\",\"tool_call_id\":\"call_596727092909456da0b8340d\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
440346 headers:
441347 Accept:
442348 - application/json
@@ -453,41 +359,29 @@ interactions:
453359 content_length: -1
454360 uncompressed: true
455361 body: |+
456− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
457−
458− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
459−
460− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" match"},"finish_reason":null}]}
461−
462− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" found"},"finish_reason":null}]}
463−
464− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
465−
466− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
467−
468− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
469363
470− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
471365
472− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
473367
474− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1 match"},"finish_reason":null}]}
475369
476− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":": `"},"finish_reason":null}]}
477371
478− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main.go"},"finish_reason":null}]}
479373
480− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":1"},"finish_reason":null}]}
481375
482− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` — `"},"finish_reason":null}]}
483377
484− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"package main"},"finish_reason":null}]}
485379
486− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
487381
488− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
382+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
489383
490− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":59,"completion_tokens":17,"total_tokens":8234,"prompt_tokens_details":{"cached_tokens":8158},"cost":{"usd":0.0001574,"hypercredits":0.0031479999999999998},"remaining":{"hypercredits":0}}}
384+ data: {"id":"chatcmpl-150a68d7d0d9db901807554d","object":"chat.completion.chunk","created":1778597372,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":763,"completion_tokens":18,"total_tokens":7821,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":17}}}
491385
492386 data: [DONE]
493387
@@ -496,4 +390,4 @@ interactions:
496390 - text/event-stream
497391 status: 200 OK
498392 code: 200
499− duration: 1.500804s
393+ duration: 3.065027833s
internal/agent/testdata/TestCoderAgent/glm-5.1/ls_tool.yaml+165−291
@@ -2,48 +2,6 @@
22version: 2
33interactions:
44- id: 0
5− request:
6− proto: HTTP/1.1
7− proto_major: 1
8− proto_minor: 1
9− content_length: 35625
10− host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use ls to list the files in the current directory\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12− headers:
13− Accept:
14− - application/json
15− Content-Type:
16− - application/json
17− User-Agent:
18− - Charm-Crush/devel (https://charm.land/crush)
19− url: https://hyper.charm.land/v1/chat/completions
20− method: POST
21− response:
22− proto: HTTP/2.0
23− proto_major: 2
24− proto_minor: 0
25− content_length: -1
26− uncompressed: true
27− body: |+
28− data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
30− data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_9fc14d4b22da05b9","type":"function","index":0,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
31−
32− data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{}"}}]},"finish_reason":null}]}
33−
34− data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
35−
36− data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":677,"completion_tokens":5,"total_tokens":8161,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0009697999999999999,"hypercredits":0.019395999999999997},"remaining":{"hypercredits":0}}}
37−
38− data: [DONE]
39−
40− headers:
41− Content-Type:
42− - text/event-stream
43− status: 200 OK
44− code: 200
45− duration: 1.511164s
46−- id: 1
475 request:
486 proto: HTTP/1.1
497 proto_major: 1
@@ -67,341 +25,275 @@ interactions:
6725 content_length: -1
6826 uncompressed: true
6927 body: |+
70− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
71−
72− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
73−
74− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
75−
76− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
77−
78− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
79−
80− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
81−
82− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
83−
84− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
85−
86− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
87−
88− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
89−
90− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
91−
92− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
93−
94− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
95−
96− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
97−
98− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
99−
100− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
101−
102− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
103−
104− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
105−
106− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
107−
108− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
109−
110− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
111−
112− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
113−
114− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
115−
116− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
117−
118− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
119−
120− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
121−
122− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
12329
124− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
12531
126− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" system"},"finish_reason":null}]}
12733
128− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
12935
130− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
13137
132− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
13339
134− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"You"},"finish_reason":null}]}
13541
136− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" will"},"finish_reason":null}]}
13743
138− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" generate"},"finish_reason":null}]}
13945
140− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
14147
142− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" max"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
14349
144− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
14551
146− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" based"},"finish_reason":null}]}
14753
148− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" on"},"finish_reason":null}]}
14955
150− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
15157
152− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
15359
154− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
15561
156− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
15763
158− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
15965
160− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" begins"},"finish_reason":null}]}
16167
162− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
16369
164− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" conversation"},"finish_reason":null}]}
16571
166− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
16773
168− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\""},"finish_reason":null}]}
16975
170− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" We"},"finish_reason":null}]}
17177
172− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
17379
174− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
17581
176− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"List"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
17783
178− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
17985
180− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
18187
182− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
18389
184− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
18591
186− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
18793
188− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
18995
190− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
19197
192− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
19399
194− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
195101
196− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
197103
198− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
199105
200− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
201107
202− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
203109
204− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
205111
206− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
207113
208− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" List"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
209115
210− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
211117
212− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
213119
214− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
215121
216− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
217123
218− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
219125
220− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
221127
222− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
223129
224− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
225131
226− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
227133
228− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
229135
230− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
231137
232− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
233139
234− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"They"},"finish_reason":null}]}
235141
236− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" want"},"finish_reason":null}]}
237143
238− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
239145
240− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
241147
242− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
243149
244− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
245151
246− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
247153
248− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
249155
250− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" less"},"finish_reason":null}]}
251157
252− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
253159
254− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
255161
256− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
257163
258− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
259165
260− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
261167
262− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
263169
264− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
265171
266− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
267173
268− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
269175
270− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
271177
272− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
273179
274− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
275181
276− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
277183
278− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
279185
280− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Potential"},"finish_reason":null}]}
281187
282− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
283189
284− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
285191
286− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
287193
288− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
289195
290− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
291197
292− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
293199
294− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" List"},"finish_reason":null}]}
295201
296− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Current"},"finish_reason":null}]}
297203
298− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Directory"},"finish_reason":null}]}
299205
300− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Files"},"finish_reason":null}]}
301207
302− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
303209
304− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
305211
306− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
307213
308− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
309215
310− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
311217
312− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
313219
314− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
315221
316− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
317223
318− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
319225
320− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
321227
322− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
323229
324− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
325231
326− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
327233
328− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
329235
330− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Using"},"finish_reason":null}]}
331237
332− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
333239
334− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
335241
336− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" List"},"finish_reason":null}]}
337243
338− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Current"},"finish_reason":null}]}
339245
340− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Directory"},"finish_reason":null}]}
341247
342− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Files"},"finish_reason":null}]}
343249
344− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
345251
346− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-7800eed68adf0e90119be770","object":"chat.completion.chunk","created":1778597373,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":21,"completion_tokens":120,"total_tokens":333,"prompt_tokens_details":{"cached_tokens":192}}}
347253
348− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
349−
350− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
351−
352− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
353−
354− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
355−
356− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
357−
358− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
359−
360− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
361−
362− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
363−
364− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
365−
366− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
367−
368− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
369−
370− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
371−
372− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
373−
374− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
375−
376− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
377−
378− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" OK"},"finish_reason":null}]}
379−
380− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
381−
382− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
383−
384− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
385−
386− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
387−
388− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"List"},"finish_reason":null}]}
389−
390− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
391−
392− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
254+ data: [DONE]
393255
394− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
256+ headers:
257+ Content-Type:
258+ - text/event-stream
259+ status: 200 OK
260+ code: 200
261+ duration: 458.0435ms
262+- id: 1
263+ request:
264+ proto: HTTP/1.1
265+ proto_major: 1
266+ proto_minor: 1
267+ content_length: 33637
268+ host: ""
269+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use ls to list the files in the current directory\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
270+ headers:
271+ Accept:
272+ - application/json
273+ Content-Type:
274+ - application/json
275+ User-Agent:
276+ - Charm-Crush/devel (https://charm.land/crush)
277+ url: https://hyper.charm.land/v1/chat/completions
278+ method: POST
279+ response:
280+ proto: HTTP/2.0
281+ proto_major: 2
282+ proto_minor: 0
283+ content_length: -1
284+ uncompressed: true
285+ body: |+
286+ data: {"id":"chatcmpl-3c3df60659c978a4a68c4826","object":"chat.completion.chunk","created":1778597377,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
395287
396− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-3c3df60659c978a4a68c4826","object":"chat.completion.chunk","created":1778597377,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_7d06be2f253c411fb9774a21","type":"function","index":0,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
397289
398− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-3c3df60659c978a4a68c4826","object":"chat.completion.chunk","created":1778597377,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
399291
400− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-3c3df60659c978a4a68c4826","object":"chat.completion.chunk","created":1778597377,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{}"}}]},"finish_reason":null}]}
401293
402− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
294+ data: {"id":"chatcmpl-3c3df60659c978a4a68c4826","object":"chat.completion.chunk","created":1778597377,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
403295
404− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":155,"completion_tokens":172,"total_tokens":391,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.000122704,"hypercredits":0.00245408},"remaining":{"hypercredits":0}}}
296+ data: {"id":"chatcmpl-3c3df60659c978a4a68c4826","object":"chat.completion.chunk","created":1778597377,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":702,"completion_tokens":5,"total_tokens":7747,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":4}}}
405297
406298 data: [DONE]
407299
@@ -410,15 +302,15 @@ interactions:
410302 - text/event-stream
411303 status: 200 OK
412304 code: 200
413− duration: 531.140917ms
305+ duration: 5.301269916s
414306- id: 2
415307 request:
416308 proto: HTTP/1.1
417309 proto_major: 1
418310 proto_minor: 1
419− content_length: 35898
311+ content_length: 33926
420312 host: ""
421− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use ls to list the files in the current directory\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_9fc14d4b22da05b9\",\"function\":{\"arguments\":\"{}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"\\n- /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool/\\n - go.mod\\n - main.go\\n\",\"tool_call_id\":\"call_9fc14d4b22da05b9\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
313+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use ls to list the files in the current directory\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_7d06be2f253c411fb9774a21\",\"function\":{\"arguments\":\"{}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"\\n- /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool/\\n - go.mod\\n - main.go\\n\",\"tool_call_id\":\"call_7d06be2f253c411fb9774a21\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
422314 headers:
423315 Accept:
424316 - application/json
@@ -435,45 +327,27 @@ interactions:
435327 content_length: -1
436328 uncompressed: true
437329 body: |+
438− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
439−
440− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Two"},"finish_reason":null}]}
441−
442− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
443−
444− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
445−
446− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
447−
448− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
449−
450− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
451−
452− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}]}
453−
454− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
455−
456− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-e09172c463a28df67712f05f","object":"chat.completion.chunk","created":1778597381,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
457331
458− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-e09172c463a28df67712f05f","object":"chat.completion.chunk","created":1778597381,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Files"},"finish_reason":null}]}
459333
460− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-e09172c463a28df67712f05f","object":"chat.completion.chunk","created":1778597381,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in current"},"finish_reason":null}]}
461335
462− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-e09172c463a28df67712f05f","object":"chat.completion.chunk","created":1778597381,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" directory:\n"},"finish_reason":null}]}
463337
464− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-e09172c463a28df67712f05f","object":"chat.completion.chunk","created":1778597381,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"- `go"},"finish_reason":null}]}
465339
466− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-e09172c463a28df67712f05f","object":"chat.completion.chunk","created":1778597381,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
467341
468− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-e09172c463a28df67712f05f","object":"chat.completion.chunk","created":1778597381,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n-"},"finish_reason":null}]}
469343
470− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-e09172c463a28df67712f05f","object":"chat.completion.chunk","created":1778597381,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `main"},"finish_reason":null}]}
471345
472− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-e09172c463a28df67712f05f","object":"chat.completion.chunk","created":1778597381,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go`"},"finish_reason":null}]}
473347
474− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
348+ data: {"id":"chatcmpl-e09172c463a28df67712f05f","object":"chat.completion.chunk","created":1778597381,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
475349
476− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":8195,"completion_tokens":19,"total_tokens":8214,"cost":{"usd":0.0115566,"hypercredits":0.231132},"remaining":{"hypercredits":0}}}
350+ data: {"id":"chatcmpl-e09172c463a28df67712f05f","object":"chat.completion.chunk","created":1778597381,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":741,"completion_tokens":17,"total_tokens":7798,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":16}}}
477351
478352 data: [DONE]
479353
@@ -482,4 +356,4 @@ interactions:
482356 - text/event-stream
483357 status: 200 OK
484358 code: 200
485− duration: 1.065962584s
359+ duration: 3.382412042s
internal/agent/testdata/TestCoderAgent/glm-5.1/multiedit_tool.yaml+511−807
@@ -6,9 +6,9 @@ interactions:
66 proto: HTTP/1.1
77 proto_major: 1
88 proto_minor: 1
9− content_length: 35711
9+ content_length: 887
1010 host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use 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-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
11+ body: '{"messages":[{"content":"You will generate a short title based on the first message a user begins a conversation with.\n\n<rules>\n- Keep the title in the same language that the user wrote their message in.\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-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
1212 headers:
1313 Accept:
1414 - application/json
@@ -25,857 +25,769 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
30− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
31−
32− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
33−
34− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
35−
36− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
37−
38− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
39−
40− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
41−
42− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
43−
44− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" see"},"finish_reason":null}]}
45−
46− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
47−
48− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
49−
50− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contents"},"finish_reason":null}]}
51−
52− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
53−
54− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_be8eea5daa27022a","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
55−
56− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
57−
58− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
59−
60− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
61−
62− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
63−
64− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
65−
66− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
67−
68− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
6929
70− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
7131
72− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
7333
74− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
7535
76− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
7737
78− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
7939
80− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
8141
82− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
8343
84− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
8545
86− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
8747
88− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
8949
90− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
91−
92− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
93−
94− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
95−
96− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
97−
98− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
99−
100− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
101−
102− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
103−
104− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":702,"completion_tokens":43,"total_tokens":8224,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":14},"cost":{"usd":0.0012336,"hypercredits":0.024672},"remaining":{"hypercredits":0}}}
105−
106− data: [DONE]
107−
108− headers:
109− Content-Type:
110− - text/event-stream
111− status: 200 OK
112− code: 200
113− duration: 993.64425ms
114−- id: 1
115− request:
116− proto: HTTP/1.1
117− proto_major: 1
118− proto_minor: 1
119− content_length: 887
120− host: ""
121− body: '{"messages":[{"content":"You will generate a short title based on the first message a user begins a conversation with.\n\n<rules>\n- Keep the title in the same language that the user wrote their message in.\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-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
122− headers:
123− Accept:
124− - application/json
125− Content-Type:
126− - application/json
127− User-Agent:
128− - Charm-Crush/devel (https://charm.land/crush)
129− url: https://hyper.charm.land/v1/chat/completions
130− method: POST
131− response:
132− proto: HTTP/2.0
133− proto_major: 2
134− proto_minor: 0
135− content_length: -1
136− uncompressed: true
137− body: |+
138− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
13951
140− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
14153
142− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
14355
144− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
14557
146− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
14759
148− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
14961
150− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
15163
152− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mult"},"finish_reason":null}]}
15365
154− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
15567
156− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
15769
158− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
15971
160− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
16173
162− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
16375
164− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
16577
166− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
16779
168− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
16981
170− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mult"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"!'"},"finish_reason":null}]}
17183
172− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
17385
174− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
17587
176− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
17789
178− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
17991
180− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
18193
182− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"!'"},"finish_reason":null}]}
18395
184− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
18597
186− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
18799
188− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"!'"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
189101
190− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
191103
192− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '//"},"finish_reason":null}]}
193105
194− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Greeting"},"finish_reason":null}]}
195107
196− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
197109
198− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" above"},"finish_reason":null}]}
199111
200− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"!'"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
201113
202− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fmt"},"finish_reason":null}]}
203115
204− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".Println"},"finish_reason":null}]}
205117
206− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
207119
208− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
209121
210− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '//"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
211123
212− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Greeting"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
213125
214− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
215127
216− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" above"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
217129
218− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
219131
220− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fmt"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
221133
222− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".Println"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
223135
224− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
225137
226− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
227139
228− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
229141
230− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
231143
232− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
233145
234− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
235147
236− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
237149
238− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
239151
240− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
241153
242− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
243155
244− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
245157
246− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
247159
248− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
249161
250− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
251163
252− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
253165
254− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
255167
256− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
257169
258− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" something"},"finish_reason":null}]}
259171
260− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
261173
262− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
263175
264− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Modify"},"finish_reason":null}]}
265177
266− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
267179
268− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
269181
270− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
271183
272− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
273185
274− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
275187
276− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
277189
278− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
279191
280− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
281193
282− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
283195
284− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
285197
286− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
287199
288− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
289201
290− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
291203
292− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
293205
294− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Edit"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Modify"},"finish_reason":null}]}
295207
296− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
297209
298− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
299211
300− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
301213
302− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" update"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
303215
304− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
305217
306− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
307219
308− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
309221
310− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
311223
312− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
313225
314− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
315227
316− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
317229
318− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
319231
320− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
321233
322− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
323235
324− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Edit"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
325237
326− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" M"},"finish_reason":null}]}
327239
328− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
329241
330− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
331243
332− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" update"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")o"},"finish_reason":null}]}
333245
334− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
335247
336− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"d"},"finish_reason":null}]}
337249
338− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
339251
340− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"i"},"finish_reason":null}]}
341253
342− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
343255
344− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"f"},"finish_reason":null}]}
345257
346− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
347259
348− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" E"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"y"},"finish_reason":null}]}
349261
350− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
351263
352− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
353265
354− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
355267
356− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
357269
358− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
359271
360− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"H"},"finish_reason":null}]}
361273
362− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
363275
364− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
365277
366− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
367279
368− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
369281
370− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
371283
372− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
373285
374− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
375287
376− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
377289
378− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
379291
380− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
381293
382− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
383295
384− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
385297
386− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
387299
388− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"W"},"finish_reason":null}]}
389301
390− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
391303
392− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
393305
394− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
395307
396− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"r"},"finish_reason":null}]}
397309
398− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
399311
400− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
401313
402− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
403315
404− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"d"},"finish_reason":null}]}
405317
406− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
407319
408− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
409321
410− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
411323
412− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
413325
414− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
415327
416− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
417329
418− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
419331
420− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
421333
422− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
423335
424− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
425337
426− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
427339
428− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
429341
430− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
431343
432− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"H"},"finish_reason":null}]}
433345
434− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
435347
436− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
437349
438− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
439351
440− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
441353
442− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
443355
444− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
445357
446− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
447359
448− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
449361
450− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
451363
452− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
453365
454− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
455367
456− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
457369
458− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
459371
460− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"C"},"finish_reason":null}]}
461373
462− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
463375
464− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"r"},"finish_reason":null}]}
465377
466− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
467379
468− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"u"},"finish_reason":null}]}
469381
470− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
471383
472− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"s"},"finish_reason":null}]}
473385
474− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
475387
476− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
477389
478− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
479391
480− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
481393
482− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
483395
484− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
485397
486− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
487399
488− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
489401
490− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
491403
492− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
493405
494− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
495407
496− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"d"},"finish_reason":null}]}
497409
498− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
499411
500− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
501413
502− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
503415
504− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
505417
506− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
507419
508− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
509421
510− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
511423
512− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"d"},"finish_reason":null}]}
513425
514− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
515427
516− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"d"},"finish_reason":null}]}
517429
518− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
519431
520− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
521433
522− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
523435
524− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
525437
526− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
527439
528− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"g"},"finish_reason":null}]}
529441
530− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
531443
532− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"r"},"finish_reason":null}]}
533445
534− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
535447
536− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
537449
538− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
539451
540− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
541453
542− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
543455
544− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
545457
546− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
547459
548− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"i"},"finish_reason":null}]}
549461
550− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
551463
552− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
553465
554− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
555467
556− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Or"},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"g"},"finish_reason":null}]}
557469
558− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
559471
560− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Change"},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
561473
562− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
563475
564− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
565477
566− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
567479
568− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"c"},"finish_reason":null}]}
569481
570− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
482+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"52"},"finish_reason":null}]}
571483
572− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
573485
574− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
486+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"53"},"finish_reason":null}]}
575487
576− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
488+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
577489
578− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
490+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"54"},"finish_reason":null}]}
579491
580− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
492+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
581493
582− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
494+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"55"},"finish_reason":null}]}
583495
584− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
496+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
585497
586− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Change"},"finish_reason":null}]}
498+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"56"},"finish_reason":null}]}
587499
588− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
500+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
589501
590− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
502+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"57"},"finish_reason":null}]}
591503
592− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
504+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
593505
594− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
506+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"58"},"finish_reason":null}]}
595507
596− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
508+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
597509
598− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
510+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
599511
600− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
512+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
601513
602− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
514+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"58"},"finish_reason":null}]}
603515
604− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
516+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003e"},"finish_reason":null}]}
605517
606− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
518+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
607519
608− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
520+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
609521
610− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
522+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
611523
612− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
524+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
613525
614− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
526+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
615527
616− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
528+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
617529
618− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
530+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
619531
620− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
532+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Perhaps"},"finish_reason":null}]}
621533
622− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
623535
624− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
536+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Change"},"finish_reason":null}]}
625537
626− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
538+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
627539
628− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
540+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
629541
630− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
542+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
631543
632− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
544+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
633545
634− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
546+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
635547
636− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
548+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
637549
638− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
550+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
639551
640− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" H"},"finish_reason":null}]}
552+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
641553
642− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
554+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
643555
644− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
556+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
645557
646− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
558+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
647559
648− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
560+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Change"},"finish_reason":null}]}
649561
650− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
562+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
651563
652− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
564+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
653565
654− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
566+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
655567
656− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
568+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
657569
658− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
570+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
659571
660− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
572+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
661573
662− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
574+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
663575
664− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" W"},"finish_reason":null}]}
576+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
665577
666− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
578+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
667579
668− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
580+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
669581
670− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
582+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
671583
672− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
584+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
673585
674− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
586+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
675587
676− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
588+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
677589
678− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
590+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
679591
680− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
592+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
681593
682− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
594+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
683595
684− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
596+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
685597
686− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
598+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
687599
688− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
600+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
689601
690− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
691603
692− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
604+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
693605
694− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
606+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
695607
696− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
608+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
697609
698− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
699611
700− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" H"},"finish_reason":null}]}
612+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
701613
702− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
614+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
703615
704− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
616+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
705617
706− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
618+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
707619
708− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
620+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
709621
710− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
622+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
711623
712− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
624+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
713625
714− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
715627
716− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
628+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
717629
718− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
630+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
719631
720− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
632+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
721633
722− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
634+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
723635
724− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
636+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
725637
726− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
638+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
727639
728− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
640+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
729641
730− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
642+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
731643
732− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
644+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
733645
734− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
646+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
735647
736− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
648+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
737649
738− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
650+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
739651
740− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
652+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
741653
742− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
654+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
743655
744− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
656+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
745657
746− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
658+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
747659
748− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
660+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
749661
750− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
662+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
751663
752− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
664+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
753665
754− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
666+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
755667
756− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
668+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
757669
758− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
670+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
759671
760− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
672+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
761673
762− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
674+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
763675
764− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
676+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
765677
766− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
678+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
767679
768− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
680+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
769681
770− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
682+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
771683
772− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
684+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
773685
774− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
686+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
775687
776− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
688+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
777689
778− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
690+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
779691
780− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
692+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
781693
782− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
694+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
783695
784− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
696+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
785697
786− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
698+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
787699
788− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
700+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
789701
790− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
702+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
791703
792− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
704+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
793705
794− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
706+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
795707
796− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
708+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
797709
798− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
710+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
799711
800− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
712+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
801713
802− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
714+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
803715
804− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
716+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
805717
806− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
718+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
807719
808− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
720+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
809721
810− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
722+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
811723
812− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
724+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
813725
814− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
726+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
815727
816− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
728+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
817729
818− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
730+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
819731
820− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
732+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
821733
822− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" too"},"finish_reason":null}]}
734+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Change"},"finish_reason":null}]}
823735
824− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
736+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
825737
826− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Pick"},"finish_reason":null}]}
738+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
827739
828− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
740+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
829741
830− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
742+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
831743
832− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" I'll"},"finish_reason":null}]}
744+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
833745
834− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
746+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
835747
836− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
748+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
837749
838− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Change"},"finish_reason":null}]}
750+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
839751
840− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
752+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n\n"},"finish_reason":null}]}
841753
842− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
754+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"No"},"finish_reason":null}]}
843755
844− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
756+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
845757
846− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
758+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
847759
848− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
760+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
849761
850− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
762+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
851763
852− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
764+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
853765
854− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
766+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
855767
856− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
768+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
857769
858− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Change"},"finish_reason":null}]}
770+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Change"},"finish_reason":null}]}
859771
860− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Hello"},"finish_reason":null}]}
772+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Hello"},"finish_reason":null}]}
861773
862− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" World"},"finish_reason":null}]}
774+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" World"},"finish_reason":null}]}
863775
864− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
776+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
865777
866− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Hello"},"finish_reason":null}]}
778+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Hello"},"finish_reason":null}]}
867779
868− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Crush"},"finish_reason":null}]}
780+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Crush"},"finish_reason":null}]}
869781
870− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
782+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
871783
872− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" add"},"finish_reason":null}]}
784+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" add"},"finish_reason":null}]}
873785
874− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
786+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
875787
876− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
788+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
877789
878− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":169,"completion_tokens":378,"total_tokens":615,"prompt_tokens_details":{"cached_tokens":68},"completion_tokens_details":{"reasoning_tokens":296},"cost":{"usd":0.00040718000000000004,"hypercredits":0.0081436},"remaining":{"hypercredits":0}}}
790+ data: {"id":"chatcmpl-c33fa86d503c142b247f086f","object":"chat.completion.chunk","created":1778597382,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":43,"completion_tokens":389,"total_tokens":624,"prompt_tokens_details":{"cached_tokens":192}}}
879791
880792 data: [DONE]
881793
@@ -884,15 +796,15 @@ interactions:
884796 - text/event-stream
885797 status: 200 OK
886798 code: 200
887− duration: 889.289875ms
888−- id: 2
799+ duration: 525.624875ms
800+- id: 1
889801 request:
890802 proto: HTTP/1.1
891803 proto_major: 1
892804 proto_minor: 1
893− content_length: 36227
805+ content_length: 33723
894806 host: ""
895− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_be8eea5daa27022a\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_be8eea5daa27022a\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
807+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use 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-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
896808 headers:
897809 Accept:
898810 - application/json
@@ -909,61 +821,65 @@ interactions:
909821 content_length: -1
910822 uncompressed: true
911823 body: |+
912− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
824+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
825+
826+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
913827
914− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_3cee374c3e013d11","type":"function","index":0,"function":{"name":"multiedit","arguments":""}}]},"finish_reason":null}]}
828+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
915829
916− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"edits\": [{\"new_string\": \"Hello, Crush!\", \"old_string\": \"Hello, World!\"}, {\"new_string\": \"\\t// Greeting\\n\\tfmt.Println(\\\"Hello, Crush!\\\")\", \"old_string\": \"\\tfmt.Println(\\\"Hello, World!\\\")\"}]"}}]},"finish_reason":null}]}
830+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first read"},"finish_reason":null}]}
917831
918− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"file_path\": \""}}]},"finish_reason":null}]}
832+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the main.go"},"finish_reason":null}]}
919833
920− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
834+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
921835
922− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
836+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
923837
924− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
838+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" see its"},"finish_reason":null}]}
925839
926− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
840+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current contents."},"finish_reason":null}]}
927841
928− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
842+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_283007539bbb437197ef527d","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
929843
930− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
844+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
931845
932− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
846+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
933847
934− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
848+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": \"/tmp"}}]},"finish_reason":null}]}
935849
936− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
850+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
937851
938− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
852+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
939853
940− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
854+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
941855
942− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
856+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
943857
944− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
858+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
945859
946− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
860+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent/g"}}]},"finish_reason":null}]}
947861
948− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
862+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
949863
950− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
864+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-5"}}]},"finish_reason":null}]}
951865
952− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
866+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".1/m"}}]},"finish_reason":null}]}
953867
954− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
868+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ultied"}}]},"finish_reason":null}]}
955869
956− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
870+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
957871
958− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
872+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
959873
960− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
874+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main.go"}}]},"finish_reason":null}]}
961875
962− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
876+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
963877
964− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
878+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
965879
966− data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":793,"completion_tokens":95,"total_tokens":8367,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0015282,"hypercredits":0.030563999999999997},"remaining":{"hypercredits":0}}}
880+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
881+
882+ data: {"id":"chatcmpl-78dc0a02c287e4423ccf7646","object":"chat.completion.chunk","created":1778597385,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7767,"completion_tokens":45,"total_tokens":7812,"completion_tokens_details":{"reasoning_tokens":14}}}
967883
968884 data: [DONE]
969885
@@ -972,15 +888,15 @@ interactions:
972888 - text/event-stream
973889 status: 200 OK
974890 code: 200
975− duration: 950.328ms
976−- id: 3
891+ duration: 4.180391958s
892+- id: 2
977893 request:
978894 proto: HTTP/1.1
979895 proto_major: 1
980896 proto_minor: 1
981− content_length: 36887
897+ content_length: 34254
982898 host: ""
983− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_be8eea5daa27022a\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_be8eea5daa27022a\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_3cee374c3e013d11\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"Hello, Crush!\\\", \\\"old_string\\\": \\\"Hello, World!\\\"}, {\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 of 2 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go (1 edit(s) failed)\\n</result>\\n\",\"tool_call_id\":\"call_3cee374c3e013d11\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
899+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_283007539bbb437197ef527d\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the main.go file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n</file>\\n\",\"tool_call_id\":\"call_283007539bbb437197ef527d\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
984900 headers:
985901 Accept:
986902 - application/json
@@ -997,261 +913,83 @@ interactions:
997913 content_length: -1
998914 uncompressed: true
999915 body: |+
1000− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1001−
1002− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
1003−
1004− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
1005−
1006− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
1007−
1008− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" succeeded"},"finish_reason":null}]}
1009−
1010− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
1011−
1012− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"changing"},"finish_reason":null}]}
1013−
1014− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
1015−
1016− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
1017−
1018− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1019−
1020− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
1021−
1022− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"!\""},"finish_reason":null}]}
1023−
1024− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
1025−
1026− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
1027−
1028− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
1029−
1030− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1031−
1032− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
1033−
1034− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"!\")"},"finish_reason":null}]}
1035−
1036− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" but"},"finish_reason":null}]}
1037−
1038− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" then"},"finish_reason":null}]}
1039−
1040− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
1041−
1042− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" second"},"finish_reason":null}]}
916+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1043917
1044− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
918+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_438a3edf38b3453e9b16eb16","type":"function","index":0,"function":{"name":"multiedit","arguments":""}}]},"finish_reason":null}]}
1045919
1046− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" failed"},"finish_reason":null}]}
920+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
1047921
1048− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" because"},"finish_reason":null}]}
922+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
1049923
1050− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
924+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"edits\": "}}]},"finish_reason":null}]}
1051925
1052− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" was"},"finish_reason":null}]}
926+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"[{\"new_string"}}]},"finish_reason":null}]}
1053927
1054− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" looking"},"finish_reason":null}]}
928+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\": \"\\"}}]},"finish_reason":null}]}
1055929
1056− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
930+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"t//"}}]},"finish_reason":null}]}
1057931
1058− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
932+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" G"}}]},"finish_reason":null}]}
1059933
1060− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" old"},"finish_reason":null}]}
934+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"reeting"}}]},"finish_reason":null}]}
1061935
1062− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" string"},"finish_reason":null}]}
936+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\n\\t"}}]},"finish_reason":null}]}
1063937
1064− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
938+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"fmt.Println"}}]},"finish_reason":null}]}
1065939
1066− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
940+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\"Hello"}}]},"finish_reason":null}]}
1067941
1068− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
942+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", Crush"}}]},"finish_reason":null}]}
1069943
1070− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
944+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")"}}]},"finish_reason":null}]}
1071945
1072− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
946+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", \"old"}}]},"finish_reason":null}]}
1073947
1074− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"!\""},"finish_reason":null}]}
948+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_string\": \"\\"}}]},"finish_reason":null}]}
1075949
1076− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" which"},"finish_reason":null}]}
950+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"t"}}]},"finish_reason":null}]}
1077951
1078− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
952+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"fmt.Println(\\\"Hello"}}]},"finish_reason":null}]}
1079953
1080− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" longer"},"finish_reason":null}]}
954+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", World"}}]},"finish_reason":null}]}
1081955
1082− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" exists"},"finish_reason":null}]}
956+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")"}}]},"finish_reason":null}]}
1083957
1084− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" after"},"finish_reason":null}]}
958+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}]"}}]},"finish_reason":null}]}
1085959
1086− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
960+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", "}}]},"finish_reason":null}]}
1087961
1088− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
962+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
1089963
1090− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
964+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
1091965
1092− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
966+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
1093967
1094− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Since"},"finish_reason":null}]}
968+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
1095969
1096− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" mult"},"finish_reason":null}]}
970+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test/Test"}}]},"finish_reason":null}]}
1097971
1098− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
972+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"CoderAgent"}}]},"finish_reason":null}]}
1099973
1100− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
974+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
1101975
1102− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" applies"},"finish_reason":null}]}
976+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm-"}}]},"finish_reason":null}]}
1103977
1104− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edits"},"finish_reason":null}]}
978+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5.1/m"}}]},"finish_reason":null}]}
1105979
1106− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" sequentially"},"finish_reason":null}]}
980+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ultied"}}]},"finish_reason":null}]}
1107981
1108− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
982+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
1109983
1110− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
984+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool/main"}}]},"finish_reason":null}]}
1111985
1112− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" second"},"finish_reason":null}]}
986+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go\""}}]},"finish_reason":null}]}
1113987
1114− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
988+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
1115989
1116− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" needs"},"finish_reason":null}]}
990+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
1117991
1118− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
1119−
1120− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" reference"},"finish_reason":null}]}
1121−
1122− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
1123−
1124− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" already"},"finish_reason":null}]}
1125−
1126− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"-mod"},"finish_reason":null}]}
1127−
1128− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"ified"},"finish_reason":null}]}
1129−
1130− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
1131−
1132− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
1133−
1134− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
1135−
1136− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
1137−
1138− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fix"},"finish_reason":null}]}
1139−
1140− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
1141−
1142− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" second"},"finish_reason":null}]}
1143−
1144− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
1145−
1146− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" by"},"finish_reason":null}]}
1147−
1148− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
1149−
1150− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
1151−
1152− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" updated"},"finish_reason":null}]}
1153−
1154− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
1155−
1156− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
1157−
1158− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_5ca3b6e1898be023","type":"function","index":0,"function":{"name":"edit","arguments":""}}]},"finish_reason":null}]}
1159−
1160− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
1161−
1162− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
1163−
1164− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
1165−
1166− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
1167−
1168− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
1169−
1170− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
1171−
1172− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
1173−
1174− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
1175−
1176− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
1177−
1178− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
1179−
1180− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
1181−
1182− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
1183−
1184− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
1185−
1186− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
1187−
1188− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
1189−
1190− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
1191−
1192− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
1193−
1194− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
1195−
1196− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
1197−
1198− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
1199−
1200− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
1201−
1202− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
1203−
1204− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"new_string\": \""}}]},"finish_reason":null}]}
1205−
1206− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\t"}}]},"finish_reason":null}]}
1207−
1208− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"//"}}]},"finish_reason":null}]}
1209−
1210− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" G"}}]},"finish_reason":null}]}
1211−
1212− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"reeting"}}]},"finish_reason":null}]}
1213−
1214− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\n"}}]},"finish_reason":null}]}
1215−
1216− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\tfmt"}}]},"finish_reason":null}]}
1217−
1218− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
1219−
1220− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
1221−
1222− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
1223−
1224− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
1225−
1226− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Crush"}}]},"finish_reason":null}]}
1227−
1228− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")"}}]},"finish_reason":null}]}
1229−
1230− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
1231−
1232− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"old_string\": \""}}]},"finish_reason":null}]}
1233−
1234− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\tfmt"}}]},"finish_reason":null}]}
1235−
1236− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
1237−
1238− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
1239−
1240− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
1241−
1242− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
1243−
1244− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Crush"}}]},"finish_reason":null}]}
1245−
1246− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")"}}]},"finish_reason":null}]}
1247−
1248− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
1249−
1250− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
1251−
1252− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
1253−
1254− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":936,"completion_tokens":140,"total_tokens":8555,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":95},"cost":{"usd":0.0023444,"hypercredits":0.046888},"remaining":{"hypercredits":0}}}
992+ data: {"id":"chatcmpl-2474e58b91064f2059f283db","object":"chat.completion.chunk","created":1778597390,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":814,"completion_tokens":76,"total_tokens":7930,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":75}}}
1255993
1256994 data: [DONE]
1257995
@@ -1260,15 +998,15 @@ interactions:
1260998 - text/event-stream
1261999 status: 200 OK
12621000 code: 200
1263− duration: 1.048298875s
1264−- id: 4
1001+ duration: 4.191709167s
1002+- id: 3
12651003 request:
12661004 proto: HTTP/1.1
12671005 proto_major: 1
12681006 proto_minor: 1
1269− content_length: 37817
1007+ content_length: 34834
12701008 host: ""
1271− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_be8eea5daa27022a\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_be8eea5daa27022a\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_3cee374c3e013d11\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"Hello, Crush!\\\", \\\"old_string\\\": \\\"Hello, World!\\\"}, {\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 of 2 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go (1 edit(s) failed)\\n</result>\\n\",\"tool_call_id\":\"call_3cee374c3e013d11\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_5ca3b6e1898be023\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\", \\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\"}\",\"name\":\"edit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The first edit succeeded (changing \\\"Hello, World!\\\" to \\\"Hello, Crush!\\\") but then the second edit failed because it was looking for the old string with \\\"Hello, World!\\\" which no longer exists after the first edit. Since multiedit applies edits sequentially, the second edit needs to reference the already-modified content.\\n\\nLet me fix the second edit by using the updated content.\"},{\"content\":\"<result>\\nContent replaced in file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\n</result>\\n\",\"tool_call_id\":\"call_5ca3b6e1898be023\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
1009+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_283007539bbb437197ef527d\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the main.go file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n</file>\\n\",\"tool_call_id\":\"call_283007539bbb437197ef527d\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_438a3edf38b3453e9b16eb16\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\n</result>\\n\",\"tool_call_id\":\"call_438a3edf38b3453e9b16eb16\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12721010 headers:
12731011 Accept:
12741012 - application/json
@@ -1285,59 +1023,45 @@ interactions:
12851023 content_length: -1
12861024 uncompressed: true
12871025 body: |+
1288− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1289−
1290− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_0740d7fb4460c2fe","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
1291−
1292− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
1293−
1294− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
1295−
1296− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
1297−
1298− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
1299−
1300− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
1301−
1302− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
1026+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
13031027
1304− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
1028+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_a17a720072ed49faa4627ce8","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
13051029
1306− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
1030+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
13071031
1308− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
1032+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
13091033
1310− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
1034+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
13111035
1312− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
1036+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp/c"}}]},"finish_reason":null}]}
13131037
1314− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
1038+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush-test"}}]},"finish_reason":null}]}
13151039
1316− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
1040+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
13171041
1318− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
1042+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
13191043
1320− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
1044+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent/g"}}]},"finish_reason":null}]}
13211045
1322− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
1046+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm-5"}}]},"finish_reason":null}]}
13231047
1324− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
1048+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".1/m"}}]},"finish_reason":null}]}
13251049
1326− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
1050+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ultied"}}]},"finish_reason":null}]}
13271051
1328− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
1052+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
13291053
1330− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
1054+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
13311055
1332− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
1056+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main.go"}}]},"finish_reason":null}]}
13331057
1334− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
1058+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
13351059
1336− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
1060+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
13371061
1338− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
1062+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
13391063
1340− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":100,"completion_tokens":31,"total_tokens":8545,"prompt_tokens_details":{"cached_tokens":8414},"cost":{"usd":0.0002764,"hypercredits":0.005528},"remaining":{"hypercredits":0}}}
1064+ data: {"id":"chatcmpl-1c84d2444240539e0bffc35c","object":"chat.completion.chunk","created":1778597395,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":225,"completion_tokens":31,"total_tokens":8000,"prompt_tokens_details":{"cached_tokens":7744},"completion_tokens_details":{"reasoning_tokens":30}}}
13411065
13421066 data: [DONE]
13431067
@@ -1346,15 +1070,15 @@ interactions:
13461070 - text/event-stream
13471071 status: 200 OK
13481072 code: 200
1349− duration: 1.047383917s
1350−- id: 5
1073+ duration: 3.261922667s
1074+- id: 4
13511075 request:
13521076 proto: HTTP/1.1
13531077 proto_major: 1
13541078 proto_minor: 1
1355− content_length: 38300
1079+ content_length: 35324
13561080 host: ""
1357− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_be8eea5daa27022a\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_be8eea5daa27022a\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_3cee374c3e013d11\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"Hello, Crush!\\\", \\\"old_string\\\": \\\"Hello, World!\\\"}, {\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 of 2 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go (1 edit(s) failed)\\n</result>\\n\",\"tool_call_id\":\"call_3cee374c3e013d11\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_5ca3b6e1898be023\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\", \\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\"}\",\"name\":\"edit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The first edit succeeded (changing \\\"Hello, World!\\\" to \\\"Hello, Crush!\\\") but then the second edit failed because it was looking for the old string with \\\"Hello, World!\\\" which no longer exists after the first edit. Since multiedit applies edits sequentially, the second edit needs to reference the already-modified content.\\n\\nLet me fix the second edit by using the updated content.\"},{\"content\":\"<result>\\nContent replaced in file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\n</result>\\n\",\"tool_call_id\":\"call_5ca3b6e1898be023\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_0740d7fb4460c2fe\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\t// Greeting\\n 7|\\tfmt.Println(\\\"Hello, Crush!\\\")\\n 8|}\\n 9|\\n</file>\\n\",\"tool_call_id\":\"call_0740d7fb4460c2fe\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
1081+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_283007539bbb437197ef527d\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the main.go file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n</file>\\n\",\"tool_call_id\":\"call_283007539bbb437197ef527d\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_438a3edf38b3453e9b16eb16\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\n</result>\\n\",\"tool_call_id\":\"call_438a3edf38b3453e9b16eb16\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_a17a720072ed49faa4627ce8\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\t// Greeting\\n 7|\\tfmt.Println(\\\"Hello, Crush!\\\")\\n 8|}\\n</file>\\n\",\"tool_call_id\":\"call_a17a720072ed49faa4627ce8\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
13581082 headers:
13591083 Accept:
13601084 - application/json
@@ -1371,63 +1095,43 @@ interactions:
13711095 content_length: -1
13721096 uncompressed: true
13731097 body: |+
1374− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1375−
1376− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
1377−
1378− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
1379−
1380− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1381−
1382− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
1383−
1384− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1385−
1386− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
1387−
1388− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6"},"finish_reason":null}]}
1389−
1390− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1391−
1392− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"7"},"finish_reason":null}]}
1393−
1394− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1098+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
13951099
1396− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" now"},"finish_reason":null}]}
1100+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
13971101
1398− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" has"},"finish_reason":null}]}
1102+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
13991103
1400− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
1104+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `'"},"finish_reason":null}]}
14011105
1402− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1106+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
14031107
1404− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"//"},"finish_reason":null}]}
1108+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":", World"},"finish_reason":null}]}
14051109
1406− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" G"},"finish_reason":null}]}
1110+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!'` changed"},"finish_reason":null}]}
14071111
1408− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"reeting"},"finish_reason":null}]}
1112+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" to `'"},"finish_reason":null}]}
14091113
1410− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1114+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hello, Crush"},"finish_reason":null}]}
14111115
1412− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
1116+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!'` and `"},"finish_reason":null}]}
14131117
1414− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
1118+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"// G"},"finish_reason":null}]}
14151119
1416− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `\""},"finish_reason":null}]}
1120+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"reeting"},"finish_reason":null}]}
14171121
1418− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
1122+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` comment added"},"finish_reason":null}]}
14191123
1420− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
1124+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" above"},"finish_reason":null}]}
14211125
1422− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Crush"},"finish_reason":null}]}
1126+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
14231127
1424− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!\""},"finish_reason":null}]}
1128+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"fmt.Println"},"finish_reason":null}]}
14251129
1426− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
1130+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
14271131
1428− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
1132+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
14291133
1430− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":343,"completion_tokens":28,"total_tokens":8642,"prompt_tokens_details":{"cached_tokens":8271},"cost":{"usd":0.0006034,"hypercredits":0.012068},"remaining":{"hypercredits":0}}}
1134+ data: {"id":"chatcmpl-b0eeafb8638d7348f03ba44f","object":"chat.completion.chunk","created":1778597397,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":8065,"completion_tokens":31,"total_tokens":8096,"completion_tokens_details":{"reasoning_tokens":30}}}
14311135
14321136 data: [DONE]
14331137
@@ -1436,4 +1140,4 @@ interactions:
14361140 - text/event-stream
14371141 status: 200 OK
14381142 code: 200
1439− duration: 902.639042ms
1143+ duration: 1.715269625s
internal/agent/testdata/TestCoderAgent/glm-5.1/parallel_tool_calls.yaml+203−453
@@ -2,86 +2,6 @@
22version: 2
33interactions:
44- id: 0
5− request:
6− proto: HTTP/1.1
7− proto_major: 1
8− proto_minor: 1
9− content_length: 35722
10− host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use 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-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12− headers:
13− Accept:
14− - application/json
15− Content-Type:
16− - application/json
17− User-Agent:
18− - Charm-Crush/devel (https://charm.land/crush)
19− url: https://hyper.charm.land/v1/chat/completions
20− method: POST
21− response:
22− proto: HTTP/2.0
23− proto_major: 2
24− proto_minor: 0
25− content_length: -1
26− uncompressed: true
27− body: |+
28− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
30− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31−
32− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33−
34− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
35−
36− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
37−
38− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
39−
40− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" run"},"finish_reason":null}]}
41−
42− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
43−
44− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
45−
46− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
47−
48− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
49−
50− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" parallel"},"finish_reason":null}]}
51−
52− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
53−
54− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_863d2e4c3c1b490c","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
55−
56− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\": \""}}]},"finish_reason":null}]}
57−
58− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"**"}}]},"finish_reason":null}]}
59−
60− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/*."}}]},"finish_reason":null}]}
61−
62− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
63−
64− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
65−
66− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
67−
68− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_ca7def41fb593fc5","type":"function","index":1,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
69−
70− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"{}"}}]},"finish_reason":null}]}
71−
72− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
73−
74− data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":696,"completion_tokens":28,"total_tokens":8204,"prompt_tokens_details":{"cached_tokens":7480},"completion_tokens_details":{"reasoning_tokens":13},"cost":{"usd":0.0011548,"hypercredits":0.023096000000000002},"remaining":{"hypercredits":0}}}
75−
76− data: [DONE]
77−
78− headers:
79− Content-Type:
80− - text/event-stream
81− status: 200 OK
82− code: 200
83− duration: 1.34867075s
84−- id: 1
855 request:
866 proto: HTTP/1.1
877 proto_major: 1
@@ -105,463 +25,335 @@ interactions:
10525 content_length: -1
10626 uncompressed: true
10727 body: |+
108− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
109−
110− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
111−
112− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
113−
114− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
115−
116− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
117−
118− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
119−
120− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
121−
122− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
123−
124− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
125−
126− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
127−
128− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
129−
130− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
131−
132− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
133−
134− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
135−
136− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
137−
138− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
139−
140− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
141−
142− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
143−
144− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
145−
146− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
147−
148− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
149−
150− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
151−
152− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
153−
154− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
155−
156− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
157−
158− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
159−
160− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
161−
162− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
163−
164− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
165−
166− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
167−
168− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
169−
170− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
171−
172− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" very"},"finish_reason":null}]}
173−
174− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" important"},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" you"},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" run"},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" both"},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
18529
186− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" calls"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
18731
188− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
18933
190− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" parallel"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
19135
192− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
19337
194− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
19539
196− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
19741
198− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
19943
200− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
20145
202− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
20347
204− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
20549
206− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
20751
208− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
20953
210− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
21155
212− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
21357
214− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
21559
216− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
21761
218− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
21963
220− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
22165
222− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
22367
224− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
22569
226− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summary"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
22771
228− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
22973
230− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
23175
232− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
23377
234− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ..."},"finish_reason":null}]}
23579
236− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" run"},"finish_reason":null}]}
23781
238− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" both"},"finish_reason":null}]}
23983
240− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
24185
242− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" calls"},"finish_reason":null}]}
24387
244− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
24589
246− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" parallel"},"finish_reason":null}]}
24791
248− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
24993
250− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
25195
252− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
25397
254− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
25599
256− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
257101
258− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
259103
260− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
261105
262− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
263107
264− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c"},"finish_reason":null}]}
265109
266− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
267111
268− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
269113
270− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
271115
272− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
273117
274− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
275119
276− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
277121
278− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
279123
280− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
281125
282− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
283127
284− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
285129
286− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
287131
288− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
289133
290− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
291135
292− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
293137
294− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
295139
296− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" P"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
297141
298− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
299143
300− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
301145
302− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
303147
304− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
305149
306− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
307151
308− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
309153
310− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" listing"},"finish_reason":null}]}
311155
312− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
313157
314− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
315159
316− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
317161
318− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
319163
320− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
321165
322− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
323167
324− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
325169
326− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
327171
328− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
329173
330− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
331175
332− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
333177
334− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
335179
336− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
337181
338− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" listing"},"finish_reason":null}]}
339183
340− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
341185
342− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
343187
344− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
345189
346− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
347191
348− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" b"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
349193
350− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
351195
352− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
353197
354− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
355199
356− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
357201
358− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
359203
360− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
361205
362− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
363207
364− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
365209
366− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
367211
368− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
369213
370− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
371215
372− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" listing"},"finish_reason":null}]}
373217
374− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
375219
376− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
377221
378− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
379223
380− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
381225
382− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
383227
384− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
385229
386− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"including"},"finish_reason":null}]}
387231
388− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" spaces"},"finish_reason":null}]}
389233
390− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
391235
392− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
393237
394− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
395239
396− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
397241
398− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
399243
400− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
401245
402− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
403247
404− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
405249
406− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Parallel"},"finish_reason":null}]}
407251
408− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
409253
410− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
411255
412− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
413257
414− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
415259
416− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
417261
418− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
419263
420− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
421265
422− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" listing"},"finish_reason":null}]}
423267
424− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
425269
426− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-3572456ad6c6fd07d5c164cc","object":"chat.completion.chunk","created":1778597427,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":40,"completion_tokens":129,"total_tokens":361,"prompt_tokens_details":{"cached_tokens":192}}}
427271
428− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
429−
430− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
431−
432− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
433−
434− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
435−
436− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
437−
438− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
439−
440− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
441−
442− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
443−
444− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
445−
446− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
447−
448− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
449−
450− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
451−
452− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
453−
454− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
455−
456− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
457−
458− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
459−
460− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
461−
462− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
463−
464− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
465−
466− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
467−
468− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
469−
470− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
471−
472− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
473−
474− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
475−
476− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
477−
478− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
479−
480− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
481−
482− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
483−
484− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
485−
486− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
487−
488− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
489−
490− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
491−
492− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
493−
494− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
495−
496− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" y"},"finish_reason":null}]}
497−
498− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
499−
500− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
501−
502− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
503−
504− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
505−
506− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
507−
508− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
509−
510− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
272+ data: [DONE]
511273
512− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
274+ headers:
275+ Content-Type:
276+ - text/event-stream
277+ status: 200 OK
278+ code: 200
279+ duration: 473.337ms
280+- id: 1
281+ request:
282+ proto: HTTP/1.1
283+ proto_major: 1
284+ proto_minor: 1
285+ content_length: 33734
286+ host: ""
287+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use 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-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
288+ headers:
289+ Accept:
290+ - application/json
291+ Content-Type:
292+ - application/json
293+ User-Agent:
294+ - Charm-Crush/devel (https://charm.land/crush)
295+ url: https://hyper.charm.land/v1/chat/completions
296+ method: POST
297+ response:
298+ proto: HTTP/2.0
299+ proto_major: 2
300+ proto_minor: 0
301+ content_length: -1
302+ uncompressed: true
303+ body: |+
304+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
513305
514− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
515307
516− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
517309
518− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants me"},"finish_reason":null}]}
519311
520− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to run both"},"finish_reason":null}]}
521313
522− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tools"},"finish_reason":null}]}
523315
524− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in parallel -"},"finish_reason":null}]}
525317
526− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
527319
528− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
529321
530− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" find ."},"finish_reason":null}]}
531323
532− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"go files"},"finish_reason":null}]}
533325
534− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and ls"},"finish_reason":null}]}
535327
536− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to list"},"finish_reason":null}]}
537329
538− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" seems"},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the current directory"},"finish_reason":null}]}
539331
540− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
541333
542− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_db9a486cd35645f3b90ee531","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
543335
544− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Parallel"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
545337
546− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
547339
548− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
549341
550− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"**/*."}}]},"finish_reason":null}]}
551343
552− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go\""}}]},"finish_reason":null}]}
553345
554− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
555347
556− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_76a6b00364c747e69ca63e2e","type":"function","index":1,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
557349
558− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null}]}
559351
560− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"{}"}}]},"finish_reason":null}]}
561353
562− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
354+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
563355
564− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":174,"completion_tokens":233,"total_tokens":471,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.00016017800000000002,"hypercredits":0.0032035600000000003},"remaining":{"hypercredits":0}}}
356+ data: {"id":"chatcmpl-b7b4b066f9d904b86ddbbd70","object":"chat.completion.chunk","created":1778597431,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":722,"completion_tokens":41,"total_tokens":7803,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":25}}}
565357
566358 data: [DONE]
567359
@@ -570,15 +362,15 @@ interactions:
570362 - text/event-stream
571363 status: 200 OK
572364 code: 200
573− duration: 587.031833ms
365+ duration: 3.781553792s
574366- id: 2
575367 request:
576368 proto: HTTP/1.1
577369 proto_major: 1
578370 proto_minor: 1
579− content_length: 36330
371+ content_length: 34435
580372 host: ""
581− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use 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\"},{\"tool_calls\":[{\"id\":\"call_863d2e4c3c1b490c\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"},{\"id\":\"call_ca7def41fb593fc5\",\"function\":{\"arguments\":\"{}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to run glob and ls in parallel.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/main.go\",\"tool_call_id\":\"call_863d2e4c3c1b490c\",\"role\":\"tool\"},{\"content\":\"\\n- /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/\\n - go.mod\\n - main.go\\n\",\"tool_call_id\":\"call_ca7def41fb593fc5\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
373+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use 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\"},{\"tool_calls\":[{\"id\":\"call_db9a486cd35645f3b90ee531\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"},{\"id\":\"call_76a6b00364c747e69ca63e2e\",\"function\":{\"arguments\":\"{}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to run both tools in parallel - glob to find .go files and ls to list the current directory.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/main.go\",\"tool_call_id\":\"call_db9a486cd35645f3b90ee531\",\"role\":\"tool\"},{\"content\":\"\\n- /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/\\n - go.mod\\n - main.go\\n\",\"tool_call_id\":\"call_76a6b00364c747e69ca63e2e\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
582374 headers:
583375 Accept:
584376 - application/json
@@ -595,85 +387,43 @@ interactions:
595387 content_length: -1
596388 uncompressed: true
597389 body: |+
598− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
599−
600− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
601−
602− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **"},"finish_reason":null}]}
603−
604− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"glob"},"finish_reason":null}]}
605−
606− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
607−
608− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" found"},"finish_reason":null}]}
609−
610− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
611−
612− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
613−
614− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
615−
616− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
617−
618− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
619−
620− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
621−
622− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
623−
624− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
625−
626− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
627−
628− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
629−
630− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}]}
631−
632− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
633−
634− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **"},"finish_reason":null}]}
635−
636− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ls"},"finish_reason":null}]}
637−
638− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
639−
640− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" shows"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
641391
642− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
643393
644− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
645395
646− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" items"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"lob results"},"finish_reason":null}]}
647397
648− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**: Found"},"finish_reason":null}]}
649399
650− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" 1 `."},"finish_reason":null}]}
651401
652− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go`"},"finish_reason":null}]}
653403
654− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file: `"},"finish_reason":null}]}
655405
656− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main.go"},"finish_reason":null}]}
657407
658− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n\n**"},"finish_reason":null}]}
659409
660− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Directory"},"finish_reason":null}]}
661411
662− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" listing"},"finish_reason":null}]}
663413
664− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**: Contains"},"finish_reason":null}]}
665415
666− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `go"},"finish_reason":null}]}
667417
668− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
669419
670− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` and `main"},"finish_reason":null}]}
671421
672− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go`"},"finish_reason":null}]}
673423
674− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
424+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
675425
676− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":73,"completion_tokens":39,"total_tokens":8287,"prompt_tokens_details":{"cached_tokens":8175},"cost":{"usd":0.00027380000000000004,"hypercredits":0.005476000000000001},"remaining":{"hypercredits":0}}}
426+ data: {"id":"chatcmpl-48130e9f88db9c4a09fc17b0","object":"chat.completion.chunk","created":1778597435,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7834,"completion_tokens":33,"total_tokens":7867,"completion_tokens_details":{"reasoning_tokens":32}}}
677427
678428 data: [DONE]
679429
@@ -682,4 +432,4 @@ interactions:
682432 - text/event-stream
683433 status: 200 OK
684434 code: 200
685− duration: 1.056707666s
435+ duration: 3.926874583s
internal/agent/testdata/TestCoderAgent/glm-5.1/read_a_file.yaml+218−166
@@ -25,149 +25,231 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Read"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Read"},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mod"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mod"},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"think"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c"},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003e\n\n"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"think"},"finish_reason":null}]}
7171
72− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003c/"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003e\n\n"},"finish_reason":null}]}
7373
74− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"think"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003c/"},"finish_reason":null}]}
7575
76− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003e\""},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"think"},"finish_reason":null}]}
7777
78− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" They"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003e\""},"finish_reason":null}]}
7979
80− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" want"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
8181
82− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" we"},"finish_reason":null}]}
8383
84− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
8585
86− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
8787
88− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
8989
90− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
9191
92− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
9393
94− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
9595
96− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
9797
98− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
9999
100− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" this"},"finish_reason":null}]}
101101
102− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
103103
104− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
105105
106− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" It's"},"finish_reason":null}]}
107107
108− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
109109
110− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Read"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" brief"},"finish_reason":null}]}
111111
112− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" request"},"finish_reason":null}]}
113113
114− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
115115
116− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mod"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
117117
118− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Read"},"finish_reason":null}]}
119119
120− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
121121
122− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
123123
124− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mod"},"finish_reason":null}]}
125125
126− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
127127
128− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
129129
130− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Reading"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
131131
132− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
133133
134− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
135135
136− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
137137
138− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Reading"},"finish_reason":null}]}
139139
140− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
141141
142− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
143143
144− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
145145
146− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
147147
148− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
149149
150− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
151151
152− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
153153
154− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" good"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
155155
156− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
157157
158− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Reading"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
159159
160− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
161161
162− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" go"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
163163
164− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
165165
166− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
167167
168− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
168+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
169169
170− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":208,"completion_tokens":79,"total_tokens":287,"completion_tokens_details":{"reasoning_tokens":65},"cost":{"usd":0.00011587200000000002,"hypercredits":0.00231744},"remaining":{"hypercredits":0}}}
170+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
171+
172+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
173+
174+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
175+
176+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
177+
178+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
179+
180+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
181+
182+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
183+
184+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
185+
186+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
187+
188+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
189+
190+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
191+
192+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Provide"},"finish_reason":null}]}
193+
194+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
195+
196+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
197+
198+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Let's"},"finish_reason":null}]}
199+
200+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
201+
202+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
203+
204+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
205+
206+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Reading"},"finish_reason":null}]}
207+
208+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
209+
210+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
211+
212+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
213+
214+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
215+
216+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
217+
218+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
219+
220+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" about"},"finish_reason":null}]}
221+
222+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
223+
224+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
225+
226+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
227+
228+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
229+
230+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
231+
232+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
233+
234+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
235+
236+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
237+
238+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
239+
240+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Reading"},"finish_reason":null}]}
241+
242+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
243+
244+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" go"},"finish_reason":null}]}
245+
246+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
247+
248+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
249+
250+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
251+
252+ data: {"id":"chatcmpl-149388c529739f52423462e3","object":"chat.completion.chunk","created":1778597270,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":15,"completion_tokens":120,"total_tokens":327,"prompt_tokens_details":{"cached_tokens":192}}}
171253
172254 data: [DONE]
173255
@@ -176,15 +258,15 @@ interactions:
176258 - text/event-stream
177259 status: 200 OK
178260 code: 200
179− duration: 466.702584ms
261+ duration: 572.800625ms
180262- id: 1
181263 request:
182264 proto: HTTP/1.1
183265 proto_major: 1
184266 proto_minor: 1
185− content_length: 35595
267+ content_length: 33607
186268 host: ""
187− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
269+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
188270 headers:
189271 Accept:
190272 - application/json
@@ -201,47 +283,43 @@ interactions:
201283 content_length: -1
202284 uncompressed: true
203285 body: |+
204− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
205−
206− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
207287
208− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
209289
210− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
211291
212− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants me"},"finish_reason":null}]}
213293
214− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to read a"},"finish_reason":null}]}
215295
216− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" go.mod"},"finish_reason":null}]}
217297
218− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file. Let"},"finish_reason":null}]}
219299
220− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me find"},"finish_reason":null}]}
221301
222− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it first"},"finish_reason":null}]}
223303
224− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
225305
226− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_6656c17dd769fe3b","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_6ad0b3d8cf1f49289b0f5fad","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
227307
228− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\": \""}}]},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
229309
230− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"**"}}]},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
231311
232− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
233313
234− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"go"}}]},"finish_reason":null}]}
235315
236− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".mod"}}]},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".mod\""}}]},"finish_reason":null}]}
237317
238− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
239319
240− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
241321
242− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
243−
244− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":671,"completion_tokens":24,"total_tokens":8174,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":10},"cost":{"usd":0.001089,"hypercredits":0.021779999999999997},"remaining":{"hypercredits":0}}}
322+ data: {"id":"chatcmpl-793393c6b5de48c25ff680a6","object":"chat.completion.chunk","created":1778597276,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":696,"completion_tokens":29,"total_tokens":7765,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":17}}}
245323
246324 data: [DONE]
247325
@@ -250,15 +328,15 @@ interactions:
250328 - text/event-stream
251329 status: 200 OK
252330 code: 200
253− duration: 1.034875875s
331+ duration: 5.728420166s
254332- id: 2
255333 request:
256334 proto: HTTP/1.1
257335 proto_major: 1
258336 proto_minor: 1
259− content_length: 35935
337+ content_length: 33985
260338 host: ""
261− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6656c17dd769fe3b\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to read a go.mod file.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"call_6656c17dd769fe3b\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
339+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6ad0b3d8cf1f49289b0f5fad\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to read a go.mod file. Let me find it first.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"call_6ad0b3d8cf1f49289b0f5fad\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
262340 headers:
263341 Accept:
264342 - application/json
@@ -275,55 +353,43 @@ interactions:
275353 content_length: -1
276354 uncompressed: true
277355 body: |+
278− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
279−
280− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_a01214c04522706d","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
281−
282− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
283−
284− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
285−
286− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
287−
288− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
289−
290− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
291357
292− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_98e2e7b24a214ad685f4a3e5","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
293359
294− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
295361
296− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": "}}]},"finish_reason":null}]}
297363
298− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp/c"}}]},"finish_reason":null}]}
299365
300− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
301367
302− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
303369
304− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
305371
306− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
307373
308− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent/g"}}]},"finish_reason":null}]}
309375
310− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/read"}}]},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm-"}}]},"finish_reason":null}]}
311377
312− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5.1/read"}}]},"finish_reason":null}]}
313379
314− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
315381
316− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/go"}}]},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
317383
318− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".mod"}}]},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/go.mod"}}]},"finish_reason":null}]}
319385
320− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
321387
322− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
323389
324− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
390+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
325391
326− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":37,"completion_tokens":29,"total_tokens":8215,"prompt_tokens_details":{"cached_tokens":8149},"cost":{"usd":0.00017940000000000002,"hypercredits":0.0035880000000000005},"remaining":{"hypercredits":0}}}
392+ data: {"id":"chatcmpl-bea5d9f86de0fcb4874f50d8","object":"chat.completion.chunk","created":1778597279,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7770,"completion_tokens":29,"total_tokens":7799,"completion_tokens_details":{"reasoning_tokens":28}}}
327393
328394 data: [DONE]
329395
@@ -332,15 +398,15 @@ interactions:
332398 - text/event-stream
333399 status: 200 OK
334400 code: 200
335− duration: 965.956083ms
401+ duration: 2.767550125s
336402- id: 3
337403 request:
338404 proto: HTTP/1.1
339405 proto_major: 1
340406 proto_minor: 1
341− content_length: 36321
407+ content_length: 34378
342408 host: ""
343− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6656c17dd769fe3b\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to read a go.mod file.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"call_6656c17dd769fe3b\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_a01214c04522706d\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|module example.com/testproject\\n 2|\\n 3|go 1.23\\n 4|\\n</file>\\n\",\"tool_call_id\":\"call_a01214c04522706d\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
409+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6ad0b3d8cf1f49289b0f5fad\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to read a go.mod file. Let me find it first.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"call_6ad0b3d8cf1f49289b0f5fad\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_98e2e7b24a214ad685f4a3e5\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|module example.com/testproject\\n 2|\\n 3|go 1.23\\n</file>\\n\",\"tool_call_id\":\"call_98e2e7b24a214ad685f4a3e5\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
344410 headers:
345411 Accept:
346412 - application/json
@@ -357,51 +423,37 @@ interactions:
357423 content_length: -1
358424 uncompressed: true
359425 body: |+
360− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
361−
362− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null}]}
363−
364− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" module"},"finish_reason":null}]}
365−
366− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" is"},"finish_reason":null}]}
367−
368− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
369−
370− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
371−
372− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".com"},"finish_reason":null}]}
373−
374− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/test"},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
375427
376− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"project"},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"A"},"finish_reason":null}]}
377429
378− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" minimal"},"finish_reason":null}]}
379431
380− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go module file"},"finish_reason":null}]}
381433
382− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n\n- **Module"},"finish_reason":null}]}
383435
384− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**: `"},"finish_reason":null}]}
385437
386− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example.com/test"},"finish_reason":null}]}
387439
388− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"project"},"finish_reason":null}]}
389441
390− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"23"},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n- **"},"finish_reason":null}]}
391443
392− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Go version"},"finish_reason":null}]}
393445
394− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**: "},"finish_reason":null}]}
395447
396− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" no"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1.23"},"finish_reason":null}]}
397449
398− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" dependencies"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"\n- No"},"finish_reason":null}]}
399451
400− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" dependencies"},"finish_reason":null}]}
401453
402− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
454+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
403455
404− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":8210,"completion_tokens":22,"total_tokens":8275,"prompt_tokens_details":{"cached_tokens":43},"cost":{"usd":0.0115908,"hypercredits":0.231816},"remaining":{"hypercredits":0}}}
456+ data: {"id":"chatcmpl-76b9cbfc7a37c1e9614e4222","object":"chat.completion.chunk","created":1778597282,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7833,"completion_tokens":31,"total_tokens":7864,"completion_tokens_details":{"reasoning_tokens":30}}}
405457
406458 data: [DONE]
407459
@@ -410,4 +462,4 @@ interactions:
410462 - text/event-stream
411463 status: 200 OK
412464 code: 200
413− duration: 1.002548458s
465+ duration: 2.132418458s
internal/agent/testdata/TestCoderAgent/glm-5.1/simple_test.yaml+64−154
@@ -25,151 +25,103 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" we"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" we"},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
7171
72− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
7373
74− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
7575
76− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
7777
78− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
7979
80− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
8181
82− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
8383
84− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
8585
86− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Language"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
8787
88− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
8989
90− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
9191
92− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
9393
94− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
9595
96− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
9797
98− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
9999
100− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
101101
102− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
103103
104− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
105105
106− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
107107
108− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
109109
110− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
111111
112− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
113113
114− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
115115
116− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
117117
118− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
119119
120− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
121121
122− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
123123
124− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
125−
126− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
127−
128− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
129−
130− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
131−
132− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
133−
134− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Greeting"},"finish_reason":null}]}
135−
136− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
137−
138− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
139−
140− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
141−
142− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
143−
144− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
145−
146− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
147−
148− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
149−
150− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
151−
152− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
153−
154− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
155−
156− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
157−
158− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
159−
160− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
161−
162− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
163−
164− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Greeting"},"finish_reason":null}]}
165−
166− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
167−
168− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Greeting"},"finish_reason":null}]}
169−
170− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
171−
172− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":146,"completion_tokens":77,"total_tokens":287,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.0001,"hypercredits":0.002},"remaining":{"hypercredits":0}}}
124+ data: {"id":"chatcmpl-cb802de561d11e076f0b6821","object":"chat.completion.chunk","created":1778597267,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":140,"completion_tokens":56,"total_tokens":260,"prompt_tokens_details":{"cached_tokens":64}}}
173125
174126 data: [DONE]
175127
@@ -178,15 +130,15 @@ interactions:
178130 - text/event-stream
179131 status: 200 OK
180132 code: 200
181− duration: 878.40675ms
133+ duration: 652.235333ms
182134- id: 1
183135 request:
184136 proto: HTTP/1.1
185137 proto_major: 1
186138 proto_minor: 1
187− content_length: 35585
139+ content_length: 33597
188140 host: ""
189− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/simple_test\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Hello\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
141+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/simple_test\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Hello\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
190142 headers:
191143 Accept:
192144 - application/json
@@ -203,69 +155,27 @@ interactions:
203155 content_length: -1
204156 uncompressed: true
205157 body: |+
206− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
207−
208− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
209−
210− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
211−
212− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
213−
214− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" said"},"finish_reason":null}]}
215−
216− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
217−
218− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
219−
220− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
221−
222− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" This"},"finish_reason":null}]}
223−
224− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
225−
226− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
227−
228− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" simple"},"finish_reason":null}]}
229−
230− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
231−
232− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
233−
234− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" so"},"finish_reason":null}]}
235−
236− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" I"},"finish_reason":null}]}
237−
238− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
239−
240− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" respond"},"finish_reason":null}]}
241−
242− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" conc"},"finish_reason":null}]}
243−
244− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"is"},"finish_reason":null}]}
245−
246− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"ely"},"finish_reason":null}]}
247−
248− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-f5d456fac6115b04b7a65227","object":"chat.completion.chunk","created":1778597269,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
249159
250− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hi"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-f5d456fac6115b04b7a65227","object":"chat.completion.chunk","created":1778597269,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
251161
252− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-f5d456fac6115b04b7a65227","object":"chat.completion.chunk","created":1778597269,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
253163
254− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" How"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-f5d456fac6115b04b7a65227","object":"chat.completion.chunk","created":1778597269,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" said hello"},"finish_reason":null}]}
255165
256− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-f5d456fac6115b04b7a65227","object":"chat.completion.chunk","created":1778597269,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":". I"},"finish_reason":null}]}
257167
258− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" I"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-f5d456fac6115b04b7a65227","object":"chat.completion.chunk","created":1778597269,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" should respond"},"finish_reason":null}]}
259169
260− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" help"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-f5d456fac6115b04b7a65227","object":"chat.completion.chunk","created":1778597269,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" briefly."},"finish_reason":null}]}
261171
262− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-f5d456fac6115b04b7a65227","object":"chat.completion.chunk","created":1778597269,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
263173
264− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"?"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-f5d456fac6115b04b7a65227","object":"chat.completion.chunk","created":1778597269,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
265175
266− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
176+ data: {"id":"chatcmpl-f5d456fac6115b04b7a65227","object":"chat.completion.chunk","created":1778597269,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
267177
268− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":8103,"completion_tokens":31,"total_tokens":8177,"prompt_tokens_details":{"cached_tokens":43},"completion_tokens_details":{"reasoning_tokens":22},"cost":{"usd":0.011577399999999998,"hypercredits":0.23154799999999995},"remaining":{"hypercredits":0}}}
178+ data: {"id":"chatcmpl-f5d456fac6115b04b7a65227","object":"chat.completion.chunk","created":1778597269,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7732,"completion_tokens":14,"total_tokens":7746,"completion_tokens_details":{"reasoning_tokens":10}}}
269179
270180 data: [DONE]
271181
@@ -274,4 +184,4 @@ interactions:
274184 - text/event-stream
275185 status: 200 OK
276186 code: 200
277− duration: 1.659991334s
187+ duration: 3.107841708s
internal/agent/testdata/TestCoderAgent/glm-5.1/sourcegraph_tool.yaml+506−920
@@ -2,64 +2,6 @@
22version: 2
33interactions:
44- id: 0
5− request:
6− proto: HTTP/1.1
7− proto_major: 1
8− proto_minor: 1
9− content_length: 35645
10− host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/sourcegraph_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use sourcegraph to search for 'func main' in Go repositories\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12− headers:
13− Accept:
14− - application/json
15− Content-Type:
16− - application/json
17− User-Agent:
18− - Charm-Crush/devel (https://charm.land/crush)
19− url: https://hyper.charm.land/v1/chat/completions
20− method: POST
21− response:
22− proto: HTTP/2.0
23− proto_major: 2
24− proto_minor: 0
25− content_length: -1
26− uncompressed: true
27− body: |+
28− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
30− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_ed4abf0a0b9be3a4","type":"function","index":0,"function":{"name":"sourcegraph","arguments":""}}]},"finish_reason":null}]}
31−
32− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"count\": 20"}}]},"finish_reason":null}]}
33−
34− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"query\": \""}}]},"finish_reason":null}]}
35−
36− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"func"}}]},"finish_reason":null}]}
37−
38− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" main"}}]},"finish_reason":null}]}
39−
40− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" lang"}}]},"finish_reason":null}]}
41−
42− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}]}
43−
44− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Go"}}]},"finish_reason":null}]}
45−
46− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
47−
48− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
49−
50− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
51−
52− data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":680,"completion_tokens":22,"total_tokens":8181,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0010488,"hypercredits":0.020975999999999998},"remaining":{"hypercredits":0}}}
53−
54− data: [DONE]
55−
56− headers:
57− Content-Type:
58− - text/event-stream
59− status: 200 OK
60− code: 200
61− duration: 1.783952917s
62−- id: 1
635 request:
646 proto: HTTP/1.1
657 proto_major: 1
@@ -83,799 +25,595 @@ interactions:
8325 content_length: -1
8426 uncompressed: true
8527 body: |+
86− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
87−
88− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
89−
90− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
91−
92− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
93−
94− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
95−
96− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
97−
98− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
99−
100− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
101−
102− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
103−
104− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
105−
106− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
107−
108− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
109−
110− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
111−
112− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" source"},"finish_reason":null}]}
113−
114− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
115−
116− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
117−
118− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
119−
120− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
121−
122− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
123−
124− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
125−
126− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
127−
128− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
129−
130− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
131−
132− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
133−
134− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repositories"},"finish_reason":null}]}
135−
136− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
137−
138− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
139−
140− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
141−
142− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
143−
144− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
145−
146− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
147−
148− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
149−
150− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
151−
152− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
153−
154− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
155−
156− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
157−
158− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
159−
160− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
161−
162− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
163−
164− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
165−
166− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
167−
168− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
169−
170− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
171−
172− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
173−
174− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
185−
186− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
187−
188− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
189−
190− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
191−
192− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
193−
194− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
195−
196− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
197−
198− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Searching"},"finish_reason":null}]}
199−
200− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
201−
202− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
203−
204− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
205−
206− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
207−
208− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
209−
210− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
211−
212− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
213−
214− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
215−
216− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
217−
218− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
219−
220− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Count"},"finish_reason":null}]}
221−
222− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
223−
224− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
225−
226− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
227−
228− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
229−
230− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
231−
232− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
233−
234− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Searching"},"finish_reason":null}]}
235−
236− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
237−
238− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
239−
240− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
241−
242− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
243−
244− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
245−
246− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
247−
248− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
249−
250− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
251−
252− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
253−
254− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
255−
256− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"S"},"finish_reason":null}]}
257−
258− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
259−
260− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
261−
262− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
263−
264− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
265−
266− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
26729
268− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
26931
270− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" system"},"finish_reason":null}]}
27133
272− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
27335
274− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" we"},"finish_reason":null}]}
27537
276− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" must"},"finish_reason":null}]}
27739
278− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" generate"},"finish_reason":null}]}
27941
280− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
28143
282− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
28345
284− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
28547
286− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" based"},"finish_reason":null}]}
28749
288− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" on"},"finish_reason":null}]}
28951
290− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
29153
292− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
29355
294− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
29557
296− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
29759
298− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
29961
300− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
30163
302− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
30365
304− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
30567
306− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
30769
308− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
30971
310− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
31173
312− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
31375
314− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
31577
316− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
31779
318− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
31981
320− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
32183
322− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
32385
324− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
32587
326− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
32789
328− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
32991
330− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" source"},"finish_reason":null}]}
33193
332− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
33395
334− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
33597
336− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
33799
338− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
339101
340− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
341103
342− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
343105
344− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
345107
346− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
347109
348− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
349111
350− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
351113
352− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repositories"},"finish_reason":null}]}
353115
354− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
355117
356− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" We"},"finish_reason":null}]}
357119
358− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
359121
360− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
361123
362− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
363125
364− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
365127
366− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
367129
368− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
369131
370− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
371133
372− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
373135
374− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
375137
376− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
377139
378− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Not"},"finish_reason":null}]}
379141
380− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
381143
382− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
383145
384− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
385147
386− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
387149
388− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" G"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
389151
390− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
391153
392− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
393155
394− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
395157
396− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
397159
398− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
399161
400− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
401163
402− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Search"},"finish_reason":null}]}
403165
404− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
405167
406− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
407169
408− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
409171
410− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
411173
412− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
413175
414− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
415177
416− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
417179
418− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
419181
420− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
421183
422− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
423185
424− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That"},"finish_reason":null}]}
425187
426− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
427189
428− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
429191
430− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
431193
432− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
433195
434− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
435197
436− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
437199
438− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
439201
440− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
441203
442− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
443205
444− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
445207
446− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Search"},"finish_reason":null}]}
447209
448− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
449211
450− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
451213
452− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
453215
454− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
455217
456− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" S"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
457219
458− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
459221
460− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
461223
462− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
463225
464− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
465227
466− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
467229
468− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
469231
470− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
471233
472− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
473235
474− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" S"},"finish_reason":null}]}
475237
476− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
477239
478− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
479241
480− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
481243
482− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
483245
484− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
485247
486− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
487249
488− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
489251
490− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
491253
492− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
493255
494− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
495257
496− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
497259
498− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"52"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
499261
500− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
501263
502− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
503265
504− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
505267
506− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"52"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
507269
508− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
509271
510− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
511273
512− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" exceeds"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
513275
514− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
515277
516− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
517279
518− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
519281
520− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
521283
522− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
523285
524− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
525287
526− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
527289
528− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
529291
530− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
531293
532− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" shorten"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
533295
534− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
535297
536− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
537299
538− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Search"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
539301
540− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
541303
542− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
543305
544− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
545307
546− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
547309
548− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
549311
550− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
551313
552− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
553315
554− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
555317
556− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
557319
558− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
559321
560− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
561323
562− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
563325
564− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
565327
566− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Search"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
567329
568− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
569331
570− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
571333
572− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
573335
574− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
575337
576− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
577339
578− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
579341
580− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
581343
582− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
583345
584− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
585347
586− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
587349
588− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Count"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
589351
590− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
591353
592− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" S"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
593355
594− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" G"},"finish_reason":null}]}
595357
596− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
597359
598− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
599361
600− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
601363
602− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
603365
604− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
605367
606− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
607369
608− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
609371
610− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
611373
612− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
613375
614− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
615377
616− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
617379
618− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
619381
620− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
621383
622− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
623385
624− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
625387
626− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
627389
628− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
629391
630− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
631393
632− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
633395
634− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
635397
636− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
637399
638− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
639401
640− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
641403
642− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
643405
644− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
645407
646− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
647409
648− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
649411
650− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
651413
652− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
653415
654− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
655417
656− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
657419
658− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
659421
660− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
661423
662− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" S"},"finish_reason":null}]}
663425
664− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
665427
666− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
667429
668− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
669431
670− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
671433
672− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
673435
674− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
675437
676− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
677439
678− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
679441
680− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
681443
682− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
683445
684− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
685447
686− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
687449
688− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
689451
690− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
691453
692− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
693455
694− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
695457
696− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
697459
698− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
699461
700− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
701463
702− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
703465
704− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
705467
706− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
707469
708− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" G"},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
709471
710− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
711473
712− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
713475
714− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
715477
716− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
717479
718− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
719481
720− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
482+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" (\u003c"},"finish_reason":null}]}
721483
722− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
723485
724− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
486+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
725487
726− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
488+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
727489
728− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
490+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
729491
730− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
492+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
731493
732− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
494+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
733495
734− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
496+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
735497
736− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
498+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
737499
738− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
500+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
739501
740− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
502+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
741503
742− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
504+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
743505
744− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
506+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
745507
746− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
508+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
747509
748− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
510+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
749511
750− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
512+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
751513
752− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
514+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Search"},"finish_reason":null}]}
753515
754− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
516+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
755517
756− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
518+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" func"},"finish_reason":null}]}
757519
758− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
520+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
759521
760− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
522+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
761523
762− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
524+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
763525
764− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
526+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" repos"},"finish_reason":null}]}
765527
766− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
528+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
767529
768− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
530+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Source"},"finish_reason":null}]}
769531
770− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
532+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"graph"},"finish_reason":null}]}
771533
772− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
773535
774− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
536+ data: {"id":"chatcmpl-35bd80f4ca07eeaee979b148","object":"chat.completion.chunk","created":1778597398,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":152,"completion_tokens":262,"total_tokens":478,"prompt_tokens_details":{"cached_tokens":64}}}
775537
776− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
777−
778− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
779−
780− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" S"},"finish_reason":null}]}
781−
782− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
783−
784− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
785−
786− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
787−
788− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
789−
790− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
791−
792− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
793−
794− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
795−
796− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
797−
798− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
799−
800− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
801−
802− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
803−
804− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
805−
806− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
807−
808− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
809−
810− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
811−
812− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
813−
814− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
815−
816− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
817−
818− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
819−
820− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
821−
822− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
823−
824− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
825−
826− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Exactly"},"finish_reason":null}]}
827−
828− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
829−
830− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
538+ data: [DONE]
831539
832− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
540+ headers:
541+ Content-Type:
542+ - text/event-stream
543+ status: 200 OK
544+ code: 200
545+ duration: 620.468833ms
546+- id: 1
547+ request:
548+ proto: HTTP/1.1
549+ proto_major: 1
550+ proto_minor: 1
551+ content_length: 33657
552+ host: ""
553+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/sourcegraph_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use sourcegraph to search for 'func main' in Go repositories\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
554+ headers:
555+ Accept:
556+ - application/json
557+ Content-Type:
558+ - application/json
559+ User-Agent:
560+ - Charm-Crush/devel (https://charm.land/crush)
561+ url: https://hyper.charm.land/v1/chat/completions
562+ method: POST
563+ response:
564+ proto: HTTP/2.0
565+ proto_major: 2
566+ proto_minor: 0
567+ content_length: -1
568+ uncompressed: true
569+ body: |+
570+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
833571
834− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
572+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
835573
836− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
574+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
837575
838− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
576+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants me to"},"finish_reason":null}]}
839577
840− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
578+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" use the"},"finish_reason":null}]}
841579
842− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
580+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Sourcegraph"},"finish_reason":null}]}
843581
844− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
582+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool to"},"finish_reason":null}]}
845583
846− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
584+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" search for '"},"finish_reason":null}]}
847585
848− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
586+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
849587
850− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
588+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" main' in"},"finish_reason":null}]}
851589
852− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
590+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Go repositories"},"finish_reason":null}]}
853591
854− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
592+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
855593
856− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Search"},"finish_reason":null}]}
594+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_3377a986e2324af1a0d22066","type":"function","index":0,"function":{"name":"sourcegraph","arguments":""}}]},"finish_reason":null}]}
857595
858− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
596+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
859597
860− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" func"},"finish_reason":null}]}
598+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
861599
862− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
600+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"count\": "}}]},"finish_reason":null}]}
863601
864− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"20"}}]},"finish_reason":null}]}
865603
866− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
604+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"query\": "}}]},"finish_reason":null}]}
867605
868− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" repos"},"finish_reason":null}]}
606+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"func main"}}]},"finish_reason":null}]}
869607
870− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
608+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" lang:Go"}}]},"finish_reason":null}]}
871609
872− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Source"},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
873611
874− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"graph"},"finish_reason":null}]}
612+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
875613
876− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
614+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
877615
878− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":201,"completion_tokens":404,"total_tokens":605,"completion_tokens_details":{"reasoning_tokens":290},"cost":{"usd":0.00042379600000000005,"hypercredits":0.00847592},"remaining":{"hypercredits":0}}}
616+ data: {"id":"chatcmpl-adbd389de8021f205d5cc62b","object":"chat.completion.chunk","created":1778597402,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7745,"completion_tokens":43,"total_tokens":7788,"completion_tokens_details":{"reasoning_tokens":21}}}
879617
880618 data: [DONE]
881619
@@ -884,7 +622,7 @@ interactions:
884622 - text/event-stream
885623 status: 200 OK
886624 code: 200
887− duration: 1.181730083s
625+ duration: 3.692503542s
888626- id: 2
889627 request:
890628 proto: HTTP/1.1
@@ -906,21 +644,21 @@ interactions:
906644 proto_minor: 0
907645 content_length: -1
908646 uncompressed: true
909− body: '{"data":{"search":{"results":{"matchCount":30,"limitHit":true,"resultCount":30,"approximateResultCount":"30+","missing":[],"timedout":[],"indexUnavailable":false,"results":[{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"14-Logging/03-LogToFile/main.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/14-Logging/03-LogToFile/main.go","content":"package main\n\nimport (\n\t\"logToFile/core\"\n\n\t\"github.com/pkg/errors\"\n)\n\ntype myStruct struct {\n\tName string\n}\n\nvar logger = core.NewFileLogger()\n\nfunc main() {\n\n\tlogger.Print(\"test\")\n\tmyStruct := myStruct{Name: \"test\"}\n\tlogger.Info().Interface(\"Body\", myStruct).Str(\"Category\", \"Search\").\n\t\tInt(\"DurationTime\", 80).\n\t\tMsg(\"Searching for a thing\")\n\n\terr := errors.New(\"this is an error\")\n\n\tlogger.Error().Err(err).Msg(\"Error occurred\")\n\n\terr = func3()\n\tif err != nil {\n\n\t\tlogger.Error().Stack().Err(err).Msg(\"Error occurred (func3 error)\")\n\t}\n}\n\nfunc func1() error {\n\treturn errors.New(\"this is an error (func1)\")\n}\n\nfunc func2() error {\n\terr := func1()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc func3() error {\n\terr := func2()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// trace\n// debug\n// info\n// warn\n// error\n// fatal(critical)\n// panic\n"},"lineMatches":[{"preview":"func main() {","lineNumber":14,"offsetAndLengths":[[0,9]]},{"preview":"func func1() error {","lineNumber":33,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\treturn errors.New(\"this is an error (func1)\")","lineNumber":34,"offsetAndLengths":[[38,4]]},{"preview":"func func2() error {","lineNumber":37,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\terr := func1()","lineNumber":38,"offsetAndLengths":[[8,4]]},{"preview":"func func3() error {","lineNumber":45,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\terr := func2()","lineNumber":46,"offsetAndLengths":[[8,4]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"\terr = func3()","lineNumber":26,"offsetAndLengths":[[7,4]]},{"preview":"\t\tlogger.Error().Stack().Err(err).Msg(\"Error occurred (func3 error)\")","lineNumber":29,"offsetAndLengths":[[55,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"02-Introduction/03-ProjectStructure/helloWorldInFunc.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/02-Introduction/03-ProjectStructure/helloWorldInFunc.go","content":"package main\n\nimport \"fmt\"\n\nfunc main() {\n\thello()\n}\n\nfunc hello() {\n\tfmt.Println(\"Hello, World!\")\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":4,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"func hello() {","lineNumber":8,"offsetAndLengths":[[0,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"08-Function/05-Anonymous/example2.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/05-Anonymous/example2.go","content":"package main\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n)\n\nfunc main() {\n\n\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\n\n\tfmt.Printf(\"%v\\n\", numbers)\n\n\tsortingFunc := func(i, j int) bool {\n\t\treturn numbers[i] \u003c numbers[j]\n\t}\n\tsort.Slice(numbers, sortingFunc)\n\n\tfmt.Printf(\"%v\\n\", numbers)\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":7,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"\tsortingFunc := func(i, j int) bool {","lineNumber":13,"offsetAndLengths":[[8,4],[16,4]]},{"preview":"\tsort.Slice(numbers, sortingFunc)","lineNumber":16,"offsetAndLengths":[[28,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"15-Concurrency/03-Intro/main.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/15-Concurrency/03-Intro/main.go","content":"package main\n\nimport (\n\t\"runtime\"\n\t\"time\"\n)\n\nfunc main() {\n\truntime.GOMAXPROCS(runtime.NumCPU())\n\tvalue := 0\n\tgo task1() \n\tgo task2()\n\tgo task3()\n\n\tgo func() {\n\t\t// lock\n\t\tvalue++ //1\n\t\t//unlock\n\t}()\n\tgo func() {\n\t\t// lock\n\t\tvalue+=2 // 3\n\t\t//unlock\n\t}()\n\tgo func() {\n\t\t// lock\n\t\tvalue+=3 // 6\n\t\t//unlock\n\t}()\n\n\tprintln(value)\n\n\ttime.Sleep(time.Second)\n}\n\nfunc task1() {\n\tprintln(\"task1\")\n}\n\nfunc task2() {\n\tprintln(\"task2\")\n}\n\nfunc task3() {\n\tprintln(\"task3\")\n}\n\n// race condition\n//await"},"lineMatches":[{"preview":"func main() {","lineNumber":7,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"\tgo func() {","lineNumber":14,"offsetAndLengths":[[4,4]]},{"preview":"\tgo func() {","lineNumber":19,"offsetAndLengths":[[4,4]]},{"preview":"\tgo func() {","lineNumber":24,"offsetAndLengths":[[4,4]]},{"preview":"func task1() {","lineNumber":35,"offsetAndLengths":[[0,4]]},{"preview":"func task2() {","lineNumber":39,"offsetAndLengths":[[0,4]]},{"preview":"func task3() {","lineNumber":43,"offsetAndLengths":[[0,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"08-Function/04-Variadic/example2.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/04-Variadic/example2.go","content":"package main\n\nimport \"fmt\"\n\nfunc main() {\n\tPrintLog(\"Ali\", 1, \"Reza\", 3, \"Error\", 5, 6, \"Info\", 8, 9, false)\n\n}\n\nfunc PrintLog(logs ...interface{}) {\n\tfor i, item := range logs {\n\t\tfmt.Printf(\"%d: %v\\n\", i, item)\n\t}\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":4,"offsetAndLengths":[[0,9]]}]}]}}}}'
647+ body: '{"data":{"search":{"results":{"matchCount":30,"limitHit":true,"resultCount":30,"approximateResultCount":"30+","missing":[],"timedout":[],"indexUnavailable":false,"results":[{"__typename":"FileMatch","repository":{"name":"github.com/GoesToEleven/GolangTraining"},"file":{"path":"14_functions/10_func-expression/01_before-func-expression/main.go","url":"/r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/10_func-expression/01_before-func-expression/main.go","content":"package main\n\nimport \"fmt\"\n\nfunc greeting() {\n\tfmt.Println(\"Hello world!\")\n}\n\nfunc main() {\n\tgreeting()\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":8,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"func greeting() {","lineNumber":4,"offsetAndLengths":[[0,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/GoesToEleven/GolangTraining"},"file":{"path":"14_functions/10_func-expression/02_func-expression/main.go","url":"/r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/10_func-expression/02_func-expression/main.go","content":"package main\n\nimport \"fmt\"\n\nfunc main() {\n\n\tgreeting := func() {\n\t\tfmt.Println(\"Hello world!\")\n\t}\n\n\tgreeting()\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":4,"offsetAndLengths":[[0,9]]},{"preview":"\tgreeting := func() {","lineNumber":6,"offsetAndLengths":[[13,4]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/GoesToEleven/GolangTraining"},"file":{"path":"14_functions/10_func-expression/03_func-expression_shows-type/main.go","url":"/r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/10_func-expression/03_func-expression_shows-type/main.go","content":"package main\n\nimport \"fmt\"\n\nfunc main() {\n\n\tgreeting := func() {\n\t\tfmt.Println(\"Hello world!\")\n\t}\n\n\tgreeting()\n\tfmt.Printf(\"%T\\n\", greeting)\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":4,"offsetAndLengths":[[0,9]]},{"preview":"\tgreeting := func() {","lineNumber":6,"offsetAndLengths":[[13,4]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/GoesToEleven/GolangTraining"},"file":{"path":"14_functions/10_func-expression/04_another-way_func-expression/main.go","url":"/r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/10_func-expression/04_another-way_func-expression/main.go","content":"package main\n\nimport \"fmt\"\n\nfunc makeGreeter() func() string {\n\treturn func() string {\n\t\treturn \"Hello world!\"\n\t}\n}\n\nfunc main() {\n\tgreet := makeGreeter()\n\tfmt.Println(greet())\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":10,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"func makeGreeter() func() string {","lineNumber":4,"offsetAndLengths":[[0,4],[19,4]]},{"preview":"\treturn func() string {","lineNumber":5,"offsetAndLengths":[[8,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/GoesToEleven/GolangTraining"},"file":{"path":"14_functions/10_func-expression/05_another-way_func-expression_shows-type/main.go","url":"/r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/10_func-expression/05_another-way_func-expression_shows-type/main.go","content":"package main\n\nimport \"fmt\"\n\nfunc makeGreeter() func() string {\n\treturn func() string {\n\t\treturn \"Hello world!\"\n\t}\n}\n\nfunc main() {\n\tgreet := makeGreeter()\n\tfmt.Println(greet())\n\tfmt.Printf(\"%T\\n\", greet)\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":10,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"func makeGreeter() func() string {","lineNumber":4,"offsetAndLengths":[[0,4],[19,4]]},{"preview":"\treturn func() string {","lineNumber":5,"offsetAndLengths":[[8,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/GoesToEleven/GolangTraining"},"file":{"path":"14_functions/12_callbacks/01_print-nums/main.go","url":"/r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/12_callbacks/01_print-nums/main.go","content":"package main\n\nimport \"fmt\"\n\nfunc visit(numbers []int, callback func(int)) {\n\tfor _, n := range numbers {\n\t\tcallback(n)\n\t}\n}\n\nfunc main() {\n\tvisit([]int{1, 2, 3, 4}, func(n int) {\n\t\tfmt.Println(n)\n\t})\n}\n\n// callback: passing a func as an argument\n"},"lineMatches":[{"preview":"func main() {","lineNumber":10,"offsetAndLengths":[[0,9]]},{"preview":"\tvisit([]int{1, 2, 3, 4}, func(n int) {","lineNumber":11,"offsetAndLengths":[[26,4]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"func visit(numbers []int, callback func(int)) {","lineNumber":4,"offsetAndLengths":[[0,4],[35,4]]},{"preview":"// callback: passing a func as an argument","lineNumber":16,"offsetAndLengths":[[23,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/GoesToEleven/GolangTraining"},"file":{"path":"14_functions/14_defer/01_no-defer/main.go","url":"/r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/14_defer/01_no-defer/main.go","content":"package main\n\nimport \"fmt\"\n\nfunc hello() {\n\tfmt.Print(\"hello \")\n}\n\nfunc world() {\n\tfmt.Println(\"world\")\n}\n\nfunc main() {\n\tworld()\n\thello()\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":12,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"func hello() {","lineNumber":4,"offsetAndLengths":[[0,4]]},{"preview":"func world() {","lineNumber":8,"offsetAndLengths":[[0,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/GoesToEleven/GolangTraining"},"file":{"path":"14_functions/14_defer/02_with-defer/main.go","url":"/r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/14_defer/02_with-defer/main.go","content":"package main\n\nimport \"fmt\"\n\nfunc hello() {\n\tfmt.Print(\"hello \")\n}\n\nfunc world() {\n\tfmt.Println(\"world\")\n}\n\nfunc main() {\n\tdefer world()\n\thello()\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":12,"offsetAndLengths":[[0,9]]}]}]}}}}'
910648 headers:
911649 Content-Type:
912650 - application/json
913651 status: 200 OK
914652 code: 200
915− duration: 2.192433792s
653+ duration: 2.251490458s
916654- id: 3
917655 request:
918656 proto: HTTP/1.1
919657 proto_major: 1
920658 proto_minor: 1
921− content_length: 46395
659+ content_length: 42734
922660 host: ""
923− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/sourcegraph_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use sourcegraph to search for 'func main' in Go repositories\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_ed4abf0a0b9be3a4\",\"function\":{\"arguments\":\"{\\\"count\\\": 20, \\\"query\\\": \\\"func main lang:Go\\\"}\",\"name\":\"sourcegraph\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"# Sourcegraph Search Results\\n\\nFound 30 matches across 30 results\\n(Result limit reached, try a more specific query)\\n\\n## Result 1: github.com/naeemaei/Golang-Tutorial/14-Logging/03-LogToFile/main.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/14-Logging/03-LogToFile/main.go\\n\\n```\\n4| \\t\\\"logToFile/core\\\"\\n5| \\n6| \\t\\\"github.com/pkg/errors\\\"\\n7| )\\n8| \\n9| type myStruct struct {\\n10| \\tName string\\n11| }\\n12| \\n13| var logger = core.NewFileLogger()\\n14| func main() {\\n15| func main() {\\n16| \\n17| \\tlogger.Print(\\\"test\\\")\\n18| \\tmyStruct := myStruct{Name: \\\"test\\\"}\\n19| \\tlogger.Info().Interface(\\\"Body\\\", myStruct).Str(\\\"Category\\\", \\\"Search\\\").\\n20| \\t\\tInt(\\\"DurationTime\\\", 80).\\n21| \\t\\tMsg(\\\"Searching for a thing\\\")\\n22| \\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n```\\n\\n```\\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| func func1() error {\\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n```\\n\\n```\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n```\\n\\n```\\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| func func2() error {\\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| \\n46| func func3() error {\\n47| \\terr := func2()\\n```\\n\\n```\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| \\terr := func1()\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| \\n46| func func3() error {\\n47| \\terr := func2()\\n48| \\tif err != nil {\\n```\\n\\n```\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| func func3() error {\\n46| func func3() error {\\n47| \\terr := func2()\\n48| \\tif err != nil {\\n49| \\t\\treturn err\\n50| \\t}\\n51| \\treturn nil\\n52| }\\n53| \\n54| // trace\\n55| // debug\\n```\\n\\n```\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| \\n46| \\terr := func2()\\n47| \\terr := func2()\\n48| \\tif err != nil {\\n49| \\t\\treturn err\\n50| \\t}\\n51| \\treturn nil\\n52| }\\n53| \\n54| // trace\\n55| // debug\\n56| // info\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"logToFile/core\\\"\\n5| \\n6| \\t\\\"github.com/pkg/errors\\\"\\n7| )\\n8| \\n9| type myStruct struct {\\n10| \\tName string\\n```\\n\\n```\\n16| \\n17| \\tlogger.Print(\\\"test\\\")\\n18| \\tmyStruct := myStruct{Name: \\\"test\\\"}\\n19| \\tlogger.Info().Interface(\\\"Body\\\", myStruct).Str(\\\"Category\\\", \\\"Search\\\").\\n20| \\t\\tInt(\\\"DurationTime\\\", 80).\\n21| \\t\\tMsg(\\\"Searching for a thing\\\")\\n22| \\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\terr = func3()\\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n```\\n\\n```\\n19| \\tlogger.Info().Interface(\\\"Body\\\", myStruct).Str(\\\"Category\\\", \\\"Search\\\").\\n20| \\t\\tInt(\\\"DurationTime\\\", 80).\\n21| \\t\\tMsg(\\\"Searching for a thing\\\")\\n22| \\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n```\\n\\n## Result 2: github.com/naeemaei/Golang-Tutorial/02-Introduction/03-ProjectStructure/helloWorldInFunc.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/02-Introduction/03-ProjectStructure/helloWorldInFunc.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func main() {\\n5| func main() {\\n6| \\thello()\\n7| }\\n8| \\n9| func hello() {\\n10| \\tfmt.Println(\\\"Hello, World!\\\")\\n11| }\\n12| \\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\thello()\\n7| }\\n8| \\n9| func hello() {\\n10| \\tfmt.Println(\\\"Hello, World!\\\")\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\thello()\\n7| }\\n8| func hello() {\\n9| func hello() {\\n10| \\tfmt.Println(\\\"Hello, World!\\\")\\n11| }\\n12| \\n```\\n\\n## Result 3: github.com/naeemaei/Golang-Tutorial/08-Function/05-Anonymous/example2.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/05-Anonymous/example2.go\\n\\n```\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"fmt\\\"\\n5| \\t\\\"sort\\\"\\n6| )\\n7| func main() {\\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n11| \\n12| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n13| \\n14| \\tsortingFunc := func(i, j int) bool {\\n15| \\t\\treturn numbers[i] < numbers[j]\\n16| \\t}\\n17| \\tsort.Slice(numbers, sortingFunc)\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"fmt\\\"\\n5| \\t\\\"sort\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n```\\n\\n```\\n3| import (\\n4| \\t\\\"fmt\\\"\\n5| \\t\\\"sort\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n11| \\n12| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n13| \\tsortingFunc := func(i, j int) bool {\\n14| \\tsortingFunc := func(i, j int) bool {\\n15| \\t\\treturn numbers[i] < numbers[j]\\n16| \\t}\\n17| \\tsort.Slice(numbers, sortingFunc)\\n18| \\n19| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n20| }\\n21| \\n```\\n\\n```\\n6| )\\n7| \\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n11| \\n12| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n13| \\n14| \\tsortingFunc := func(i, j int) bool {\\n15| \\t\\treturn numbers[i] < numbers[j]\\n16| \\tsort.Slice(numbers, sortingFunc)\\n17| \\tsort.Slice(numbers, sortingFunc)\\n18| \\n19| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n20| }\\n21| \\n```\\n\\n## Result 4: github.com/naeemaei/Golang-Tutorial/15-Concurrency/03-Intro/main.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/15-Concurrency/03-Intro/main.go\\n\\n```\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"runtime\\\"\\n5| \\t\\\"time\\\"\\n6| )\\n7| func main() {\\n8| func main() {\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n11| \\tgo task1() \\n12| \\tgo task2()\\n13| \\tgo task3()\\n14| \\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"runtime\\\"\\n5| \\t\\\"time\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n```\\n\\n```\\n4| \\t\\\"runtime\\\"\\n5| \\t\\\"time\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n11| \\tgo task1() \\n12| \\tgo task2()\\n13| \\tgo task3()\\n14| \\tgo func() {\\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n18| \\t\\t//unlock\\n19| \\t}()\\n20| \\tgo func() {\\n21| \\t\\t// lock\\n22| \\t\\tvalue+=2 // 3\\n23| \\t\\t//unlock\\n24| \\t}()\\n```\\n\\n```\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n11| \\tgo task1() \\n12| \\tgo task2()\\n13| \\tgo task3()\\n14| \\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n18| \\t\\t//unlock\\n19| \\tgo func() {\\n20| \\tgo func() {\\n21| \\t\\t// lock\\n22| \\t\\tvalue+=2 // 3\\n23| \\t\\t//unlock\\n24| \\t}()\\n25| \\tgo func() {\\n26| \\t\\t// lock\\n27| \\t\\tvalue+=3 // 6\\n28| \\t\\t//unlock\\n29| \\t}()\\n```\\n\\n```\\n14| \\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n18| \\t\\t//unlock\\n19| \\t}()\\n20| \\tgo func() {\\n21| \\t\\t// lock\\n22| \\t\\tvalue+=2 // 3\\n23| \\t\\t//unlock\\n24| \\tgo func() {\\n25| \\tgo func() {\\n26| \\t\\t// lock\\n27| \\t\\tvalue+=3 // 6\\n28| \\t\\t//unlock\\n29| \\t}()\\n30| \\n31| \\tprintln(value)\\n32| \\n33| \\ttime.Sleep(time.Second)\\n34| }\\n```\\n\\n```\\n25| \\tgo func() {\\n26| \\t\\t// lock\\n27| \\t\\tvalue+=3 // 6\\n28| \\t\\t//unlock\\n29| \\t}()\\n30| \\n31| \\tprintln(value)\\n32| \\n33| \\ttime.Sleep(time.Second)\\n34| }\\n35| func task1() {\\n36| func task1() {\\n37| \\tprintln(\\\"task1\\\")\\n38| }\\n39| \\n40| func task2() {\\n41| \\tprintln(\\\"task2\\\")\\n42| }\\n43| \\n44| func task3() {\\n45| \\tprintln(\\\"task3\\\")\\n```\\n\\n```\\n29| \\t}()\\n30| \\n31| \\tprintln(value)\\n32| \\n33| \\ttime.Sleep(time.Second)\\n34| }\\n35| \\n36| func task1() {\\n37| \\tprintln(\\\"task1\\\")\\n38| }\\n39| func task2() {\\n40| func task2() {\\n41| \\tprintln(\\\"task2\\\")\\n42| }\\n43| \\n44| func task3() {\\n45| \\tprintln(\\\"task3\\\")\\n46| }\\n47| \\n48| // race condition\\n49| //await\\n```\\n\\n```\\n33| \\ttime.Sleep(time.Second)\\n34| }\\n35| \\n36| func task1() {\\n37| \\tprintln(\\\"task1\\\")\\n38| }\\n39| \\n40| func task2() {\\n41| \\tprintln(\\\"task2\\\")\\n42| }\\n43| func task3() {\\n44| func task3() {\\n45| \\tprintln(\\\"task3\\\")\\n46| }\\n47| \\n48| // race condition\\n49| //await\\n```\\n\\n## Result 5: github.com/naeemaei/Golang-Tutorial/08-Function/04-Variadic/example2.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/04-Variadic/example2.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func main() {\\n5| func main() {\\n6| \\tPrintLog(\\\"Ali\\\", 1, \\\"Reza\\\", 3, \\\"Error\\\", 5, 6, \\\"Info\\\", 8, 9, false)\\n7| \\n8| }\\n9| \\n10| func PrintLog(logs ...interface{}) {\\n11| \\tfor i, item := range logs {\\n12| \\t\\tfmt.Printf(\\\"%d: %v\\\\n\\\", i, item)\\n13| \\t}\\n14| }\\n```\\n\\n\",\"tool_call_id\":\"call_ed4abf0a0b9be3a4\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
661+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/sourcegraph_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use sourcegraph to search for 'func main' in Go repositories\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_3377a986e2324af1a0d22066\",\"function\":{\"arguments\":\"{\\\"count\\\": 20, \\\"query\\\": \\\"func main lang:Go\\\"}\",\"name\":\"sourcegraph\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to use the Sourcegraph tool to search for 'func main' in Go repositories.\"},{\"content\":\"# Sourcegraph Search Results\\n\\nFound 30 matches across 30 results\\n(Result limit reached, try a more specific query)\\n\\n## Result 1: github.com/GoesToEleven/GolangTraining/14_functions/10_func-expression/01_before-func-expression/main.go\\n\\nURL: /r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/10_func-expression/01_before-func-expression/main.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func greeting() {\\n6| \\tfmt.Println(\\\"Hello world!\\\")\\n7| }\\n8| func main() {\\n9| func main() {\\n10| \\tgreeting()\\n11| }\\n12| \\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func greeting() {\\n6| \\tfmt.Println(\\\"Hello world!\\\")\\n7| }\\n8| \\n9| func main() {\\n10| \\tgreeting()\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func greeting() {\\n5| func greeting() {\\n6| \\tfmt.Println(\\\"Hello world!\\\")\\n7| }\\n8| \\n9| func main() {\\n10| \\tgreeting()\\n11| }\\n12| \\n```\\n\\n## Result 2: github.com/GoesToEleven/GolangTraining/14_functions/10_func-expression/02_func-expression/main.go\\n\\nURL: /r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/10_func-expression/02_func-expression/main.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func main() {\\n5| func main() {\\n6| \\n7| \\tgreeting := func() {\\n8| \\t\\tfmt.Println(\\\"Hello world!\\\")\\n9| \\t}\\n10| \\n11| \\tgreeting()\\n12| }\\n13| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\tgreeting := func() {\\n7| \\tgreeting := func() {\\n8| \\t\\tfmt.Println(\\\"Hello world!\\\")\\n9| \\t}\\n10| \\n11| \\tgreeting()\\n12| }\\n13| \\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\n7| \\tgreeting := func() {\\n8| \\t\\tfmt.Println(\\\"Hello world!\\\")\\n9| \\t}\\n10| \\n```\\n\\n## Result 3: github.com/GoesToEleven/GolangTraining/14_functions/10_func-expression/03_func-expression_shows-type/main.go\\n\\nURL: /r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/10_func-expression/03_func-expression_shows-type/main.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func main() {\\n5| func main() {\\n6| \\n7| \\tgreeting := func() {\\n8| \\t\\tfmt.Println(\\\"Hello world!\\\")\\n9| \\t}\\n10| \\n11| \\tgreeting()\\n12| \\tfmt.Printf(\\\"%T\\\\n\\\", greeting)\\n13| }\\n14| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\tgreeting := func() {\\n7| \\tgreeting := func() {\\n8| \\t\\tfmt.Println(\\\"Hello world!\\\")\\n9| \\t}\\n10| \\n11| \\tgreeting()\\n12| \\tfmt.Printf(\\\"%T\\\\n\\\", greeting)\\n13| }\\n14| \\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\n7| \\tgreeting := func() {\\n8| \\t\\tfmt.Println(\\\"Hello world!\\\")\\n9| \\t}\\n10| \\n```\\n\\n## Result 4: github.com/GoesToEleven/GolangTraining/14_functions/10_func-expression/04_another-way_func-expression/main.go\\n\\nURL: /r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/10_func-expression/04_another-way_func-expression/main.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func makeGreeter() func() string {\\n6| \\treturn func() string {\\n7| \\t\\treturn \\\"Hello world!\\\"\\n8| \\t}\\n9| }\\n10| func main() {\\n11| func main() {\\n12| \\tgreet := makeGreeter()\\n13| \\tfmt.Println(greet())\\n14| }\\n15| \\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func makeGreeter() func() string {\\n6| \\treturn func() string {\\n7| \\t\\treturn \\\"Hello world!\\\"\\n8| \\t}\\n9| }\\n10| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func makeGreeter() func() string {\\n5| func makeGreeter() func() string {\\n6| \\treturn func() string {\\n7| \\t\\treturn \\\"Hello world!\\\"\\n8| \\t}\\n9| }\\n10| \\n11| func main() {\\n12| \\tgreet := makeGreeter()\\n13| \\tfmt.Println(greet())\\n14| }\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| \\treturn func() string {\\n6| \\treturn func() string {\\n7| \\t\\treturn \\\"Hello world!\\\"\\n8| \\t}\\n9| }\\n10| \\n11| func main() {\\n12| \\tgreet := makeGreeter()\\n13| \\tfmt.Println(greet())\\n14| }\\n15| \\n```\\n\\n## Result 5: github.com/GoesToEleven/GolangTraining/14_functions/10_func-expression/05_another-way_func-expression_shows-type/main.go\\n\\nURL: /r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/10_func-expression/05_another-way_func-expression_shows-type/main.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func makeGreeter() func() string {\\n6| \\treturn func() string {\\n7| \\t\\treturn \\\"Hello world!\\\"\\n8| \\t}\\n9| }\\n10| func main() {\\n11| func main() {\\n12| \\tgreet := makeGreeter()\\n13| \\tfmt.Println(greet())\\n14| \\tfmt.Printf(\\\"%T\\\\n\\\", greet)\\n15| }\\n16| \\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func makeGreeter() func() string {\\n6| \\treturn func() string {\\n7| \\t\\treturn \\\"Hello world!\\\"\\n8| \\t}\\n9| }\\n10| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func makeGreeter() func() string {\\n5| func makeGreeter() func() string {\\n6| \\treturn func() string {\\n7| \\t\\treturn \\\"Hello world!\\\"\\n8| \\t}\\n9| }\\n10| \\n11| func main() {\\n12| \\tgreet := makeGreeter()\\n13| \\tfmt.Println(greet())\\n14| \\tfmt.Printf(\\\"%T\\\\n\\\", greet)\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| \\treturn func() string {\\n6| \\treturn func() string {\\n7| \\t\\treturn \\\"Hello world!\\\"\\n8| \\t}\\n9| }\\n10| \\n11| func main() {\\n12| \\tgreet := makeGreeter()\\n13| \\tfmt.Println(greet())\\n14| \\tfmt.Printf(\\\"%T\\\\n\\\", greet)\\n15| }\\n```\\n\\n## Result 6: github.com/GoesToEleven/GolangTraining/14_functions/12_callbacks/01_print-nums/main.go\\n\\nURL: /r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/12_callbacks/01_print-nums/main.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func visit(numbers []int, callback func(int)) {\\n6| \\tfor _, n := range numbers {\\n7| \\t\\tcallback(n)\\n8| \\t}\\n9| }\\n10| func main() {\\n11| func main() {\\n12| \\tvisit([]int{1, 2, 3, 4}, func(n int) {\\n13| \\t\\tfmt.Println(n)\\n14| \\t})\\n15| }\\n16| \\n17| // callback: passing a func as an argument\\n18| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func visit(numbers []int, callback func(int)) {\\n6| \\tfor _, n := range numbers {\\n7| \\t\\tcallback(n)\\n8| \\t}\\n9| }\\n10| \\n11| \\tvisit([]int{1, 2, 3, 4}, func(n int) {\\n12| \\tvisit([]int{1, 2, 3, 4}, func(n int) {\\n13| \\t\\tfmt.Println(n)\\n14| \\t})\\n15| }\\n16| \\n17| // callback: passing a func as an argument\\n18| \\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func visit(numbers []int, callback func(int)) {\\n6| \\tfor _, n := range numbers {\\n7| \\t\\tcallback(n)\\n8| \\t}\\n9| }\\n10| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func visit(numbers []int, callback func(int)) {\\n5| func visit(numbers []int, callback func(int)) {\\n6| \\tfor _, n := range numbers {\\n7| \\t\\tcallback(n)\\n8| \\t}\\n9| }\\n10| \\n11| func main() {\\n12| \\tvisit([]int{1, 2, 3, 4}, func(n int) {\\n13| \\t\\tfmt.Println(n)\\n14| \\t})\\n```\\n\\n```\\n6| \\tfor _, n := range numbers {\\n7| \\t\\tcallback(n)\\n8| \\t}\\n9| }\\n10| \\n11| func main() {\\n12| \\tvisit([]int{1, 2, 3, 4}, func(n int) {\\n13| \\t\\tfmt.Println(n)\\n14| \\t})\\n15| }\\n16| // callback: passing a func as an argument\\n17| // callback: passing a func as an argument\\n18| \\n```\\n\\n## Result 7: github.com/GoesToEleven/GolangTraining/14_functions/14_defer/01_no-defer/main.go\\n\\nURL: /r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/14_defer/01_no-defer/main.go\\n\\n```\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func hello() {\\n6| \\tfmt.Print(\\\"hello \\\")\\n7| }\\n8| \\n9| func world() {\\n10| \\tfmt.Println(\\\"world\\\")\\n11| }\\n12| func main() {\\n13| func main() {\\n14| \\tworld()\\n15| \\thello()\\n16| }\\n17| \\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func hello() {\\n6| \\tfmt.Print(\\\"hello \\\")\\n7| }\\n8| \\n9| func world() {\\n10| \\tfmt.Println(\\\"world\\\")\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func hello() {\\n5| func hello() {\\n6| \\tfmt.Print(\\\"hello \\\")\\n7| }\\n8| \\n9| func world() {\\n10| \\tfmt.Println(\\\"world\\\")\\n11| }\\n12| \\n13| func main() {\\n14| \\tworld()\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func hello() {\\n6| \\tfmt.Print(\\\"hello \\\")\\n7| }\\n8| func world() {\\n9| func world() {\\n10| \\tfmt.Println(\\\"world\\\")\\n11| }\\n12| \\n13| func main() {\\n14| \\tworld()\\n15| \\thello()\\n16| }\\n17| \\n```\\n\\n## Result 8: github.com/GoesToEleven/GolangTraining/14_functions/14_defer/02_with-defer/main.go\\n\\nURL: /r/github.com/GoesToEleven/GolangTraining/-/blob/14_functions/14_defer/02_with-defer/main.go\\n\\n```\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func hello() {\\n6| \\tfmt.Print(\\\"hello \\\")\\n7| }\\n8| \\n9| func world() {\\n10| \\tfmt.Println(\\\"world\\\")\\n11| }\\n12| func main() {\\n13| func main() {\\n14| \\tdefer world()\\n15| \\thello()\\n16| }\\n17| \\n```\\n\\n\",\"tool_call_id\":\"call_3377a986e2324af1a0d22066\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
924662 headers:
925663 Accept:
926664 - application/json
@@ -937,537 +675,385 @@ interactions:
937675 content_length: -1
938676 uncompressed: true
939677 body: |+
940− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
941−
942− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
943−
944− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
945−
946− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30"},"finish_reason":null}]}
947−
948− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" matches"},"finish_reason":null}]}
949−
950− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" across"},"finish_reason":null}]}
951−
952− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
953−
954− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30"},"finish_reason":null}]}
955−
956− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
957−
958− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repositories"},"finish_reason":null}]}
959−
960− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
961−
962− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Here"},"finish_reason":null}]}
963−
964− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"'s"},"finish_reason":null}]}
965−
966− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}]}
967−
968− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" summary"},"finish_reason":null}]}
969−
970− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" of"},"finish_reason":null}]}
971−
972− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
973−
974− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" top"},"finish_reason":null}]}
975−
976− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
977−
978− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n\n"},"finish_reason":null}]}
979−
980− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
981−
982− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" #"},"finish_reason":null}]}
983−
984− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
985−
986− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Repository"},"finish_reason":null}]}
987−
988− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
989−
990− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" File"},"finish_reason":null}]}
991−
992− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
993−
994− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Sn"},"finish_reason":null}]}
995−
996− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ippet"},"finish_reason":null}]}
997−
998− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
999−
1000− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1001−
1002− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"---"},"finish_reason":null}]}
1003−
1004− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1005−
1006− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-----------"},"finish_reason":null}]}
1007−
1008− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1009−
1010− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"------"},"finish_reason":null}]}
1011−
1012− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1013−
1014− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"---------"},"finish_reason":null}]}
1015−
1016− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|\n"},"finish_reason":null}]}
1017−
1018− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1019−
1020− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
1021−
1022− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
1023−
1024− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1025−
1026− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1027−
1028− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"na"},"finish_reason":null}]}
1029−
1030− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e"},"finish_reason":null}]}
1031−
1032− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"em"},"finish_reason":null}]}
1033−
1034− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ae"},"finish_reason":null}]}
1035−
1036− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"i"},"finish_reason":null}]}
1037−
1038− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
1039−
1040− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
1041−
1042− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null}]}
1043−
1044− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"utorial"},"finish_reason":null}]}
1045−
1046− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1047−
1048− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1049−
1050− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1051−
1052− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"14"},"finish_reason":null}]}
1053−
1054− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1055−
1056− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Logging"},"finish_reason":null}]}
1057−
1058− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1059−
1060− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"03"},"finish_reason":null}]}
1061−
1062− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1063−
1064− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Log"},"finish_reason":null}]}
1065−
1066− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ToFile"},"finish_reason":null}]}
1067−
1068− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
1069−
1070− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1071−
1072− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1073−
1074− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1075−
1076− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Logger"},"finish_reason":null}]}
1077−
1078− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" setup"},"finish_reason":null}]}
1079−
1080− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
1081−
1082− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" zer"},"finish_reason":null}]}
1083−
1084− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olog"},"finish_reason":null}]}
1085−
1086− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
1087−
1088− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" error"},"finish_reason":null}]}
1089−
1090− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" handling"},"finish_reason":null}]}
1091−
1092− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
678+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1093679
1094− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
680+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
1095681
1096− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
682+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **"},"finish_reason":null}]}
1097683
1098− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
684+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30 matches"},"finish_reason":null}]}
1099685
1100− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
686+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"** across Go"},"finish_reason":null}]}
1101687
1102− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
688+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repositories. Here"},"finish_reason":null}]}
1103689
1104− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"na"},"finish_reason":null}]}
690+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"'s"},"finish_reason":null}]}
1105691
1106− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e"},"finish_reason":null}]}
692+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" a summary of the"},"finish_reason":null}]}
1107693
1108− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"em"},"finish_reason":null}]}
694+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" top results"},"finish_reason":null}]}
1109695
1110− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ae"},"finish_reason":null}]}
696+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n\n| #"},"finish_reason":null}]}
1111697
1112− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"i"},"finish_reason":null}]}
698+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" | Repository"},"finish_reason":null}]}
1113699
1114− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
700+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" | File"},"finish_reason":null}]}
1115701
1116− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
702+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" | Description"},"finish_reason":null}]}
1117703
1118− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null}]}
704+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n|---"},"finish_reason":null}]}
1119705
1120− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"utorial"},"finish_reason":null}]}
706+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|-----------"},"finish_reason":null}]}
1121707
1122− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
708+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|------"},"finish_reason":null}]}
1123709
1124− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
710+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|-------------"},"finish_reason":null}]}
1125711
1126− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
712+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|\n| "},"finish_reason":null}]}
1127713
1128− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"02"},"finish_reason":null}]}
714+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1 | `G"},"finish_reason":null}]}
1129715
1130− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
716+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oesTo"},"finish_reason":null}]}
1131717
1132− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Introduction"},"finish_reason":null}]}
718+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
1133719
1134− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
720+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven/G"},"finish_reason":null}]}
1135721
1136− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"03"},"finish_reason":null}]}
722+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olangTraining"},"finish_reason":null}]}
1137723
1138− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
724+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` | `"},"finish_reason":null}]}
1139725
1140− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Project"},"finish_reason":null}]}
726+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"14_functions"},"finish_reason":null}]}
1141727
1142− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Structure"},"finish_reason":null}]}
728+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/10"},"finish_reason":null}]}
1143729
1144− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/h"},"finish_reason":null}]}
730+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
1145731
1146− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ello"},"finish_reason":null}]}
732+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
1147733
1148− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"World"},"finish_reason":null}]}
734+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1149735
1150− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"In"},"finish_reason":null}]}
736+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"01_before"},"finish_reason":null}]}
1151737
1152− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Func"},"finish_reason":null}]}
738+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-f"},"finish_reason":null}]}
1153739
1154− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
740+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"unc-expression"},"finish_reason":null}]}
1155741
1156− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
742+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
1157743
1158− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
744+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1159745
1160− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Simple"},"finish_reason":null}]}
746+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` | Basic"},"finish_reason":null}]}
1161747
1162− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
748+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function"},"finish_reason":null}]}
1163749
1164− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" world"},"finish_reason":null}]}
750+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" call"},"finish_reason":null}]}
1165751
1166− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
752+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
1167753
1168− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}]}
754+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1169755
1170− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function"},"finish_reason":null}]}
756+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
1171757
1172− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
758+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` |\n"},"finish_reason":null}]}
1173759
1174− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
760+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"| "},"finish_reason":null}]}
1175761
1176− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
762+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2 | `G"},"finish_reason":null}]}
1177763
1178− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"3"},"finish_reason":null}]}
764+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oesToEle"},"finish_reason":null}]}
1179765
1180− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
766+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven/GolangTraining"},"finish_reason":null}]}
1181767
1182− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
768+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` |"},"finish_reason":null}]}
1183769
1184− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"na"},"finish_reason":null}]}
770+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1185771
1186− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e"},"finish_reason":null}]}
772+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"14_functions/10"},"finish_reason":null}]}
1187773
1188− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"em"},"finish_reason":null}]}
774+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func-expression/02"},"finish_reason":null}]}
1189775
1190− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ae"},"finish_reason":null}]}
776+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
1191777
1192− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"i"},"finish_reason":null}]}
778+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression/main.go"},"finish_reason":null}]}
1193779
1194− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
780+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` | Function"},"finish_reason":null}]}
1195781
1196− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
782+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" expression assigned"},"finish_reason":null}]}
1197783
1198− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null}]}
784+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
1199785
1200− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"utorial"},"finish_reason":null}]}
786+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `main"},"finish_reason":null}]}
1201787
1202− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
788+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` |\n| "},"finish_reason":null}]}
1203789
1204− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
790+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"3"},"finish_reason":null}]}
1205791
1206− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
792+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" | `G"},"finish_reason":null}]}
1207793
1208− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"08"},"finish_reason":null}]}
794+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oesToEle"},"finish_reason":null}]}
1209795
1210− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
796+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven/GolangTraining"},"finish_reason":null}]}
1211797
1212− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Function"},"finish_reason":null}]}
798+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` |"},"finish_reason":null}]}
1213799
1214− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
800+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `14_functions/"},"finish_reason":null}]}
1215801
1216− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"05"},"finish_reason":null}]}
802+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10_func-expression/"},"finish_reason":null}]}
1217803
1218− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
804+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"03_func"},"finish_reason":null}]}
1219805
1220− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Anonymous"},"finish_reason":null}]}
806+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression_sh"},"finish_reason":null}]}
1221807
1222− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/example"},"finish_reason":null}]}
808+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ows-type"},"finish_reason":null}]}
1223809
1224− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
810+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main.go` |"},"finish_reason":null}]}
1225811
1226− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
812+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Function"},"finish_reason":null}]}
1227813
1228− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
814+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" expression with"},"finish_reason":null}]}
1229815
1230− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
816+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" type printing"},"finish_reason":null}]}
1231817
1232− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Anonymous"},"finish_reason":null}]}
818+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n| "},"finish_reason":null}]}
1233819
1234− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function"},"finish_reason":null}]}
820+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"4 | `"},"finish_reason":null}]}
1235821
1236− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
822+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"GoesToEle"},"finish_reason":null}]}
1237823
1238− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" sorting"},"finish_reason":null}]}
824+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven/Golang"},"finish_reason":null}]}
1239825
1240− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
826+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training` |"},"finish_reason":null}]}
1241827
1242− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
828+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `14_functions/"},"finish_reason":null}]}
1243829
1244− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
830+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10_func-expression/"},"finish_reason":null}]}
1245831
1246− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"4"},"finish_reason":null}]}
832+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"04_an"},"finish_reason":null}]}
1247833
1248− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
834+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"other"},"finish_reason":null}]}
1249835
1250− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
836+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-way"},"finish_reason":null}]}
1251837
1252− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"na"},"finish_reason":null}]}
838+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
1253839
1254− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e"},"finish_reason":null}]}
840+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression/main.go"},"finish_reason":null}]}
1255841
1256− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"em"},"finish_reason":null}]}
842+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` | Function"},"finish_reason":null}]}
1257843
1258− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ae"},"finish_reason":null}]}
844+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" returning"},"finish_reason":null}]}
1259845
1260− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"i"},"finish_reason":null}]}
846+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}]}
1261847
1262− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
848+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" closure |\n"},"finish_reason":null}]}
1263849
1264− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
850+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"| "},"finish_reason":null}]}
1265851
1266− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null}]}
852+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"5 | `G"},"finish_reason":null}]}
1267853
1268− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"utorial"},"finish_reason":null}]}
854+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oesToEle"},"finish_reason":null}]}
1269855
1270− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
856+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven/G"},"finish_reason":null}]}
1271857
1272− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
858+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olangTraining` |"},"finish_reason":null}]}
1273859
1274− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
860+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `14"},"finish_reason":null}]}
1275861
1276− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"15"},"finish_reason":null}]}
862+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_functions/10_func"},"finish_reason":null}]}
1277863
1278− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-Con"},"finish_reason":null}]}
864+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression/05"},"finish_reason":null}]}
1279865
1280− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"currency"},"finish_reason":null}]}
866+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_an"},"finish_reason":null}]}
1281867
1282− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
868+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"other-way"},"finish_reason":null}]}
1283869
1284− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"03"},"finish_reason":null}]}
870+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func-expression_sh"},"finish_reason":null}]}
1285871
1286− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
872+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ows-type"},"finish_reason":null}]}
1287873
1288− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Intro"},"finish_reason":null}]}
874+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main.go` |"},"finish_reason":null}]}
1289875
1290− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
876+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Closure with type"},"finish_reason":null}]}
1291877
1292− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
878+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" inspection |\n"},"finish_reason":null}]}
1293879
1294− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
880+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"| "},"finish_reason":null}]}
1295881
1296− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
882+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6 | `G"},"finish_reason":null}]}
1297883
1298− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Gor"},"finish_reason":null}]}
884+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oesToEle"},"finish_reason":null}]}
1299885
1300− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"outines"},"finish_reason":null}]}
886+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven/Golang"},"finish_reason":null}]}
1301887
1302− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
888+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training` |"},"finish_reason":null}]}
1303889
1304− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" race"},"finish_reason":null}]}
890+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `14"},"finish_reason":null}]}
1305891
1306− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" condition"},"finish_reason":null}]}
892+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_functions/12"},"finish_reason":null}]}
1307893
1308− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" demo"},"finish_reason":null}]}
894+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_callbacks"},"finish_reason":null}]}
1309895
1310− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
896+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/01"},"finish_reason":null}]}
1311897
1312− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
898+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_print"},"finish_reason":null}]}
1313899
1314− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
900+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1315901
1316− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"5"},"finish_reason":null}]}
902+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"nums/main.go`"},"finish_reason":null}]}
1317903
1318− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
904+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" | Callback pattern"},"finish_reason":null}]}
1319905
1320− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
906+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in `main"},"finish_reason":null}]}
1321907
1322− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"na"},"finish_reason":null}]}
908+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` |\n|"},"finish_reason":null}]}
1323909
1324− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e"},"finish_reason":null}]}
910+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" 7 | `"},"finish_reason":null}]}
1325911
1326− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"em"},"finish_reason":null}]}
912+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"GoesToEle"},"finish_reason":null}]}
1327913
1328− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ae"},"finish_reason":null}]}
914+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven/G"},"finish_reason":null}]}
1329915
1330− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"i"},"finish_reason":null}]}
916+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olangTraining` |"},"finish_reason":null}]}
1331917
1332− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
918+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `14"},"finish_reason":null}]}
1333919
1334− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
920+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_functions/14"},"finish_reason":null}]}
1335921
1336− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null}]}
922+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_def"},"finish_reason":null}]}
1337923
1338− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"utorial"},"finish_reason":null}]}
924+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"er/"},"finish_reason":null}]}
1339925
1340− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
926+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"01_no"},"finish_reason":null}]}
1341927
1342− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
928+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-defer/main"},"finish_reason":null}]}
1343929
1344− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
930+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go` |"},"finish_reason":null}]}
1345931
1346− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"08"},"finish_reason":null}]}
932+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Simple"},"finish_reason":null}]}
1347933
1348− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
934+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1349935
1350− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Function"},"finish_reason":null}]}
936+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main` without"},"finish_reason":null}]}
1351937
1352− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
938+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1353939
1354− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"04"},"finish_reason":null}]}
940+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"defer`"},"finish_reason":null}]}
1355941
1356− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-V"},"finish_reason":null}]}
942+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n| "},"finish_reason":null}]}
1357943
1358− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ari"},"finish_reason":null}]}
944+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"8"},"finish_reason":null}]}
1359945
1360− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"adic"},"finish_reason":null}]}
946+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" | `G"},"finish_reason":null}]}
1361947
1362− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/example"},"finish_reason":null}]}
948+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oesToEle"},"finish_reason":null}]}
1363949
1364− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
950+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven/G"},"finish_reason":null}]}
1365951
1366− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
952+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olangTraining` |"},"finish_reason":null}]}
1367953
1368− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
954+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `14_functions/"},"finish_reason":null}]}
1369955
1370− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
956+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"14_defer/"},"finish_reason":null}]}
1371957
1372− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Vari"},"finish_reason":null}]}
958+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"02_with-def"},"finish_reason":null}]}
1373959
1374− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"adic"},"finish_reason":null}]}
960+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"er/main.go"},"finish_reason":null}]}
1375961
1376− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function"},"finish_reason":null}]}
962+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` | `main"},"finish_reason":null}]}
1377963
1378− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
964+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` using"},"finish_reason":null}]}
1379965
1380− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
966+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `defer`"},"finish_reason":null}]}
1381967
1382− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"..."},"finish_reason":null}]}
968+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n\nMost"},"finish_reason":null}]}
1383969
1384− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"interface"},"finish_reason":null}]}
970+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results are from"},"finish_reason":null}]}
1385971
1386− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"{"},"finish_reason":null}]}
972+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the **"},"finish_reason":null}]}
1387973
1388− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"}`"},"finish_reason":null}]}
974+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"GoesToEle"},"finish_reason":null}]}
1389975
1390− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n\n"},"finish_reason":null}]}
976+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven/G"},"finish_reason":null}]}
1391977
1392− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null}]}
978+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olangTraining** tutorial"},"finish_reason":null}]}
1393979
1394− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" search"},"finish_reason":null}]}
980+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repo"},"finish_reason":null}]}
1395981
1396− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" returned"},"finish_reason":null}]}
982+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":". To"},"finish_reason":null}]}
1397983
1398− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
984+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" narrow"},"finish_reason":null}]}
1399985
1400− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30"},"finish_reason":null}]}
986+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results to"},"finish_reason":null}]}
1401987
1402− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
988+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" more"},"finish_reason":null}]}
1403989
1404− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" ("},"finish_reason":null}]}
990+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" diverse"},"finish_reason":null}]}
1405991
1406− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"max"},"finish_reason":null}]}
992+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1407993
1408− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
994+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"production"},"finish_reason":null}]}
1409995
1410− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" this"},"finish_reason":null}]}
996+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}]}
1411997
1412− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" query"},"finish_reason":null}]}
998+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":", you"},"finish_reason":null}]}
1413999
1414− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":")."},"finish_reason":null}]}
1000+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" could refine the"},"finish_reason":null}]}
14151001
1416− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" To"},"finish_reason":null}]}
1002+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" query,"},"finish_reason":null}]}
14171003
1418− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" narrow"},"finish_reason":null}]}
1004+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" e.g.:\n\n"},"finish_reason":null}]}
14191005
1420− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
1006+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"- `func"},"finish_reason":null}]}
14211007
1422− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
1008+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main lang"},"finish_reason":null}]}
14231009
1424− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}]}
1010+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
14251011
1426− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" could"},"finish_reason":null}]}
1012+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Go -"},"finish_reason":null}]}
14271013
1428− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" add"},"finish_reason":null}]}
1014+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"repo:"},"finish_reason":null}]}
14291015
1430− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repo"},"finish_reason":null}]}
1016+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
14311017
1432− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" filters"},"finish_reason":null}]}
1018+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oesToEle"},"finish_reason":null}]}
14331019
1434− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}]}
1020+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven/GolangTraining"},"finish_reason":null}]}
14351021
1436− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1022+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` ("},"finish_reason":null}]}
14371023
1438− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"repo"},"finish_reason":null}]}
1024+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"exclude"},"finish_reason":null}]}
14391025
1440− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
1026+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" training"},"finish_reason":null}]}
14411027
1442− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"specific"},"finish_reason":null}]}
1028+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repo)\n-"},"finish_reason":null}]}
14431029
1444− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-org"},"finish_reason":null}]}
1030+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `func main lang"},"finish_reason":null}]}
14451031
1446− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1032+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":Go count"},"finish_reason":null}]}
14471033
1448− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" or"},"finish_reason":null}]}
1034+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
14491035
1450− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
1036+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"50` ("},"finish_reason":null}]}
14511037
1452− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" patterns"},"finish_reason":null}]}
1038+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"more"},"finish_reason":null}]}
14531039
1454− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}]}
1040+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results)\n"},"finish_reason":null}]}
14551041
1456− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1042+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"- `func"},"finish_reason":null}]}
14571043
1458− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"file"},"finish_reason":null}]}
1044+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main lang:Go"},"finish_reason":null}]}
14591045
1460− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
1046+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repo:g"},"finish_reason":null}]}
14611047
1462− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
1048+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang` (standard"},"finish_reason":null}]}
14631049
1464− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1050+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" library only"},"finish_reason":null}]}
14651051
1466− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
1052+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":")"},"finish_reason":null}]}
14671053
1468− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
1054+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
14691055
1470− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":4351,"completion_tokens":265,"total_tokens":12095,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.007257399999999999,"hypercredits":0.14514799999999997},"remaining":{"hypercredits":0}}}
1056+ data: {"id":"chatcmpl-b1b4d4b3a19eaa32ad806633","object":"chat.completion.chunk","created":1778597408,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":10586,"completion_tokens":444,"total_tokens":11030,"completion_tokens_details":{"reasoning_tokens":443}}}
14711057
14721058 data: [DONE]
14731059
@@ -1476,4 +1062,4 @@ interactions:
14761062 - text/event-stream
14771063 status: 200 OK
14781064 code: 200
1479− duration: 924.067458ms
1065+ duration: 3.460100417s
internal/agent/testdata/TestCoderAgent/glm-5.1/update_a_file.yaml+319−359
@@ -6,9 +6,9 @@ interactions:
66 proto: HTTP/1.1
77 proto_major: 1
88 proto_minor: 1
9− content_length: 35651
9+ content_length: 828
1010 host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
11+ body: '{"messages":[{"content":"You will generate a short title based on the first message a user begins a conversation with.\n\n<rules>\n- Keep the title in the same language that the user wrote their message in.\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-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
1212 headers:
1313 Accept:
1414 - application/json
@@ -25,449 +25,457 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" given"},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_6edb28097a757377","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\": \""}}]},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"update"},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"**"}}]},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"main"}}]},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" by"},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" changing"},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
68+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":8117,"completion_tokens":25,"total_tokens":8185,"prompt_tokens_details":{"cached_tokens":43},"completion_tokens_details":{"reasoning_tokens":11},"cost":{"usd":0.0115222,"hypercredits":0.23044399999999998},"remaining":{"hypercredits":0}}}
70+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
7171
72− data: [DONE]
72+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
7373
74− headers:
75− Content-Type:
76− - text/event-stream
77− status: 200 OK
78− code: 200
79− duration: 1.480144792s
80−- id: 1
81− request:
82− proto: HTTP/1.1
83− proto_major: 1
84− proto_minor: 1
85− content_length: 828
86− host: ""
87− body: '{"messages":[{"content":"You will generate a short title based on the first message a user begins a conversation with.\n\n<rules>\n- Keep the title in the same language that the user wrote their message in.\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-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
88− headers:
89− Accept:
90− - application/json
91− Content-Type:
92− - application/json
93− User-Agent:
94− - Charm-Crush/devel (https://charm.land/crush)
95− url: https://hyper.charm.land/v1/chat/completions
96− method: POST
97− response:
98− proto: HTTP/2.0
99− proto_major: 2
100− proto_minor: 0
101− content_length: -1
102− uncompressed: true
103− body: |+
104− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" say"},"finish_reason":null}]}
75+
76+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
10577
106− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
10779
108− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
10981
110− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
11183
112− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
11385
114− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" must"},"finish_reason":null}]}
11587
116− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
11789
118− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
11991
120− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
12193
122− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
12395
124− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
12597
126− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"update"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
12799
128− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
129101
130− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
131103
132− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
133105
134− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
135107
136− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" by"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
137109
138− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" changing"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
139111
140− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
141113
142− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
143115
144− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
145117
146− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" say"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
147119
148− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
149121
150− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
151123
152− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
153125
154− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
155127
156− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" We"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
157129
158− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
159131
160− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
161133
162− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
163135
164− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
165137
166− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
167139
168− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Modify"},"finish_reason":null}]}
169141
170− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
171143
172− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
173145
174− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
175147
176− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
177149
178− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
179151
180− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
181153
182− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
183155
184− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
185157
186− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
187159
188− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
189161
190− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
191163
192− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
193165
194− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Possibly"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Modify"},"finish_reason":null}]}
195167
196− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
197169
198− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Update"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
199171
200− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
201173
202− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
203175
204− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
205177
206− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
207179
208− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
209181
210− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
211183
212− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
213185
214− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
215187
216− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
217189
218− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Modify"},"finish_reason":null}]}
219191
220− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
221193
222− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
223195
224− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
225197
226− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
227199
228− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
229201
230− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
231203
232− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
233205
234− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Update"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
235207
236− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
237209
238− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
239211
240− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
241213
242− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
243215
244− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
245217
246− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
247219
248− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
249221
250− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
251223
252− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
253225
254− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
255227
256− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
257229
258− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
259231
260− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" including"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
261233
262− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" spaces"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
263235
264− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
265237
266− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
267239
268− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Update"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
269241
270− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
271243
272− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
273245
274− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
275247
276− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
277249
278− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
279251
280− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
281253
282− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
283255
284− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
285257
286− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
287259
288− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"main"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
289261
290− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
291263
292− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
293265
294− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
295267
296− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
297269
298− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
299271
300− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
301273
302− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
303275
304− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
305277
306− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
307279
308− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
309281
310− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
311283
312− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"to"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
313285
314− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
315287
316− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
317289
318− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
319291
320− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
321293
322− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
323295
324− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
325297
326− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
327299
328− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
329301
330− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
331303
332− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
333305
334− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"print"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
335307
336− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
337309
338− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
339311
340− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
341313
342− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
343315
344− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
345317
346− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
347319
348− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
349321
350− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
351323
352− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
353325
354− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
355327
356− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
357329
358− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
359331
360− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
361333
362− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
363335
364− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
365337
366− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
367339
368− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
369341
370− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
371343
372− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
373345
374− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
375347
376− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
377349
378− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"from"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
379351
380− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Alternatively"},"finish_reason":null}]}
381353
382− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
383355
384− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
385357
386− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Update"},"finish_reason":null}]}
387359
388− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
389361
390− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
391363
392− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
393365
394− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" say"},"finish_reason":null}]}
395367
396− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
397369
398− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
399371
400− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"cr"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
401373
402− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ush"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
403375
404− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
405377
406− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" similar"},"finish_reason":null}]}
407379
408− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
409381
410− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
411383
412− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"I'll"},"finish_reason":null}]}
413385
414− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
415387
416− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
417389
418− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
419391
420− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
421393
422− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Update"},"finish_reason":null}]}
423395
424− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" good"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
425397
426− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
427399
428− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
429401
430− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" print"},"finish_reason":null}]}
431403
432− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Hello"},"finish_reason":null}]}
433405
434− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
435407
436− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Crush"},"finish_reason":null}]}
437409
438− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
411+
412+ data: {"id":"chatcmpl-27f6fc9e843256fb939896e2","object":"chat.completion.chunk","created":1778597283,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":25,"completion_tokens":200,"total_tokens":417,"prompt_tokens_details":{"cached_tokens":192}}}
413+
414+ data: [DONE]
415+
416+ headers:
417+ Content-Type:
418+ - text/event-stream
419+ status: 200 OK
420+ code: 200
421+ duration: 628.654542ms
422+- id: 1
423+ request:
424+ proto: HTTP/1.1
425+ proto_major: 1
426+ proto_minor: 1
427+ content_length: 33663
428+ host: ""
429+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
430+ headers:
431+ Accept:
432+ - application/json
433+ Content-Type:
434+ - application/json
435+ User-Agent:
436+ - Charm-Crush/devel (https://charm.land/crush)
437+ url: https://hyper.charm.land/v1/chat/completions
438+ method: POST
439+ response:
440+ proto: HTTP/2.0
441+ proto_major: 2
442+ proto_minor: 0
443+ content_length: -1
444+ uncompressed: true
445+ body: |+
446+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
439447
440− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
441449
442− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
443451
444− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
445453
446− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
447455
448− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read the main"},"finish_reason":null}]}
449457
450− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".go file"},"finish_reason":null}]}
451459
452− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Update"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first."},"finish_reason":null}]}
453461
454− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_336a65a4f1974f07938cae66","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
455463
456− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
457465
458− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
459467
460− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" print"},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
461469
462− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"**/"}}]},"finish_reason":null}]}
463471
464− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"main.go\""}}]},"finish_reason":null}]}
465473
466− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" crush"},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
467475
468− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
476+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
469477
470− data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":159,"completion_tokens":188,"total_tokens":411,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.000132368,"hypercredits":0.00264736},"remaining":{"hypercredits":0}}}
478+ data: {"id":"chatcmpl-c8c07f692210879bd28e2e82","object":"chat.completion.chunk","created":1778597286,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7746,"completion_tokens":25,"total_tokens":7771,"completion_tokens_details":{"reasoning_tokens":11}}}
471479
472480 data: [DONE]
473481
@@ -476,15 +484,15 @@ interactions:
476484 - text/event-stream
477485 status: 200 OK
478486 code: 200
479− duration: 957.865209ms
487+ duration: 3.702887459s
480488- id: 2
481489 request:
482490 proto: HTTP/1.1
483491 proto_major: 1
484492 proto_minor: 1
485− content_length: 36002
493+ content_length: 34030
486494 host: ""
487− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6edb28097a757377\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/main.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me find and read the main.go file first.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\",\"tool_call_id\":\"call_6edb28097a757377\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
495+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_336a65a4f1974f07938cae66\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/main.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me find and read the main.go file first.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\",\"tool_call_id\":\"call_336a65a4f1974f07938cae66\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
488496 headers:
489497 Accept:
490498 - application/json
@@ -501,55 +509,47 @@ interactions:
501509 content_length: -1
502510 uncompressed: true
503511 body: |+
504− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
505−
506− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_0850fc4e3649ae50","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
507−
508− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
512+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
509513
510− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
514+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_009a902e80d94744baddc43c","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
511515
512− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
516+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
513517
514− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
518+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
515519
516− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
520+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
517521
518− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
522+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp/c"}}]},"finish_reason":null}]}
519523
520− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
524+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
521525
522− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
526+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
523527
524− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
528+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
525529
526− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
530+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
527531
528− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
532+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent/g"}}]},"finish_reason":null}]}
529533
530− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm-"}}]},"finish_reason":null}]}
531535
532− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
536+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5."}}]},"finish_reason":null}]}
533537
534− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
538+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1/update"}}]},"finish_reason":null}]}
535539
536− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/update"}}]},"finish_reason":null}]}
540+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
537541
538− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
542+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
539543
540− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
544+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main.go"}}]},"finish_reason":null}]}
541545
542− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
546+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
543547
544− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
548+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
545549
546− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
550+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
547551
548− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
549−
550− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
551−
552− data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":8196,"completion_tokens":29,"total_tokens":8225,"cost":{"usd":0.011602,"hypercredits":0.23203999999999997},"remaining":{"hypercredits":0}}}
552+ data: {"id":"chatcmpl-d376241c8483befb37b6c5bc","object":"chat.completion.chunk","created":1778597297,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7782,"completion_tokens":29,"total_tokens":7811,"completion_tokens_details":{"reasoning_tokens":28}}}
553553
554554 data: [DONE]
555555
@@ -558,15 +558,15 @@ interactions:
558558 - text/event-stream
559559 status: 200 OK
560560 code: 200
561− duration: 1.058921083s
561+ duration: 10.221187583s
562562- id: 3
563563 request:
564564 proto: HTTP/1.1
565565 proto_major: 1
566566 proto_minor: 1
567− content_length: 36462
567+ content_length: 34497
568568 host: ""
569− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6edb28097a757377\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/main.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me find and read the main.go file first.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\",\"tool_call_id\":\"call_6edb28097a757377\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_0850fc4e3649ae50\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_0850fc4e3649ae50\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
569+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_336a65a4f1974f07938cae66\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/main.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me find and read the main.go file first.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\",\"tool_call_id\":\"call_336a65a4f1974f07938cae66\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_009a902e80d94744baddc43c\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n</file>\\n\",\"tool_call_id\":\"call_009a902e80d94744baddc43c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
570570 headers:
571571 Accept:
572572 - application/json
@@ -583,91 +583,63 @@ interactions:
583583 content_length: -1
584584 uncompressed: true
585585 body: |+
586− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
587−
588− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_48000f2cf2781c84","type":"function","index":0,"function":{"name":"edit","arguments":""}}]},"finish_reason":null}]}
589−
590− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
591−
592− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
593−
594− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
595−
596− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
597−
598− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
599−
600− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
601−
602− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
603−
604− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
586+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
605587
606− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
588+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_37b8cae848074063b7be4bd2","type":"function","index":0,"function":{"name":"edit","arguments":""}}]},"finish_reason":null}]}
607589
608− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
590+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
609591
610− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
592+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
611593
612− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
594+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": \"/tmp"}}]},"finish_reason":null}]}
613595
614− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
596+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/crush"}}]},"finish_reason":null}]}
615597
616− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
598+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
617599
618− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/update"}}]},"finish_reason":null}]}
600+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
619601
620− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
621603
622− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
604+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
623605
624− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
606+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/glm"}}]},"finish_reason":null}]}
625607
626− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
608+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-5"}}]},"finish_reason":null}]}
627609
628− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".1"}}]},"finish_reason":null}]}
629611
630− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"new_string\": \""}}]},"finish_reason":null}]}
612+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/update_a"}}]},"finish_reason":null}]}
631613
632− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\tfmt"}}]},"finish_reason":null}]}
614+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
633615
634− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
616+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main.go"}}]},"finish_reason":null}]}
635617
636− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
618+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", "}}]},"finish_reason":null}]}
637619
638− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"hello"}}]},"finish_reason":null}]}
620+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"new_string\": "}}]},"finish_reason":null}]}
639621
640− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" from"}}]},"finish_reason":null}]}
622+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"fmt"}}]},"finish_reason":null}]}
641623
642− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" crush"}}]},"finish_reason":null}]}
624+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println(\\\"Hello"}}]},"finish_reason":null}]}
643625
644− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\")"}}]},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" from crush"}}]},"finish_reason":null}]}
645627
646− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
628+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")\", "}}]},"finish_reason":null}]}
647629
648− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"old_string\": \""}}]},"finish_reason":null}]}
630+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"old_string\": "}}]},"finish_reason":null}]}
649631
650− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\tfmt"}}]},"finish_reason":null}]}
632+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"fmt.Println(\\\"Hello"}}]},"finish_reason":null}]}
651633
652− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
634+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", World"}}]},"finish_reason":null}]}
653635
654− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
636+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")\""}}]},"finish_reason":null}]}
655637
656− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
638+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
657639
658− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
640+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
659641
660− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" World"}}]},"finish_reason":null}]}
661−
662− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")"}}]},"finish_reason":null}]}
663−
664− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
665−
666− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
667−
668− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
669−
670− data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":90,"completion_tokens":55,"total_tokens":8340,"prompt_tokens_details":{"cached_tokens":8195},"cost":{"usd":0.000368,"hypercredits":0.007359999999999999},"remaining":{"hypercredits":0}}}
642+ data: {"id":"chatcmpl-24a95c8d63629662a3c0d8c8","object":"chat.completion.chunk","created":1778597303,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":123,"completion_tokens":55,"total_tokens":7922,"prompt_tokens_details":{"cached_tokens":7744},"completion_tokens_details":{"reasoning_tokens":54}}}
671643
672644 data: [DONE]
673645
@@ -676,15 +648,15 @@ interactions:
676648 - text/event-stream
677649 status: 200 OK
678650 code: 200
679− duration: 1.046375s
651+ duration: 5.29761375s
680652- id: 4
681653 request:
682654 proto: HTTP/1.1
683655 proto_major: 1
684656 proto_minor: 1
685− content_length: 36991
657+ content_length: 35037
686658 host: ""
687− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6edb28097a757377\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/main.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me find and read the main.go file first.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\",\"tool_call_id\":\"call_6edb28097a757377\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_0850fc4e3649ae50\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_0850fc4e3649ae50\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_48000f2cf2781c84\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\\", \\\"new_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"hello from crush\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}\",\"name\":\"edit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nContent replaced in file: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\n</result>\\n\",\"tool_call_id\":\"call_48000f2cf2781c84\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
659+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_336a65a4f1974f07938cae66\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/main.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me find and read the main.go file first.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\",\"tool_call_id\":\"call_336a65a4f1974f07938cae66\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_009a902e80d94744baddc43c\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n</file>\\n\",\"tool_call_id\":\"call_009a902e80d94744baddc43c\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_37b8cae848074063b7be4bd2\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\\", \\\"new_string\\\": \\\"fmt.Println(\\\\\\\"Hello from crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"fmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}\",\"name\":\"edit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nContent replaced in file: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\n</result>\\n\",\"tool_call_id\":\"call_37b8cae848074063b7be4bd2\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
688660 headers:
689661 Accept:
690662 - application/json
@@ -701,41 +673,29 @@ interactions:
701673 content_length: -1
702674 uncompressed: true
703675 body: |+
704− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
705−
706− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Updated"},"finish_reason":null}]}
707−
708− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
709−
710− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
711−
712− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
713−
714− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
715−
716− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6"},"finish_reason":null}]}
676+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
717677
718− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
678+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
719679
720− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
680+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
721681
722− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" print"},"finish_reason":null}]}
682+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" updated `main"},"finish_reason":null}]}
723683
724− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `\""},"finish_reason":null}]}
684+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
725685
726− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"hello"},"finish_reason":null}]}
686+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":6"},"finish_reason":null}]}
727687
728− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
688+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` to print"},"finish_reason":null}]}
729689
730− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" crush"},"finish_reason":null}]}
690+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `\"Hello"},"finish_reason":null}]}
731691
732− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null}]}
692+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from crush"},"finish_reason":null}]}
733693
734− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
694+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!\"`."},"finish_reason":null}]}
735695
736− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
696+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
737697
738− data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":216,"completion_tokens":17,"total_tokens":8392,"prompt_tokens_details":{"cached_tokens":8159},"cost":{"usd":0.0003772,"hypercredits":0.0075439999999999995},"remaining":{"hypercredits":0}}}
698+ data: {"id":"chatcmpl-31f9d9d9ccc6ba0c5f4124ec","object":"chat.completion.chunk","created":1778597308,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":149,"completion_tokens":19,"total_tokens":7976,"prompt_tokens_details":{"cached_tokens":7808},"completion_tokens_details":{"reasoning_tokens":18}}}
739699
740700 data: [DONE]
741701
@@ -744,4 +704,4 @@ interactions:
744704 - text/event-stream
745705 status: 200 OK
746706 code: 200
747− duration: 1.174163042s
707+ duration: 4.751869542s
internal/agent/testdata/TestCoderAgent/glm-5.1/write_tool.yaml+147−315
@@ -25,323 +25,199 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" task"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"max"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" write"},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summarize"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Content"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" new"},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
7171
72− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" called"},"finish_reason":null}]}
7373
74− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
7575
76− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" write"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
7777
78− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
7979
80− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
8181
82− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '{\""},"finish_reason":null}]}
8383
84− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" new"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"name"},"finish_reason":null}]}
8585
86− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
8787
88− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" called"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
8989
90− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"test"},"finish_reason":null}]}
9191
92− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\","},"finish_reason":null}]}
9393
94− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
9595
96− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"version"},"finish_reason":null}]}
9797
98− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '{\""},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
9999
100− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"name"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
101101
102− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
103103
104− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
105105
106− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"test"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
107107
108− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\","},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
109109
110− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
111111
112− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"version"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"}"},"finish_reason":null}]}
113113
114− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
115115
116− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
117117
118− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
119119
120− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
121121
122− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
123123
124− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
125125
126− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
127127
128− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"}"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
129129
130− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
131131
132− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
133133
134− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
135135
136− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
137137
138− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
139139
140− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
141141
142− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
143143
144− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
145145
146− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
147147
148− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
149149
150− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
151151
152− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
153153
154− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" metadata"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
155155
156− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
157157
158− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
159159
160− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
161161
162− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
163163
164− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
165165
166− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" JSON"},"finish_reason":null}]}
167167
168− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
169169
170− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
171171
172− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
173173
174− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
175175
176− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" metadata"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ~"},"finish_reason":null}]}
177177
178− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
179179
180− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
181181
182− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
183183
184− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
185185
186− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
187187
188− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That"},"finish_reason":null}]}
189189
190− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" works"},"finish_reason":null}]}
191191
192− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
193193
194− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Create"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
195195
196− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" only"},"finish_reason":null}]}
197197
198− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
199199
200− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
201201
202− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
203203
204− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" config"},"finish_reason":null}]}
205205
206− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".json"},"finish_reason":null}]}
207207
208− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
209209
210− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
211211
212− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" specified"},"finish_reason":null}]}
213213
214− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" inc"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" JSON"},"finish_reason":null}]}
215215
216− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" dot"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}]}
217217
218− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
219219
220− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
221−
222− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
223−
224− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
225−
226− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
227−
228− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
229−
230− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
231−
232− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
233−
234− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
235−
236− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
237−
238− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
239−
240− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
241−
242− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
243−
244− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
245−
246− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
247−
248− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" metadata"},"finish_reason":null}]}
249−
250− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
251−
252− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
253−
254− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
255−
256− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
257−
258− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
259−
260− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
261−
262− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
263−
264− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
265−
266− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
267−
268− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
269−
270− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
271−
272− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
273−
274− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
275−
276− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
277−
278− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
279−
280− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
281−
282− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
283−
284− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
285−
286− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
287−
288− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
289−
290− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
291−
292− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
293−
294− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
295−
296− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
297−
298− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
299−
300− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
301−
302− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
303−
304− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
305−
306− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
307−
308− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
309−
310− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
311−
312− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
313−
314− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
315−
316− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
317−
318− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
319−
320− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
321−
322− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
323−
324− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
325−
326− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
327−
328− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
329−
330− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
331−
332− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" config"},"finish_reason":null}]}
333−
334− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".json"},"finish_reason":null}]}
335−
336− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
337−
338− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
339−
340− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" metadata"},"finish_reason":null}]}
341−
342− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
343−
344− data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":165,"completion_tokens":166,"total_tokens":399,"prompt_tokens_details":{"cached_tokens":68},"completion_tokens_details":{"reasoning_tokens":128},"cost":{"usd":0.00019294800000000002,"hypercredits":0.0038589600000000003},"remaining":{"hypercredits":0}}}
220+ data: {"id":"chatcmpl-50b975254995a7832e8d116e","object":"chat.completion.chunk","created":1778597417,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":39,"completion_tokens":104,"total_tokens":335,"prompt_tokens_details":{"cached_tokens":192}}}
345221
346222 data: [DONE]
347223
@@ -350,15 +226,15 @@ interactions:
350226 - text/event-stream
351227 status: 200 OK
352228 code: 200
353− duration: 829.085792ms
229+ duration: 628.04575ms
354230- id: 1
355231 request:
356232 proto: HTTP/1.1
357233 proto_major: 1
358234 proto_minor: 1
359− content_length: 35688
235+ content_length: 33700
360236 host: ""
361− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use write to create a new file called config.json with content '{\\\"name\\\": \\\"test\\\", \\\"version\\\": \\\"1.0.0\\\"}'\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
237+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use write to create a new file called config.json with content '{\\\"name\\\": \\\"test\\\", \\\"version\\\": \\\"1.0.0\\\"}'\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
362238 headers:
363239 Accept:
364240 - application/json
@@ -375,109 +251,77 @@ interactions:
375251 content_length: -1
376252 uncompressed: true
377253 body: |+
378− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
379−
380− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Simple"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
381255
382− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" task"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
383257
384− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" -"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
385259
386− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants me"},"finish_reason":null}]}
387261
388− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" write"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to create a file"},"finish_reason":null}]}
389263
390− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" called"},"finish_reason":null}]}
391265
392− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" config.json"},"finish_reason":null}]}
393267
394− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" with specific"},"finish_reason":null}]}
395269
396− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
397271
398− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
399273
400− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_d1b12a23ddb7642c","type":"function","index":0,"function":{"name":"write","arguments":""}}]},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_cfe39ee91a8b4ed1bf19bd9c","type":"function","index":0,"function":{"name":"write","arguments":""}}]},"finish_reason":null}]}
401275
402− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"content\": \""}}]},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
403277
404− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\\\""}}]},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
405279
406− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"name"}}]},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"content\": "}}]},"finish_reason":null}]}
407281
408− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\":"}}]},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"{\\\"name\\\":"}}]},"finish_reason":null}]}
409283
410− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\"test\\\", \\\""}}]},"finish_reason":null}]}
411285
412− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"test"}}]},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"version\\\":"}}]},"finish_reason":null}]}
413287
414− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\","}}]},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\"1"}}]},"finish_reason":null}]}
415289
416− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".0"}}]},"finish_reason":null}]}
417291
418− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"version"}}]},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".0"}}]},"finish_reason":null}]}
419293
420− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\":"}}]},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\"}\", "}}]},"finish_reason":null}]}
421295
422− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
423297
424− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp/c"}}]},"finish_reason":null}]}
425299
426− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
427301
428− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"0"}}]},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
429303
430− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
431305
432− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"0"}}]},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
433307
434− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\"}"}}]},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
435309
436− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/glm"}}]},"finish_reason":null}]}
437311
438− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"file_path\": \""}}]},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-5"}}]},"finish_reason":null}]}
439313
440− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".1/write"}}]},"finish_reason":null}]}
441315
442− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool/config"}}]},"finish_reason":null}]}
443317
444− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".json\""}}]},"finish_reason":null}]}
445319
446− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
447321
448− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
449323
450− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
451−
452− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
453−
454− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
455−
456− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
457−
458− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
459−
460− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
461−
462− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
463−
464− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
465−
466− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/write"}}]},"finish_reason":null}]}
467−
468− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
469−
470− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/config"}}]},"finish_reason":null}]}
471−
472− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".json"}}]},"finish_reason":null}]}
473−
474− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
475−
476− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
477−
478− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
479−
480− data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":695,"completion_tokens":59,"total_tokens":8233,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":13},"cost":{"usd":0.0012898,"hypercredits":0.025796},"remaining":{"hypercredits":0}}}
324+ data: {"id":"chatcmpl-bdbb47911bccc0e369beda19","object":"chat.completion.chunk","created":1778597419,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":720,"completion_tokens":64,"total_tokens":7824,"prompt_tokens_details":{"cached_tokens":7040},"completion_tokens_details":{"reasoning_tokens":15}}}
481325
482326 data: [DONE]
483327
@@ -486,15 +330,15 @@ interactions:
486330 - text/event-stream
487331 status: 200 OK
488332 code: 200
489− duration: 2.580281959s
333+ duration: 2.831418292s
490334- id: 2
491335 request:
492336 proto: HTTP/1.1
493337 proto_major: 1
494338 proto_minor: 1
495− content_length: 36227
339+ content_length: 34281
496340 host: ""
497− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use write to create a new file called config.json with content '{\\\"name\\\": \\\"test\\\", \\\"version\\\": \\\"1.0.0\\\"}'\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_d1b12a23ddb7642c\",\"function\":{\"arguments\":\"{\\\"content\\\": \\\"{\\\\\\\"name\\\\\\\": \\\\\\\"test\\\\\\\", \\\\\\\"version\\\\\\\": \\\\\\\"1.0.0\\\\\\\"}\\\", \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/write_tool/config.json\\\"}\",\"name\":\"write\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Simple task - use write tool to create config.json\"},{\"content\":\"<result>\\nFile successfully written: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool/config.json\\n</result>\",\"tool_call_id\":\"call_d1b12a23ddb7642c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
341+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use write to create a new file called config.json with content '{\\\"name\\\": \\\"test\\\", \\\"version\\\": \\\"1.0.0\\\"}'\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_cfe39ee91a8b4ed1bf19bd9c\",\"function\":{\"arguments\":\"{\\\"content\\\": \\\"{\\\\\\\"name\\\\\\\": \\\\\\\"test\\\\\\\", \\\\\\\"version\\\\\\\": \\\\\\\"1.0.0\\\\\\\"}\\\", \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/write_tool/config.json\\\"}\",\"name\":\"write\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to create a file called config.json with specific content.\"},{\"content\":\"<result>\\nFile successfully written: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool/config.json\\n</result>\",\"tool_call_id\":\"call_cfe39ee91a8b4ed1bf19bd9c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 200KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
498342 headers:
499343 Accept:
500344 - application/json
@@ -511,31 +355,19 @@ interactions:
511355 content_length: -1
512356 uncompressed: true
513357 body: |+
514− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
515−
516− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Created"},"finish_reason":null}]}
517−
518− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
519−
520− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"config"},"finish_reason":null}]}
521−
522− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".json"},"finish_reason":null}]}
523−
524− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
525−
526− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-82adba299624c24b80addd0a","object":"chat.completion.chunk","created":1778597427,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
527359
528− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-82adba299624c24b80addd0a","object":"chat.completion.chunk","created":1778597427,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Created"},"finish_reason":null}]}
529361
530− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" specified"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-82adba299624c24b80addd0a","object":"chat.completion.chunk","created":1778597427,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
531363
532− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-82adba299624c24b80addd0a","object":"chat.completion.chunk","created":1778597427,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"config.json"},"finish_reason":null}]}
533365
534− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-82adba299624c24b80addd0a","object":"chat.completion.chunk","created":1778597427,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
535367
536− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
368+ data: {"id":"chatcmpl-82adba299624c24b80addd0a","object":"chat.completion.chunk","created":1778597427,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
537369
538− data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":83,"completion_tokens":12,"total_tokens":8268,"prompt_tokens_details":{"cached_tokens":8173},"cost":{"usd":0.000169,"hypercredits":0.0033799999999999998},"remaining":{"hypercredits":0}}}
370+ data: {"id":"chatcmpl-82adba299624c24b80addd0a","object":"chat.completion.chunk","created":1778597427,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":98,"completion_tokens":7,"total_tokens":7849,"prompt_tokens_details":{"cached_tokens":7744},"completion_tokens_details":{"reasoning_tokens":6}}}
539371
540372 data: [DONE]
541373
@@ -544,4 +376,4 @@ interactions:
544376 - text/event-stream
545377 status: 200 OK
546378 code: 200
547− duration: 1.15275075s
379+ duration: 6.412358459s
internal/agent/tools/bash.go+27−16
@@ -12,8 +12,6 @@ import (
1212 "strings"
1313 "time"
1414
15− "github.com/charmbracelet/x/ansi"
16−
1715 "charm.land/fantasy"
1816 "github.com/charmbracelet/crush/internal/config"
1917 "github.com/charmbracelet/crush/internal/fsext"
@@ -69,7 +67,6 @@ type bashDescriptionData struct {
6967 Attribution config.Attribution
7068 ModelID string
7169 RgAvailable bool
72− GhAvailable bool
7370}
7471
7572var bannedCommands = []string{
@@ -154,7 +151,6 @@ func bashDescription(attribution *config.Attribution, modelID string) string {
154151 Attribution: *attribution,
155152 ModelID: modelID,
156153 RgAvailable: getRg() != "",
157− GhAvailable: ghAvailable,
158154 }); err != nil {
159155 // this should never happen.
160156 panic("failed to execute bash description template: " + err.Error())
@@ -206,15 +202,24 @@ func NewBashTool(permissions permission.Service, workingDir string, attribution
206202 // Determine working directory
207203 execWorkingDir := cmp.Or(params.WorkingDir, workingDir)
208204
209− isSafeReadOnly := isSafeReadOnly(params.Command)
205+ isSafeReadOnly := false
206+ cmdLower := strings.ToLower(params.Command)
207+
208+ for _, safe := range safeCommands {
209+ if strings.HasPrefix(cmdLower, safe) {
210+ if len(cmdLower) == len(safe) || cmdLower[len(safe)] == ' ' || cmdLower[len(safe)] == '-' {
211+ isSafeReadOnly = true
212+ break
213+ }
214+ }
215+ }
210216
211217 sessionID := GetSessionFromContext(ctx)
212218 if sessionID == "" {
213219 return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for executing shell command")
214220 }
215221 if !isSafeReadOnly {
216− p, err := permissions.Request(
217− ctx,
222+ p, err := permissions.Request(ctx,
218223 permission.CreatePermissionRequest{
219224 SessionID: sessionID,
220225 Path: execWorkingDir,
@@ -250,7 +255,7 @@ func NewBashTool(permissions permission.Service, workingDir string, attribution
250255
251256 if done {
252257 // Command failed or completed very quickly
253− _ = bgManager.Remove(bgShell.ID)
258+ bgManager.Remove(bgShell.ID)
254259
255260 interrupted := shell.IsInterrupt(execErr)
256261 exitCode := shell.ExitCode(execErr)
@@ -325,7 +330,7 @@ func NewBashTool(permissions permission.Service, workingDir string, attribution
325330 case <-ctx.Done():
326331 // Incoming context was cancelled before we moved to background
327332 // Kill the shell and return error
328− _ = bgManager.Kill(bgShell.ID)
333+ bgManager.Kill(bgShell.ID)
329334 return fantasy.ToolResponse{}, ctx.Err()
330335 }
331336 }
@@ -334,7 +339,7 @@ func NewBashTool(permissions permission.Service, workingDir string, attribution
334339 // Command completed within threshold - return synchronously
335340 // Remove from background manager since we're returning directly
336341 // Don't call Kill() as it cancels the context and corrupts the exit code
337− _ = bgManager.Remove(bgShell.ID)
342+ bgManager.Remove(bgShell.ID)
338343
339344 interrupted := shell.IsInterrupt(execErr)
340345 exitCode := shell.ExitCode(execErr)
@@ -370,8 +375,7 @@ func NewBashTool(permissions permission.Service, workingDir string, attribution
370375 }
371376 response := fmt.Sprintf("Command is taking longer than expected and has been moved to background.\n\nBackground shell ID: %s\n\nUse job_output tool to view output or job_kill to terminate.", bgShell.ID)
372377 return fantasy.WithResponseMetadata(fantasy.NewTextResponse(response), metadata), nil
373− },
374− )
378+ })
375379}
376380
377381// formatOutput formats the output of a completed command with error handling
@@ -413,15 +417,15 @@ func formatOutput(stdout, stderr string, execErr error) string {
413417}
414418
415419func TruncateOutput(content string) string {
416− if ansi.StringWidth(content) <= MaxOutputLength {
420+ if len(content) <= MaxOutputLength {
417421 return content
418422 }
419423
420424 halfLength := MaxOutputLength / 2
421− start := ansi.Truncate(content, halfLength, "")
422− end := ansi.TruncateLeft(content, ansi.StringWidth(content)-halfLength, "")
425+ start := content[:halfLength]
426+ end := content[len(content)-halfLength:]
423427
424− truncatedLinesCount := max(strings.Count(content, "\n")-strings.Count(start, "\n")-strings.Count(end, "\n"), 0)
428+ truncatedLinesCount := countLines(content[halfLength : len(content)-halfLength])
425429 return fmt.Sprintf("%s\n\n... [%d lines truncated] ...\n\n%s", start, truncatedLinesCount, end)
426430}
427431
@@ -429,6 +433,13 @@ func truncateOutput(content string) string {
429433 return TruncateOutput(content)
430434}
431435
436+func countLines(s string) int {
437+ if s == "" {
438+ return 0
439+ }
440+ return len(strings.Split(s, "\n"))
441+}
442+
432443func normalizeWorkingDir(path string) string {
433444 if runtime.GOOS == "windows" {
434445 path = strings.ReplaceAll(path, fsext.WindowsWorkingDirDrive(), "")
internal/agent/tools/bash.md.tpl+33−61
@@ -45,31 +45,6 @@ Common shell builtins and core utils available on Windows.
4545 * Short-lived scripts
4646</background_execution>
4747
48−<git_message_quality>
49−These rules apply whenever creating or updating commit messages, PR titles, or PR bodies:
50−
51−- Messages MUST be understandable to someone unfamiliar with the codebase.
52−- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.
53−- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.
54−- Bad: "Add NameFromHex with sync.Once lazy init"
55−- Good: "Improve color name lookup performance while keeping startup fast"
56−</git_message_quality>
57−
58−<commit_messages>
59−Commit messages are for future readers scanning history. Before committing:
60−
61−- Follow <git_message_quality>.
62−- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.
63−- Use clear, accurate verbs ("add"=new capability, "update"=enhancement, "fix"=bug fix) and avoid generic messages.
64−- The first line MUST be under 72 characters.
65−- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.
66−- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.
67−- Bad: "fix: nil pointer in session.go"
68−- Good: "fix: prevent session loading from crashing on missing metadata"
69−- Bad: "refactor: move PromptBuilder into internal/agent"
70−- Good: "refactor: make prompt assembly easier to maintain"
71−</commit_messages>
72−
7348<git_commits>
7449When user asks to create git commit:
7550
@@ -83,42 +58,38 @@ When user asks to create git commit:
83583. Analyze staged changes in <commit_analysis> tags:
8459 - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)
8560 - Brainstorm purpose/motivation, assess project impact, check for sensitive info
86− - Don't use tools beyond the context of git
87−
88−4. Draft a commit message:
89− - Follow <commit_messages>
90− - Review draft against the litmus test before committing
61+ - Don't use tools beyond git context
62+ - Draft concise (1-2 sentences) message focusing on "why" not "what"
63+ - Use clear language, accurate reflection ("add"=new feature, "update"=enhancement, "fix"=bug fix)
64+ - Avoid generic messages, review draft
9165
92−5. Create commit{{ if or (eq .Attribution.TrailerStyle "assisted-by") (eq .Attribution.TrailerStyle "co-authored-by")}} with attribution{{ end }} using HEREDOC:
66+4. Create commit{{ if or (eq .Attribution.TrailerStyle "assisted-by") (eq .Attribution.TrailerStyle "co-authored-by")}} with attribution{{ end }} using HEREDOC:
9367 git commit -m "$(cat <<'EOF'
94−Commit message here.
68+ Commit message here.
9569
9670{{ if .Attribution.GeneratedWith }}
97−💘 Generated with Crush
71+ 💘 Generated with Crush
9872{{ end}}
9973{{if eq .Attribution.TrailerStyle "assisted-by" }}
10074
101−Assisted-by: Crush:{{ .ModelID }}
75+ Assisted-by: Crush:{{ .ModelID }}
10276{{ else if eq .Attribution.TrailerStyle "co-authored-by" }}
10377
104−Co-Authored-By: Crush <crush@charm.land>
78+ Co-Authored-By: Crush <crush@charm.land>
10579{{ end }}
106−EOF
107−)"
10880
109−6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.
81+ EOF
82+ )"
83+
84+5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.
11085
111−7. Run git status to verify.
86+6. Run git status to verify.
11287
113−Notes: Use "git commit -am" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.
88+Notes: Use "git commit -am" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m or GIT_EDITOR=true.
11489</git_commits>
11590
11691<pull_requests>
117−{{ if .GhAvailable -}}
118− Use the `gh` command for ALL GitHub tasks.
119−{{- end }}
120−
121−When user asks you to create or update a PR:
92+Use gh command for ALL GitHub tasks. When user asks to create PR:
12293
123941. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):
12495 - git status (untracked files)
@@ -127,9 +98,7 @@ When user asks you to create or update a PR:
12798 - git log and 'git diff main...HEAD' (full commit history from main divergence)
12899
1291002. Create new branch if needed
130−
1311013. Commit changes if needed
132−
1331024. Push to remote with -u flag if needed
134103
1351045. Analyze changes in <pr_analysis> tags:
@@ -139,27 +108,30 @@ When user asks you to create or update a PR:
139108 - Assess project impact
140109 - Don't use tools beyond git context
141110 - Check for sensitive information
142−
143−6. Draft a PR message:
144− - Follow <git_message_quality>
145111 - Draft concise (1-2 bullet points) PR summary focusing on "why"
146112 - Ensure summary reflects ALL changes since main divergence
147− - Use clear, concise language
148− - Provide an accurate reflection of changes and purpose
149− - Avoid generic summaries; messages should be thoughtful
150− - Review draft against the litmus test before creating or updating the PR
113+ - Clear, concise language
114+ - Accurate reflection of changes and purpose
115+ - Avoid generic summaries
116+ - Review draft
151117
152−7. Create PR with gh pr create using HEREDOC:
118+6. Create PR with gh pr create using HEREDOC:
153119 gh pr create --title "title" --body "$(cat <<'EOF'
154120
155−<summary>
121+ ## Summary
156122
157−{{ if .Attribution.GeneratedWith -}}
158−💘 Generated with Crush
159−{{- end }}
123+ <1-3 bullet points>
124+
125+ ## Test plan
126+
127+ [Checklist of TODOs...]
128+
129+{{ if .Attribution.GeneratedWith}}
130+ 💘 Generated with Crush
131+{{ end }}
160132
161−EOF
162−)"
133+ EOF
134+ )"
163135
164136Important:
165137
internal/agent/tools/bash_test.go+3−113
@@ -3,9 +3,7 @@ package tools
33import (
44 "context"
55 "encoding/json"
6− "strings"
76 "testing"
8− "unicode/utf8"
97
108 "charm.land/fantasy"
119 "github.com/charmbracelet/crush/internal/config"
@@ -23,13 +21,11 @@ func (m *mockBashPermissionService) Request(ctx context.Context, req permission.
2321 return true, nil
2422}
2523
26−func (m *mockBashPermissionService) Grant(req permission.PermissionRequest) bool { return true }
24+func (m *mockBashPermissionService) Grant(req permission.PermissionRequest) {}
2725
28−func (m *mockBashPermissionService) Deny(req permission.PermissionRequest) bool { return true }
26+func (m *mockBashPermissionService) Deny(req permission.PermissionRequest) {}
2927
30−func (m *mockBashPermissionService) GrantPersistent(req permission.PermissionRequest) bool {
31− return true
32−}
28+func (m *mockBashPermissionService) GrantPersistent(req permission.PermissionRequest) {}
3329
3430func (m *mockBashPermissionService) AutoApproveSession(sessionID string) {}
3531
@@ -83,91 +79,12 @@ func TestBashTool_CustomAutoBackgroundThreshold(t *testing.T) {
8379 require.NoError(t, bgManager.Kill(meta.ShellID))
8480}
8581
86−type recordingPermissionService struct {
87− *pubsub.Broker[permission.PermissionRequest]
88− requestCount int
89− allow bool
90−}
91−
92−func (m *recordingPermissionService) Request(ctx context.Context, req permission.CreatePermissionRequest) (bool, error) {
93− m.requestCount++
94− return m.allow, nil
95−}
96−
97−func (m *recordingPermissionService) Grant(req permission.PermissionRequest) bool { return true }
98−
99−func (m *recordingPermissionService) Deny(req permission.PermissionRequest) bool { return true }
100−
101−func (m *recordingPermissionService) GrantPersistent(req permission.PermissionRequest) bool {
102− return true
103−}
104−
105−func (m *recordingPermissionService) AutoApproveSession(sessionID string) {}
106−
107−func (m *recordingPermissionService) SetSkipRequests(skip bool) {}
108−
109−func (m *recordingPermissionService) SkipRequests() bool {
110− return false
111−}
112−
113−func (m *recordingPermissionService) SubscribeNotifications(ctx context.Context) <-chan pubsub.Event[permission.PermissionNotification] {
114− return make(<-chan pubsub.Event[permission.PermissionNotification])
115−}
116−
11782func newBashToolForTest(workingDir string) fantasy.AgentTool {
11883 permissions := &mockBashPermissionService{Broker: pubsub.NewBroker[permission.PermissionRequest]()}
11984 attribution := &config.Attribution{TrailerStyle: config.TrailerStyleNone}
12085 return NewBashTool(permissions, workingDir, attribution, "test-model")
12186}
12287
123−func newBashToolWithRecordingPerms(workingDir string, allow bool) (fantasy.AgentTool, *recordingPermissionService) {
124− perms := &recordingPermissionService{
125− Broker: pubsub.NewBroker[permission.PermissionRequest](),
126− allow: allow,
127− }
128− attribution := &config.Attribution{TrailerStyle: config.TrailerStyleNone}
129− return NewBashTool(perms, workingDir, attribution, "test-model"), perms
130−}
131−
132−func TestBashTool_ChainedCommandsRequirePermission(t *testing.T) {
133− workingDir := t.TempDir()
134− tool, perms := newBashToolWithRecordingPerms(workingDir, true)
135− ctx := context.WithValue(context.Background(), SessionIDContextKey, "test-session")
136−
137− // ls && echo should trigger permission check.
138− resp := runBashTool(t, tool, ctx, BashParams{
139− Description: "chained ls",
140− Command: "ls && echo done",
141− })
142−
143− require.False(t, resp.IsError)
144− require.Equal(t, 1, perms.requestCount, "chained command should trigger permission request")
145−
146− // Plain ls should NOT trigger permission check.
147− perms.requestCount = 0
148− resp = runBashTool(t, tool, ctx, BashParams{
149− Description: "plain ls",
150− Command: "ls -la",
151− })
152−
153− require.False(t, resp.IsError)
154− require.Equal(t, 0, perms.requestCount, "plain ls should not trigger permission request")
155−}
156−
157−func TestBashTool_ChainedCommandsDenied(t *testing.T) {
158− workingDir := t.TempDir()
159− tool, perms := newBashToolWithRecordingPerms(workingDir, false)
160− ctx := context.WithValue(context.Background(), SessionIDContextKey, "test-session")
161−
162− resp := runBashTool(t, tool, ctx, BashParams{
163− Description: "chained ls denied",
164− Command: "ls && rm -rf /",
165− })
166−
167− require.Equal(t, 1, perms.requestCount)
168− require.Contains(t, resp.Content, "User denied permission")
169−}
170−
17188func runBashTool(t *testing.T, tool fantasy.AgentTool, ctx context.Context, params BashParams) fantasy.ToolResponse {
17289 t.Helper()
17390
@@ -184,30 +101,3 @@ func runBashTool(t *testing.T, tool fantasy.AgentTool, ctx context.Context, para
184101 require.NoError(t, err)
185102 return resp
186103}
187−
188−func TestTruncateOutputValidUTF8(t *testing.T) {
189− t.Parallel()
190− // CJK characters are 2 cells wide; this string is far wider than
191− // MaxOutputLength so TruncateOutput must truncate it.
192− content := strings.Repeat("你好世界", MaxOutputLength)
193−
194− out := TruncateOutput(content)
195− require.True(t, utf8.ValidString(out), "truncated output must stay valid UTF-8")
196− require.Contains(t, out, "lines truncated")
197−}
198−
199−func TestTruncateOutputShortContent(t *testing.T) {
200− t.Parallel()
201− content := "short output"
202− require.Equal(t, content, TruncateOutput(content))
203−}
204−
205−func TestTruncateOutputEmoji(t *testing.T) {
206− t.Parallel()
207− // Emoji with ZWJ sequences should not be split.
208− content := strings.Repeat("👨‍👩‍👧‍👦", MaxOutputLength)
209−
210− out := TruncateOutput(content)
211− require.True(t, utf8.ValidString(out), "truncated output must stay valid UTF-8")
212− require.Contains(t, out, "lines truncated")
213−}
internal/agent/tools/crush_info.go+1−2
@@ -33,8 +33,7 @@ func NewCrushInfoTool(
3333 crushInfoDescription,
3434 func(ctx context.Context, _ CrushInfoParams, _ fantasy.ToolCall) (fantasy.ToolResponse, error) {
3535 return fantasy.NewTextResponse(buildCrushInfo(cfg, lspManager, allSkills, activeSkills, skillTracker)), nil
36− },
37− )
36+ })
3837}
3938
4039func buildCrushInfo(cfg *config.ConfigStore, lspManager *lsp.Manager, allSkills []*skills.Skill, activeSkills []*skills.Skill, skillTracker *skills.Tracker) string {
internal/agent/tools/crush_logs.go+3−21
@@ -5,7 +5,6 @@ import (
55 _ "embed"
66 "encoding/json"
77 "fmt"
8− "html/template"
98 "io"
109 "os"
1110 "path/filepath"
@@ -19,25 +18,8 @@ import (
1918
2019const CrushLogsToolName = "crush_logs"
2120
22−//go:embed crush_logs.md.tpl
23−var crushLogsDescriptionTmpl []byte
24−
25−var crushLogsDescriptionTpl = template.Must(
26− template.New("crushLogsDescription").
27− Parse(string(crushLogsDescriptionTmpl)),
28−)
29−
30−type crushLogsDescriptionData struct {
31− DefaultLines int
32− MaxLines int
33−}
34−
35−func crushLogsDescription() string {
36− return renderTemplate(crushLogsDescriptionTpl, crushLogsDescriptionData{
37− DefaultLines: defaultLogLines,
38− MaxLines: maxLogLines,
39− })
40−}
21+//go:embed crush_logs.md
22+var crushLogsDescription string
4123
4224// Max line size to prevent memory issues with very long log lines (1 MB).
4325const maxLogLineSize = 1024 * 1024
@@ -76,7 +58,7 @@ type CrushLogsParams struct {
7658func NewCrushLogsTool(logFile string) fantasy.AgentTool {
7759 return fantasy.NewAgentTool(
7860 CrushLogsToolName,
79− crushLogsDescription(),
61+ crushLogsDescription,
8062 func(ctx context.Context, params CrushLogsParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
8163 result := runCrushLogs(logFile, params)
8264 return fantasy.NewTextResponse(result), nil
internal/agent/tools/crush_logs.md.tpl → internal/agent/tools/crush_logs.mdrenamed+2−2
@@ -1,4 +1,4 @@
1−Read Crush's internal application logs (default {{ .DefaultLines }} entries, max {{ .MaxLines }}); useful for diagnosing provider errors, tool failures, LSP/MCP issues.
1+Read Crush's internal application logs (default 50 entries, max 100); useful for diagnosing provider errors, tool failures, LSP/MCP issues.
22
33<usage>
44- Returns recent log entries from Crush's internal log file
@@ -8,6 +8,6 @@ Read Crush's internal application logs (default {{ .DefaultLines }} entries, max
88</usage>
99
1010<tips>
11−- Default returns last {{ .DefaultLines }} entries; use lines parameter for more (max {{ .MaxLines }})
11+- Default returns last 50 entries; use lines parameter for more (max 100)
1212- Look for ERROR and WARN entries first when diagnosing problems
1313</tips>
internal/agent/tools/diagnostics.go+1−2
@@ -35,8 +35,7 @@ func NewDiagnosticsTool(lspManager *lsp.Manager) fantasy.AgentTool {
3535 notifyLSPs(ctx, lspManager, params.FilePath)
3636 output := getDiagnostics(params.FilePath, lspManager)
3737 return fantasy.NewTextResponse(output), nil
38− },
39− )
38+ })
4039}
4140
4241// openInLSPs ensures LSP servers are running and aware of the file, but does
internal/agent/tools/download.go+8−26
@@ -5,7 +5,6 @@ import (
55 "context"
66 _ "embed"
77 "fmt"
8− "html/template"
98 "io"
109 "net/http"
1110 "os"
@@ -32,23 +31,8 @@ type DownloadPermissionsParams struct {
3231
3332const DownloadToolName = "download"
3433
35−//go:embed download.md.tpl
36−var downloadDescriptionTmpl []byte
37−
38−var downloadDescriptionTpl = template.Must(
39− template.New("downloadDescription").
40− Parse(string(downloadDescriptionTmpl)),
41−)
42−
43−type downloadDescriptionData struct {
44− MaxDownloadTimeout int
45−}
46−
47−func downloadDescription() string {
48− return renderTemplate(downloadDescriptionTpl, downloadDescriptionData{
49− MaxDownloadTimeout: 600,
50− })
51−}
34+//go:embed download.md
35+var downloadDescription string
5236
5337func NewDownloadTool(permissions permission.Service, workingDir string, client *http.Client) fantasy.AgentTool {
5438 if client == nil {
@@ -64,10 +48,10 @@ func NewDownloadTool(permissions permission.Service, workingDir string, client *
6448 }
6549 return fantasy.NewParallelAgentTool(
6650 DownloadToolName,
67− downloadDescription(),
51+ downloadDescription,
6852 func(ctx context.Context, params DownloadParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
6953 if params.URL == "" {
70− return fantasy.NewTextErrorResponse("url parameter is required"), nil
54+ return fantasy.NewTextErrorResponse("URL parameter is required"), nil
7155 }
7256
7357 if params.FilePath == "" {
@@ -75,7 +59,7 @@ func NewDownloadTool(permissions permission.Service, workingDir string, client *
7559 }
7660
7761 if !strings.HasPrefix(params.URL, "http://") && !strings.HasPrefix(params.URL, "https://") {
78− return fantasy.NewTextErrorResponse("url must start with http:// or https://"), nil
62+ return fantasy.NewTextErrorResponse("URL must start with http:// or https://"), nil
7963 }
8064
8165 filePath := filepathext.SmartJoin(workingDir, params.FilePath)
@@ -87,8 +71,7 @@ func NewDownloadTool(permissions permission.Service, workingDir string, client *
8771 return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for downloading files")
8872 }
8973
90− p, err := permissions.Request(
91− ctx,
74+ p, err := permissions.Request(ctx,
9275 permission.CreatePermissionRequest{
9376 SessionID: sessionID,
9477 Path: filePath,
@@ -131,7 +114,7 @@ func NewDownloadTool(permissions permission.Service, workingDir string, client *
131114 defer resp.Body.Close()
132115
133116 if resp.StatusCode != http.StatusOK {
134− return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d", resp.StatusCode)), nil
117+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d", resp.StatusCode)), nil
135118 }
136119
137120 // Create parent directories if they don't exist
@@ -161,6 +144,5 @@ func NewDownloadTool(permissions permission.Service, workingDir string, client *
161144 }
162145
163146 return fantasy.NewTextResponse(responseMsg), nil
164− },
165− )
147+ })
166148}
internal/agent/tools/download.mdnew file+1
@@ -0,0 +1 @@
1+Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.
internal/agent/tools/download.md.tpldeleted−1
@@ -1 +0,0 @@
1−Download a URL directly to a local file (binary-safe, streaming, max {{ .MaxDownloadTimeout }}s timeout); overwrites without warning. For reading content into context use fetch.
internal/agent/tools/edit.go+13−46
@@ -104,8 +104,7 @@ func NewEditTool(
104104 text += getDiagnostics(params.FilePath, lspManager)
105105 response.Content = text
106106 return response, nil
107− },
108− )
107+ })
109108}
110109
111110func createNewFile(edit editContext, filePath, content string, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
@@ -134,8 +133,7 @@ func createNewFile(edit editContext, filePath, content string, call fantasy.Tool
134133 content,
135134 strings.TrimPrefix(filePath, edit.workingDir),
136135 )
137− p, err := edit.permissions.Request(
138− edit.ctx,
136+ p, err := edit.permissions.Request(edit.ctx,
139137 permission.CreatePermissionRequest{
140138 SessionID: sessionID,
141139 Path: fsext.PathOrPrefix(filePath, edit.workingDir),
@@ -154,14 +152,7 @@ func createNewFile(edit editContext, filePath, content string, call fantasy.Tool
154152 return fantasy.ToolResponse{}, err
155153 }
156154 if !p {
157− resp := NewPermissionDeniedResponse()
158− resp = fantasy.WithResponseMetadata(resp, EditResponseMetadata{
159− OldContent: "",
160− NewContent: content,
161− Additions: additions,
162− Removals: removals,
163− })
164− return resp, nil
155+ return NewPermissionDeniedResponse(), nil
165156 }
166157
167158 err = os.WriteFile(filePath, []byte(content), 0o644)
@@ -222,11 +213,9 @@ func deleteContent(edit editContext, filePath, oldString string, replaceAll bool
222213 modTime := fileInfo.ModTime().Truncate(time.Second)
223214 if modTime.After(lastRead) {
224215 return fantasy.NewTextErrorResponse(
225− fmt.Sprintf(
226− "file %s has been modified since it was last read (mod time: %s, last read: %s)",
216+ fmt.Sprintf("file %s has been modified since it was last read (mod time: %s, last read: %s)",
227217 filePath, modTime.Format(time.RFC3339), lastRead.Format(time.RFC3339),
228− ),
229− ), nil
218+ )), nil
230219 }
231220
232221 content, err := os.ReadFile(filePath)
@@ -263,8 +252,7 @@ func deleteContent(edit editContext, filePath, oldString string, replaceAll bool
263252 strings.TrimPrefix(filePath, edit.workingDir),
264253 )
265254
266− p, err := edit.permissions.Request(
267− edit.ctx,
255+ p, err := edit.permissions.Request(edit.ctx,
268256 permission.CreatePermissionRequest{
269257 SessionID: sessionID,
270258 Path: fsext.PathOrPrefix(filePath, edit.workingDir),
@@ -283,14 +271,7 @@ func deleteContent(edit editContext, filePath, oldString string, replaceAll bool
283271 return fantasy.ToolResponse{}, err
284272 }
285273 if !p {
286− resp := NewPermissionDeniedResponse()
287− resp = fantasy.WithResponseMetadata(resp, EditResponseMetadata{
288− OldContent: oldContent,
289− NewContent: newContent,
290− Additions: additions,
291− Removals: removals,
292− })
293− return resp, nil
274+ return NewPermissionDeniedResponse(), nil
294275 }
295276
296277 if isCrlf {
@@ -352,7 +333,7 @@ func replaceContent(edit editContext, filePath, oldString, newString string, rep
352333
353334 sessionID := GetSessionFromContext(edit.ctx)
354335 if sessionID == "" {
355− return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for editing a file")
336+ return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for edit a file")
356337 }
357338
358339 lastRead := edit.filetracker.LastReadTime(edit.ctx, sessionID, filePath)
@@ -363,11 +344,9 @@ func replaceContent(edit editContext, filePath, oldString, newString string, rep
363344 modTime := fileInfo.ModTime().Truncate(time.Second)
364345 if modTime.After(lastRead) {
365346 return fantasy.NewTextErrorResponse(
366− fmt.Sprintf(
367− "file %s has been modified since it was last read (mod time: %s, last read: %s)",
347+ fmt.Sprintf("file %s has been modified since it was last read (mod time: %s, last read: %s)",
368348 filePath, modTime.Format(time.RFC3339), lastRead.Format(time.RFC3339),
369− ),
370− ), nil
349+ )), nil
371350 }
372351
373352 content, err := os.ReadFile(filePath)
@@ -381,9 +360,6 @@ func replaceContent(edit editContext, filePath, oldString, newString string, rep
381360
382361 if replaceAll {
383362 newContent = strings.ReplaceAll(oldContent, oldString, newString)
384− if newContent == oldContent {
385− return oldStringNotFoundErr, nil
386− }
387363 } else {
388364 index := strings.Index(oldContent, oldString)
389365 if index == -1 {
@@ -407,8 +383,7 @@ func replaceContent(edit editContext, filePath, oldString, newString string, rep
407383 strings.TrimPrefix(filePath, edit.workingDir),
408384 )
409385
410− p, err := edit.permissions.Request(
411− edit.ctx,
386+ p, err := edit.permissions.Request(edit.ctx,
412387 permission.CreatePermissionRequest{
413388 SessionID: sessionID,
414389 Path: fsext.PathOrPrefix(filePath, edit.workingDir),
@@ -427,14 +402,7 @@ func replaceContent(edit editContext, filePath, oldString, newString string, rep
427402 return fantasy.ToolResponse{}, err
428403 }
429404 if !p {
430− resp := NewPermissionDeniedResponse()
431− resp = fantasy.WithResponseMetadata(resp, EditResponseMetadata{
432− OldContent: oldContent,
433− NewContent: newContent,
434− Additions: additions,
435− Removals: removals,
436− })
437− return resp, nil
405+ return NewPermissionDeniedResponse(), nil
438406 }
439407
440408 if isCrlf {
@@ -477,6 +445,5 @@ func replaceContent(edit editContext, filePath, oldString, newString string, rep
477445 NewContent: newContent,
478446 Additions: additions,
479447 Removals: removals,
480− },
481− ), nil
448+ }), nil
482449}
internal/agent/tools/fetch.go+15−29
@@ -30,18 +30,6 @@ var fetchDescriptionTpl = template.Must(
3030 Parse(string(fetchDescriptionTmpl)),
3131)
3232
33−type fetchDescriptionData struct {
34− GhAvailable bool
35− MaxFetchSizeKB int
36−}
37−
38−func fetchDescription() string {
39− return renderTemplate(fetchDescriptionTpl, fetchDescriptionData{
40− GhAvailable: ghAvailable,
41− MaxFetchSizeKB: MaxFetchSize / 1024,
42− })
43−}
44−
4533func NewFetchTool(permissions permission.Service, workingDir string, client *http.Client) fantasy.AgentTool {
4634 if client == nil {
4735 transport := http.DefaultTransport.(*http.Transport).Clone()
@@ -57,28 +45,27 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
5745
5846 return fantasy.NewParallelAgentTool(
5947 FetchToolName,
60− fetchDescription(),
48+ renderToolDescription(fetchDescriptionTpl),
6149 func(ctx context.Context, params FetchParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
6250 if params.URL == "" {
63− return fantasy.NewTextErrorResponse("url parameter is required"), nil
51+ return fantasy.NewTextErrorResponse("URL parameter is required"), nil
6452 }
6553
6654 format := strings.ToLower(params.Format)
6755 if format != "text" && format != "markdown" && format != "html" {
68− return fantasy.NewTextErrorResponse("format must be one of: text, markdown, html"), nil
56+ return fantasy.NewTextErrorResponse("Format must be one of: text, markdown, html"), nil
6957 }
7058
7159 if !strings.HasPrefix(params.URL, "http://") && !strings.HasPrefix(params.URL, "https://") {
72− return fantasy.NewTextErrorResponse("url must start with http:// or https://"), nil
60+ return fantasy.NewTextErrorResponse("URL must start with http:// or https://"), nil
7361 }
7462
7563 sessionID := GetSessionFromContext(ctx)
7664 if sessionID == "" {
77− return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for fetching content")
65+ return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for creating a new file")
7866 }
7967
80− p, err := permissions.Request(
81− ctx,
68+ p, err := permissions.Request(ctx,
8269 permission.CreatePermissionRequest{
8370 SessionID: sessionID,
8471 Path: workingDir,
@@ -124,19 +111,19 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
124111 defer resp.Body.Close()
125112
126113 if resp.StatusCode != http.StatusOK {
127− return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d", resp.StatusCode)), nil
114+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d", resp.StatusCode)), nil
128115 }
129116
130117 body, err := io.ReadAll(io.LimitReader(resp.Body, MaxFetchSize))
131118 if err != nil {
132− return fantasy.NewTextErrorResponse("failed to read response body: " + err.Error()), nil
119+ return fantasy.NewTextErrorResponse("Failed to read response body: " + err.Error()), nil
133120 }
134121
135122 content := string(body)
136123
137124 validUTF8 := utf8.ValidString(content)
138125 if !validUTF8 {
139− return fantasy.NewTextErrorResponse("response content is not valid UTF-8"), nil
126+ return fantasy.NewTextErrorResponse("Response content is not valid UTF-8"), nil
140127 }
141128 contentType := resp.Header.Get("Content-Type")
142129
@@ -145,7 +132,7 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
145132 if strings.Contains(contentType, "text/html") {
146133 text, err := extractTextFromHTML(content)
147134 if err != nil {
148− return fantasy.NewTextErrorResponse("failed to extract text from HTML: " + err.Error()), nil
135+ return fantasy.NewTextErrorResponse("Failed to extract text from HTML: " + err.Error()), nil
149136 }
150137 content = text
151138 }
@@ -154,7 +141,7 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
154141 if strings.Contains(contentType, "text/html") {
155142 markdown, err := convertHTMLToMarkdown(content)
156143 if err != nil {
157− return fantasy.NewTextErrorResponse("failed to convert HTML to Markdown: " + err.Error()), nil
144+ return fantasy.NewTextErrorResponse("Failed to convert HTML to Markdown: " + err.Error()), nil
158145 }
159146 content = markdown
160147 }
@@ -166,14 +153,14 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
166153 if strings.Contains(contentType, "text/html") {
167154 doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
168155 if err != nil {
169− return fantasy.NewTextErrorResponse("failed to parse HTML: " + err.Error()), nil
156+ return fantasy.NewTextErrorResponse("Failed to parse HTML: " + err.Error()), nil
170157 }
171158 body, err := doc.Find("body").Html()
172159 if err != nil {
173− return fantasy.NewTextErrorResponse("failed to extract body from HTML: " + err.Error()), nil
160+ return fantasy.NewTextErrorResponse("Failed to extract body from HTML: " + err.Error()), nil
174161 }
175162 if body == "" {
176− return fantasy.NewTextErrorResponse("no body content found in HTML"), nil
163+ return fantasy.NewTextErrorResponse("No body content found in HTML"), nil
177164 }
178165 content = "<html>\n<body>\n" + body + "\n</body>\n</html>"
179166 }
@@ -185,8 +172,7 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
185172 }
186173
187174 return fantasy.NewTextResponse(content), nil
188− },
189− )
175+ })
190176}
191177
192178func extractTextFromHTML(html string) (string, error) {
internal/agent/tools/fetch.md.tpl+1−1
@@ -1,2 +1,2 @@
1−Fetch raw content from a URL as text, markdown, or html (max {{ .MaxFetchSizeKB }}KB); no AI processing. For analysis or extraction use agentic_fetch.
1+Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.
22{{- if .GhAvailable }} For GitHub content when an exact repo, issue, or PR link is provided, use `gh` CLI in bash instead.{{- end }}
internal/agent/tools/glob.go+22−96
@@ -1,13 +1,11 @@
11package tools
22
33import (
4− "bufio"
54 "bytes"
65 "cmp"
76 "context"
87 _ "embed"
98 "fmt"
10− "html/template"
119 "log/slog"
1210 "os/exec"
1311 "path/filepath"
@@ -15,30 +13,14 @@ import (
1513 "strings"
1614
1715 "charm.land/fantasy"
18− "github.com/charmbracelet/crush/internal/config"
1916 "github.com/charmbracelet/crush/internal/filepathext"
2017 "github.com/charmbracelet/crush/internal/fsext"
2118)
2219
2320const GlobToolName = "glob"
2421
25−//go:embed glob.md.tpl
26−var globDescriptionTmpl []byte
27−
28−var globDescriptionTpl = template.Must(
29− template.New("globDescription").
30− Parse(string(globDescriptionTmpl)),
31−)
32−
33−type globDescriptionData struct {
34− MaxResults int
35−}
36−
37−func globDescription() string {
38− return renderTemplate(globDescriptionTpl, globDescriptionData{
39− MaxResults: 100,
40− })
41−}
22+//go:embed glob.md
23+var globDescription string
4224
4325type GlobParams struct {
4426 Pattern string `json:"pattern" description:"The glob pattern to match files against"`
@@ -50,10 +32,10 @@ type GlobResponseMetadata struct {
5032 Truncated bool `json:"truncated"`
5133}
5234
53−func NewGlobTool(workingDir string, cfg config.ToolGlob) fantasy.AgentTool {
35+func NewGlobTool(workingDir string) fantasy.AgentTool {
5436 return fantasy.NewAgentTool(
5537 GlobToolName,
56− globDescription(),
38+ globDescription,
5739 func(ctx context.Context, params GlobParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
5840 if params.Pattern == "" {
5941 return fantasy.NewTextErrorResponse("pattern is required"), nil
@@ -61,13 +43,7 @@ func NewGlobTool(workingDir string, cfg config.ToolGlob) fantasy.AgentTool {
6143
6244 searchPath := cmp.Or(params.Path, workingDir)
6345
64− // Bound the search so a huge or symlink-heavy root (e.g. $HOME
65− // or a module cache) fails cleanly instead of pinning the CPU
66− // and hanging the agent.
67− searchCtx, cancel := context.WithTimeout(ctx, cfg.GetTimeout())
68− defer cancel()
69−
70− files, truncated, err := globFiles(searchCtx, params.Pattern, searchPath, 100)
46+ files, truncated, err := globFiles(ctx, params.Pattern, searchPath, 100)
7147 if err != nil {
7248 return fantasy.NewTextErrorResponse(fmt.Sprintf("error finding files: %v", err)), nil
7349 }
@@ -90,92 +66,42 @@ func NewGlobTool(workingDir string, cfg config.ToolGlob) fantasy.AgentTool {
9066 Truncated: truncated,
9167 },
9268 ), nil
93− },
94− )
69+ })
9570}
9671
9772func globFiles(ctx context.Context, pattern, searchPath string, limit int) ([]string, bool, error) {
98− // Scope the walk to the pattern's literal directory prefix. A pattern
99− // like "internal/agent/*.go" only needs to walk "internal/agent", so we
100− // start there instead of enumerating the entire tree and filtering.
101− // Patterns that begin with a wildcard (e.g. "**/foo.go") have no prefix
102− // and still walk from searchPath.
103− prefix, rest := filepathext.SplitGlobPrefix(pattern)
104− walkRoot := searchPath
105− walkPattern := pattern
106− if prefix != "" {
107− walkRoot = filepath.Join(searchPath, prefix)
108− walkPattern = rest
109− }
110−
111− cmdRg := getRgCmd(ctx, walkPattern)
73+ cmdRg := getRgCmd(ctx, pattern)
11274 if cmdRg != nil {
113− cmdRg.Dir = walkRoot
114− matches, err := runRipgrep(cmdRg, walkRoot, limit)
75+ cmdRg.Dir = searchPath
76+ matches, err := runRipgrep(cmdRg, searchPath, limit)
11577 if err == nil {
11678 return matches, len(matches) >= limit && limit > 0, nil
11779 }
11880 slog.Warn("Ripgrep execution failed, falling back to doublestar", "error", err)
11981 }
12082
121− return fsext.GlobGitignoreAwareCtx(ctx, walkPattern, walkRoot, limit)
83+ return fsext.GlobGitignoreAware(pattern, searchPath, limit)
12284}
12385
12486func runRipgrep(cmd *exec.Cmd, searchRoot string, limit int) ([]string, error) {
125− // Stream ripgrep's stdout instead of buffering the whole file list.
126− // Over a huge root (e.g. $HOME) the full --files listing can be
127− // hundreds of MB; reading it all at once and then sorting allocated
128− // gigabytes. We read incrementally and stop once we have a bounded
129− // pool of candidates.
130− //
131− // We collect more than `limit` so the shortest-path preference below
132− // still has something to choose from, but the pool is capped so memory
133− // stays small (a few thousand paths) no matter how large the tree is.
134− candidatePool := max(limit*20, 1000)
135−
136− stdout, err := cmd.StdoutPipe()
87+ out, err := cmd.CombinedOutput()
13788 if err != nil {
138− return nil, fmt.Errorf("ripgrep: %w", err)
139− }
140− var stderr bytes.Buffer
141− cmd.Stderr = &stderr
142−
143− if err := cmd.Start(); err != nil {
144− return nil, fmt.Errorf("ripgrep: %w", err)
89+ if ee, ok := err.(*exec.ExitError); ok && ee.ExitCode() == 1 {
90+ return nil, nil
91+ }
92+ return nil, fmt.Errorf("ripgrep: %w\n%s", err, out)
14593 }
14694
14795 var matches []string
148− reader := bufio.NewReader(stdout)
149− for {
150− path, err := reader.ReadString(0)
151− if len(path) > 0 {
152− path = strings.TrimRight(path, "\x00")
153− if path != "" {
154− absPath := filepathext.SmartJoin(searchRoot, path)
155− if !fsext.SkipHidden(absPath) {
156− matches = append(matches, absPath)
157− }
158− }
96+ for p := range bytes.SplitSeq(out, []byte{0}) {
97+ if len(p) == 0 {
98+ continue
15999 }
160− if err != nil {
161− break // EOF or read error; drain handled by Wait below.
162− }
163− if len(matches) >= candidatePool {
164− // Enough candidates; stop reading and let the process be
165− // killed by the command context / Wait. Draining the rest
166− // would just buffer paths we are going to discard.
167− break
168− }
169− }
170−
171− // Close our end so ripgrep gets SIGPIPE and stops, then reap it.
172− _ = stdout.Close()
173− waitErr := cmd.Wait()
174− if waitErr != nil && len(matches) == 0 {
175− if ee, ok := waitErr.(*exec.ExitError); ok && ee.ExitCode() == 1 {
176− return nil, nil // No matches.
100+ absPath := filepathext.SmartJoin(searchRoot, string(p))
101+ if fsext.SkipHidden(absPath) {
102+ continue
177103 }
178− return nil, fmt.Errorf("ripgrep: %w\n%s", waitErr, stderr.String())
104+ matches = append(matches, absPath)
179105 }
180106
181107 sort.SliceStable(matches, func(i, j int) bool {
internal/agent/tools/glob.mdnew file+1
@@ -0,0 +1 @@
1+Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.
internal/agent/tools/glob.md.tpldeleted−1
@@ -1 +0,0 @@
1−Find files by name/pattern (glob syntax), sorted by modification time; max {{ .MaxResults }} results; skips hidden files. Use grep to search file contents.
internal/agent/tools/glob_test.godeleted−74
@@ -1,74 +0,0 @@
1−package tools
2−
3−import (
4− "context"
5− "os"
6− "path/filepath"
7− "testing"
8−
9− "github.com/stretchr/testify/require"
10−)
11−
12−func TestGlobFilesScopedPrefixMatchesUnscoped(t *testing.T) {
13− t.Parallel()
14−
15− root := t.TempDir()
16− mkfile := func(rel string) {
17− full := filepath.Join(root, rel)
18− require.NoError(t, os.MkdirAll(filepath.Dir(full), 0o755))
19− require.NoError(t, os.WriteFile(full, []byte("x"), 0o644))
20− }
21− mkfile("a/b/one.go")
22− mkfile("a/b/c/two.go")
23− mkfile("a/other.txt")
24− mkfile("z/three.go")
25−
26− got, _, err := globFiles(context.Background(), "a/**/*.go", root, 100)
27− require.NoError(t, err)
28− require.Len(t, got, 2)
29− for _, p := range got {
30− require.Contains(t, p, filepath.Join("a", "b"))
31− }
32−}
33−
34−func TestGlobFilesDoesNotFollowSymlinkEscape(t *testing.T) {
35− t.Parallel()
36−
37− // Build a project dir with a symlink pointing outside it. With symlink
38− // following disabled, the glob must not pick up files behind the link.
39− outside := t.TempDir()
40− require.NoError(t, os.WriteFile(filepath.Join(outside, "secret.go"), []byte("x"), 0o644))
41−
42− project := t.TempDir()
43− require.NoError(t, os.WriteFile(filepath.Join(project, "in.go"), []byte("x"), 0o644))
44− link := filepath.Join(project, "escape")
45− if err := os.Symlink(outside, link); err != nil {
46− t.Skipf("symlinks unsupported: %v", err)
47− }
48−
49− got, _, err := globFiles(context.Background(), "**/*.go", project, 100)
50− require.NoError(t, err)
51− for _, p := range got {
52− require.NotContains(t, p, "secret.go", "glob followed a symlink out of the search root")
53− }
54−}
55−
56−func TestGlobFilesCapsResultsOnLargeTree(t *testing.T) {
57− t.Parallel()
58−
59− // A tree with far more matches than the limit must still return at
60− // most `limit` results and report truncation, regardless of which
61− // backend (ripgrep or the doublestar fallback) runs.
62− root := t.TempDir()
63− for i := range 500 {
64− dir := filepath.Join(root, "pkg")
65− require.NoError(t, os.MkdirAll(dir, 0o755))
66− name := filepath.Join(dir, "file"+string(rune('a'+i%26))+string(rune('a'+(i/26)%26))+"_"+string(rune('0'+i%10))+".go")
67− require.NoError(t, os.WriteFile(name, []byte("x"), 0o644))
68− }
69−
70− got, truncated, err := globFiles(context.Background(), "**/*.go", root, 10)
71− require.NoError(t, err)
72− require.LessOrEqual(t, len(got), 10, "must not exceed limit")
73− require.True(t, truncated, "should report truncation on an over-limit tree")
74−}
internal/agent/tools/grep.go+14−47
@@ -8,7 +8,6 @@ import (
88 _ "embed"
99 "encoding/json"
1010 "fmt"
11− "html/template"
1211 "io"
1312 "net/http"
1413 "os"
@@ -23,7 +22,6 @@ import (
2322 "github.com/charmbracelet/crush/internal/config"
2423 "github.com/charmbracelet/crush/internal/csync"
2524 "github.com/charmbracelet/crush/internal/fsext"
26− "github.com/charmbracelet/x/ansi"
2725)
2826
2927// regexCache provides thread-safe caching of compiled regex patterns
@@ -91,23 +89,8 @@ const (
9189 maxGrepContentWidth = 500
9290)
9391
94−//go:embed grep.md.tpl
95−var grepDescriptionTmpl []byte
96−
97−var grepDescriptionTpl = template.Must(
98− template.New("grepDescription").
99− Parse(string(grepDescriptionTmpl)),
100−)
101−
102−type grepDescriptionData struct {
103− MaxResults int
104−}
105−
106−func grepDescription() string {
107− return renderTemplate(grepDescriptionTpl, grepDescriptionData{
108− MaxResults: 100,
109− })
110−}
92+//go:embed grep.md
93+var grepDescription string
11194
11295// escapeRegexPattern escapes special regex characters so they're treated as literal characters
11396func escapeRegexPattern(pattern string) string {
@@ -124,7 +107,7 @@ func escapeRegexPattern(pattern string) string {
124107func NewGrepTool(workingDir string, config config.ToolGrep) fantasy.AgentTool {
125108 return fantasy.NewAgentTool(
126109 GrepToolName,
127− grepDescription(),
110+ grepDescription,
128111 func(ctx context.Context, params GrepParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
129112 if params.Pattern == "" {
130113 return fantasy.NewTextErrorResponse("pattern is required"), nil
@@ -162,8 +145,8 @@ func NewGrepTool(workingDir string, config config.ToolGrep) fantasy.AgentTool {
162145 }
163146 if match.lineNum > 0 {
164147 lineText := match.lineText
165− if ansi.StringWidth(lineText) > maxGrepContentWidth {
166− lineText = ansi.Truncate(lineText, maxGrepContentWidth, "...")
148+ if len(lineText) > maxGrepContentWidth {
149+ lineText = lineText[:maxGrepContentWidth] + "..."
167150 }
168151 if match.charNum > 0 {
169152 fmt.Fprintf(&output, " Line %d, Char %d: %s\n", match.lineNum, match.charNum, lineText)
@@ -187,8 +170,7 @@ func NewGrepTool(workingDir string, config config.ToolGrep) fantasy.AgentTool {
187170 Truncated: truncated,
188171 },
189172 ), nil
190− },
191− )
173+ })
192174}
193175
194176func searchFiles(ctx context.Context, pattern, rootPath, include string, limit int) ([]grepMatch, bool, error) {
@@ -235,8 +217,6 @@ func searchWithRipgrep(ctx context.Context, pattern, path, include string) ([]gr
235217 }
236218
237219 var matches []grepMatch
238− // modTime is only used for sorting; stat each unique path once.
239− modTimes := make(map[string]time.Time)
240220 for line := range bytes.SplitSeq(bytes.TrimSpace(output), []byte{'\n'}) {
241221 if len(line) == 0 {
242222 continue
@@ -249,18 +229,13 @@ func searchWithRipgrep(ctx context.Context, pattern, path, include string) ([]gr
249229 continue
250230 }
251231 for _, m := range match.Data.Submatches {
252− modTime, ok := modTimes[match.Data.Path.Text]
253− if !ok {
254− fi, err := os.Stat(match.Data.Path.Text)
255− if err != nil {
256− continue // Skip files we can't access
257− }
258− modTime = fi.ModTime()
259− modTimes[match.Data.Path.Text] = modTime
232+ fi, err := os.Stat(match.Data.Path.Text)
233+ if err != nil {
234+ continue // Skip files we can't access
260235 }
261236 matches = append(matches, grepMatch{
262237 path: match.Data.Path.Text,
263− modTime: modTime,
238+ modTime: fi.ModTime(),
264239 lineNum: match.Data.LineNumber,
265240 charNum: m.Start + 1, // ensure 1-based
266241 lineText: strings.TrimSpace(match.Data.Lines.Text),
@@ -380,26 +355,18 @@ func fileContainsPattern(filePath string, pattern *regexp.Regexp) (bool, int, in
380355 }
381356 defer file.Close()
382357
383− reader := bufio.NewReader(file)
358+ scanner := bufio.NewScanner(file)
384359 lineNum := 0
385− for {
386− line, err := reader.ReadString('\n')
360+ for scanner.Scan() {
387361 lineNum++
388− line = strings.TrimSuffix(line, "\n")
389− line = strings.TrimSuffix(line, "\r")
362+ line := scanner.Text()
390363 if loc := pattern.FindStringIndex(line); loc != nil {
391364 charNum := loc[0] + 1
392365 return true, lineNum, charNum, line, nil
393366 }
394− if err == io.EOF {
395− break
396− }
397− if err != nil {
398− return false, 0, 0, "", err
399− }
400367 }
401368
402− return false, 0, 0, "", nil
369+ return false, 0, 0, "", scanner.Err()
403370}
404371
405372// isTextFile checks if a file is a text file by examining its MIME type.
internal/agent/tools/grep.mdnew file+1
@@ -0,0 +1 @@
1+Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.
internal/agent/tools/grep.md.tpldeleted−1
@@ -1 +0,0 @@
1−Search file contents by regex or literal text; returns matching file paths sorted by modification time (max {{ .MaxResults }}); respects .gitignore. Use glob to filter by filename, not contents.
internal/agent/tools/job_kill.go+1−2
@@ -55,6 +55,5 @@ func NewJobKillTool() fantasy.AgentTool {
5555
5656 result := fmt.Sprintf("Background shell %s terminated successfully", params.ShellID)
5757 return fantasy.WithResponseMetadata(fantasy.NewTextResponse(result), metadata), nil
58− },
59− )
58+ })
6059}
internal/agent/tools/job_output.go+1−2
@@ -87,6 +87,5 @@ func NewJobOutputTool() fantasy.AgentTool {
8787
8888 result := fmt.Sprintf("Status: %s\n\n%s", status, output)
8989 return fantasy.WithResponseMetadata(fantasy.NewTextResponse(result), metadata), nil
90− },
91− )
90+ })
9291}
internal/agent/tools/list_mcp_resources.go+1−2
@@ -44,8 +44,7 @@ func NewListMCPResourcesTool(cfg *config.ConfigStore, permissions permission.Ser
4444 }
4545
4646 relPath := filepathext.SmartJoin(cfg.WorkingDir(), params.MCPName)
47− p, err := permissions.Request(
48− ctx,
47+ p, err := permissions.Request(ctx,
4948 permission.CreatePermissionRequest{
5049 SessionID: sessionID,
5150 Path: relPath,
internal/agent/tools/ls.go+6−24
@@ -5,7 +5,6 @@ import (
55 "context"
66 _ "embed"
77 "fmt"
8− "html/template"
98 "os"
109 "path/filepath"
1110 "strings"
@@ -53,28 +52,13 @@ const (
5352 maxLSFiles = 1000
5453)
5554
56−//go:embed ls.md.tpl
57−var lsDescriptionTmpl []byte
58−
59−var lsDescriptionTpl = template.Must(
60− template.New("lsDescription").
61− Parse(string(lsDescriptionTmpl)),
62−)
63−
64−type lsDescriptionData struct {
65− MaxFiles int
66−}
67−
68−func lsDescription() string {
69− return renderTemplate(lsDescriptionTpl, lsDescriptionData{
70− MaxFiles: maxLSFiles,
71− })
72−}
55+//go:embed ls.md
56+var lsDescription string
7357
7458func NewLsTool(permissions permission.Service, workingDir string, lsConfig config.ToolLs) fantasy.AgentTool {
7559 return fantasy.NewAgentTool(
7660 LSToolName,
77− lsDescription(),
61+ lsDescription,
7862 func(ctx context.Context, params LSParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
7963 searchPath, err := fsext.Expand(cmp.Or(params.Path, workingDir))
8064 if err != nil {
@@ -102,8 +86,7 @@ func NewLsTool(permissions permission.Service, workingDir string, lsConfig confi
10286 return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for accessing directories outside working directory")
10387 }
10488
105− granted, err := permissions.Request(
106− ctx,
89+ granted, err := permissions.Request(ctx,
10790 permission.CreatePermissionRequest{
10891 SessionID: sessionID,
10992 Path: absSearchPath,
@@ -131,8 +114,7 @@ func NewLsTool(permissions permission.Service, workingDir string, lsConfig confi
131114 fantasy.NewTextResponse(output),
132115 metadata,
133116 ), nil
134− },
135− )
117+ })
136118}
137119
138120func ListDirectoryTree(searchPath string, params LSParams, lsConfig config.ToolLs) (string, LSResponseMetadata, error) {
@@ -163,7 +145,7 @@ func ListDirectoryTree(searchPath string, params LSParams, lsConfig config.ToolL
163145 output = fmt.Sprintf("There are more than %d files in the directory. Use a more specific path or use the Glob tool to find specific files. The first %[1]d files and directories are included below.\n", maxFiles)
164146 }
165147 if depth > 0 {
166− output += fmt.Sprintf("The directory tree is shown up to a depth of %d. Use a higher depth and a specific path to see more levels.\n", cmp.Or(params.Depth, depth))
148+ output = fmt.Sprintf("The directory tree is shown up to a depth of %d. Use a higher depth and a specific path to see more levels.\n", cmp.Or(params.Depth, depth))
167149 }
168150 return output + "\n" + printTree(tree, searchPath), metadata, nil
169151}
internal/agent/tools/ls.mdnew file+1
@@ -0,0 +1 @@
1+List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.
internal/agent/tools/ls.md.tpldeleted−1
@@ -1 +0,0 @@
1−List files and directories as a tree; skips hidden files and common system dirs; max {{ .MaxFiles }} files. Use glob to find files by pattern, grep to search contents.
internal/agent/tools/lsp_restart.go+1−2
@@ -75,6 +75,5 @@ func NewLSPRestartTool(lspManager *lsp.Manager) fantasy.AgentTool {
7575 }
7676
7777 return fantasy.NewTextResponse(output), nil
78− },
79− )
78+ })
8079}
internal/agent/tools/mcp-tools.go+3−4
@@ -99,14 +99,13 @@ func (m *Tool) Info() fantasy.ToolInfo {
9999func (m *Tool) Run(ctx context.Context, params fantasy.ToolCall) (fantasy.ToolResponse, error) {
100100 sessionID := GetSessionFromContext(ctx)
101101 if sessionID == "" {
102− return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for executing MCP tool")
102+ return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for creating a new file")
103103 }
104104
105105 // Skip permission for whitelisted Docker MCP tools.
106106 if !slices.Contains(whitelistDockerTools, params.Name) {
107107 permissionDescription := fmt.Sprintf("execute %s with the following parameters:", m.Info().Name)
108− p, err := m.permissions.Request(
109− ctx,
108+ p, err := m.permissions.Request(ctx,
110109 permission.CreatePermissionRequest{
111110 SessionID: sessionID,
112111 ToolCallID: params.ID,
@@ -134,7 +133,7 @@ func (m *Tool) Run(ctx context.Context, params fantasy.ToolCall) (fantasy.ToolRe
134133 case "image", "media":
135134 if !GetSupportsImagesFromContext(ctx) {
136135 modelName := GetModelNameFromContext(ctx)
137− return fantasy.NewTextErrorResponse(fmt.Sprintf("this model (%s) does not support image data.", modelName)), nil
136+ return fantasy.NewTextErrorResponse(fmt.Sprintf("This model (%s) does not support image data.", modelName)), nil
138137 }
139138
140139 var response fantasy.ToolResponse
internal/agent/tools/mcp/init.go+3−22
@@ -55,19 +55,11 @@ func (s *ClientSession) Close() error {
5555var (
5656 sessions = csync.NewMap[string, *ClientSession]()
5757 states = csync.NewMap[string, ClientInfo]()
58− // sessionLastOK records the last time a session was confirmed alive
59− // (successful ping or freshly created). Used to skip redundant pings
60− // within livenessTTL before each MCP tool call.
61− sessionLastOK = csync.NewMap[string, time.Time]()
62− broker = pubsub.NewBroker[Event]()
63− initOnce sync.Once
64− initDone = make(chan struct{})
58+ broker = pubsub.NewBroker[Event]()
59+ initOnce sync.Once
60+ initDone = make(chan struct{})
6561)
6662
67−// livenessTTL is how long a session is trusted to be alive after a successful
68−// ping/create before getOrRenewClient pings it again.
69−const livenessTTL = 30 * time.Second
70−
7163// State represents the current state of an MCP client
7264type State int
7365
@@ -268,7 +260,6 @@ func initClient(ctx context.Context, cfg *config.ConfigStore, name string, m con
268260 toolCount := updateTools(cfg, name, tools)
269261 updatePrompts(name, prompts)
270262 sessions.Set(name, session)
271− sessionLastOK.Set(name, time.Now())
272263
273264 updateState(name, StateConnected, nil, session, Counts{
274265 Tools: toolCount,
@@ -289,7 +280,6 @@ func DisableSingle(cfg *config.ConfigStore, name string) error {
289280 slog.Warn("Error closing MCP session", "name", name, "error", err)
290281 }
291282 sessions.Del(name)
292− sessionLastOK.Del(name)
293283 }
294284
295285 // Clear tools and prompts for this MCP.
@@ -309,11 +299,6 @@ func getOrRenewClient(ctx context.Context, cfg *config.ConfigStore, name string)
309299 return nil, fmt.Errorf("mcp '%s' not available", name)
310300 }
311301
312− // Skip the ping if this session was confirmed alive very recently.
313− if last, ok := sessionLastOK.Get(name); ok && time.Since(last) < livenessTTL {
314− return sess, nil
315− }
316−
317302 m := cfg.Config().MCP[name]
318303 state, _ := states.Get(name)
319304
@@ -322,10 +307,8 @@ func getOrRenewClient(ctx context.Context, cfg *config.ConfigStore, name string)
322307 defer cancel()
323308 err := sess.Ping(pingCtx, nil)
324309 if err == nil {
325− sessionLastOK.Set(name, time.Now())
326310 return sess, nil
327311 }
328− sessionLastOK.Del(name)
329312 updateState(name, StateError, maybeTimeoutErr(err, timeout), nil, state.Counts)
330313
331314 sess, err = createSession(ctx, name, m, cfg.Resolver())
@@ -335,7 +318,6 @@ func getOrRenewClient(ctx context.Context, cfg *config.ConfigStore, name string)
335318
336319 updateState(name, StateConnected, nil, sess, state.Counts)
337320 sessions.Set(name, sess)
338− sessionLastOK.Set(name, time.Now())
339321 return sess, nil
340322}
341323
@@ -353,7 +335,6 @@ func updateState(name string, state State, err error, client *ClientSession, cou
353335 info.ConnectedAt = time.Now()
354336 case StateError:
355337 sessions.Del(name)
356− sessionLastOK.Del(name)
357338 }
358339 states.Set(name, info)
359340
internal/agent/tools/mcp/init_test.go+5−4
@@ -376,7 +376,7 @@ func TestCreateTransport_HeadersResolution(t *testing.T) {
376376
377377 t.Run("sse unset var header drops silently", func(t *testing.T) {
378378 t.Parallel()
379− // Pinning test for empty-header drop + lenient nounset:
379+ // Pinning test for design decision #18 + lenient nounset:
380380 // a header whose value resolves to "" (here because the
381381 // bare $VAR is unset) is omitted from the round tripper
382382 // rather than sent as "X-Header:". Guards against a
@@ -488,9 +488,10 @@ func TestCreateSession_ResolutionFailureUpdatesState(t *testing.T) {
488488 },
489489 {
490490 // Bare $MISSING in a header resolves to "" silently
491− // and is then dropped. The "header Authorization"
492− // wrap only surfaces on a $(cmd) failure; that is
493− // what this subtest now pins for the SSE path.
491+ // and is then dropped (design decision #18). The
492+ // "header Authorization" wrap only surfaces on a
493+ // $(cmd) failure; that is what this subtest now
494+ // pins for the SSE path.
494495 name: "sse header failure",
495496 mcpName: "test-sse-header-fail",
496497 cfg: config.MCPConfig{
internal/agent/tools/mcp/tools.go+11−38
@@ -142,10 +142,7 @@ func getTools(ctx context.Context, session *ClientSession) ([]*Tool, error) {
142142}
143143
144144func updateTools(cfg *config.ConfigStore, name string, tools []*Tool) int {
145− mcpCfg, ok := cfg.Config().MCP[name]
146− if ok {
147− tools = filterTools(mcpCfg, tools)
148− }
145+ tools = filterDisabledTools(cfg, name, tools)
149146 if len(tools) == 0 {
150147 allTools.Del(name)
151148 return 0
@@ -154,30 +151,20 @@ func updateTools(cfg *config.ConfigStore, name string, tools []*Tool) int {
154151 return len(tools)
155152}
156153
157−// filterTools filters tools based on enabled_tools (allow list) and
158−// disabled_tools (deny list) from the MCP config.
159−func filterTools(mcpCfg config.MCPConfig, tools []*Tool) []*Tool {
160− if len(mcpCfg.EnabledTools) > 0 {
161− filtered := make([]*Tool, 0, len(mcpCfg.EnabledTools))
162− for _, tool := range tools {
163− if slices.Contains(mcpCfg.EnabledTools, tool.Name) {
164− filtered = append(filtered, tool)
165− }
166− }
167− tools = filtered
154+// filterDisabledTools removes tools that are disabled via config.
155+func filterDisabledTools(cfg *config.ConfigStore, mcpName string, tools []*Tool) []*Tool {
156+ mcpCfg, ok := cfg.Config().MCP[mcpName]
157+ if !ok || len(mcpCfg.DisabledTools) == 0 {
158+ return tools
168159 }
169160
170− if len(mcpCfg.DisabledTools) > 0 {
171− filtered := make([]*Tool, 0, len(tools))
172− for _, tool := range tools {
173− if !slices.Contains(mcpCfg.DisabledTools, tool.Name) {
174− filtered = append(filtered, tool)
175− }
161+ filtered := make([]*Tool, 0, len(tools))
162+ for _, tool := range tools {
163+ if !slices.Contains(mcpCfg.DisabledTools, tool.Name) {
164+ filtered = append(filtered, tool)
176165 }
177− tools = filtered
178166 }
179−
180− return tools
167+ return filtered
181168}
182169
183170// ensureRawBytes normalizes MCP media data into raw binary bytes.
@@ -206,20 +193,6 @@ func ensureRawBytes(data []byte) []byte {
206193}
207194
208195func normalizeBase64Input(data []byte) []byte {
209− // Fast path: if the data is all-ASCII and contains no whitespace, there is
210− // nothing for strings.Fields to strip, so avoid copying the (potentially
211− // multi-MB) payload. Bytes >= 0x80 could be part of a non-ASCII Unicode
212− // space that strings.Fields would strip, so fall back to the slow path.
213− fast := true
214− for _, b := range data {
215− if b >= 0x80 || b == ' ' || b == '\t' || b == '\n' || b == '\v' || b == '\f' || b == '\r' {
216− fast = false
217− break
218− }
219− }
220− if fast {
221− return data
222− }
223196 normalized := strings.Join(strings.Fields(string(data)), "")
224197 return []byte(normalized)
225198}
internal/agent/tools/mcp/tools_test.go−48
@@ -5,7 +5,6 @@ import (
55 "encoding/base64"
66 "testing"
77
8− "github.com/charmbracelet/crush/internal/config"
98 "github.com/stretchr/testify/require"
109)
1110
@@ -68,50 +67,3 @@ func TestEnsureRawBytes(t *testing.T) {
6867 })
6968 }
7069}
71−
72−func TestFilterTools(t *testing.T) {
73− t.Parallel()
74−
75− tools := []*Tool{
76− {Name: "tool_a"},
77− {Name: "tool_b"},
78− {Name: "tool_c"},
79− }
80−
81− t.Run("no filters returns all tools", func(t *testing.T) {
82− t.Parallel()
83− result := filterTools(config.MCPConfig{}, tools)
84− require.Len(t, result, 3)
85− })
86−
87− t.Run("disabled tools filters deny list", func(t *testing.T) {
88− t.Parallel()
89− result := filterTools(config.MCPConfig{DisabledTools: []string{"tool_a"}}, tools)
90− require.Len(t, result, 2)
91− require.Equal(t, "tool_b", result[0].Name)
92− require.Equal(t, "tool_c", result[1].Name)
93− })
94−
95− t.Run("enabled tools acts as allow list", func(t *testing.T) {
96− t.Parallel()
97− result := filterTools(config.MCPConfig{EnabledTools: []string{"tool_b"}}, tools)
98− require.Len(t, result, 1)
99− require.Equal(t, "tool_b", result[0].Name)
100− })
101−
102− t.Run("enabled and disabled both apply", func(t *testing.T) {
103− t.Parallel()
104− result := filterTools(config.MCPConfig{
105− EnabledTools: []string{"tool_a", "tool_b"},
106− DisabledTools: []string{"tool_b"},
107− }, tools)
108− require.Len(t, result, 1)
109− require.Equal(t, "tool_a", result[0].Name)
110− })
111−
112− t.Run("enabled with non-existent tool returns empty", func(t *testing.T) {
113− t.Parallel()
114− result := filterTools(config.MCPConfig{EnabledTools: []string{"non_existent"}}, tools)
115− require.Len(t, result, 0)
116− })
117−}
internal/agent/tools/multiedit.go+6−26
@@ -110,8 +110,7 @@ func NewMultiEditTool(
110110 text += getDiagnostics(params.FilePath, lspManager)
111111 response.Content = text
112112 return response, nil
113− },
114− )
113+ })
115114}
116115
117116func validateEdits(edits []MultiEditOperation) error {
@@ -196,16 +195,7 @@ func processMultiEditWithCreation(edit editContext, params MultiEditParams, call
196195 return fantasy.ToolResponse{}, err
197196 }
198197 if !p {
199− resp := NewPermissionDeniedResponse()
200− resp = fantasy.WithResponseMetadata(resp, MultiEditResponseMetadata{
201− OldContent: "",
202− NewContent: currentContent,
203− Additions: additions,
204− Removals: removals,
205− EditsApplied: editsApplied,
206− EditsFailed: failedEdits,
207− })
208− return resp, nil
198+ return NewPermissionDeniedResponse(), nil
209199 }
210200
211201 // Write the file
@@ -276,11 +266,9 @@ func processMultiEditExistingFile(edit editContext, params MultiEditParams, call
276266 modTime := fileInfo.ModTime().Truncate(time.Second)
277267 if modTime.After(lastRead) {
278268 return fantasy.NewTextErrorResponse(
279− fmt.Sprintf(
280− "file %s has been modified since it was last read (mod time: %s, last read: %s)",
269+ fmt.Sprintf("file %s has been modified since it was last read (mod time: %s, last read: %s)",
281270 params.FilePath, modTime.Format(time.RFC3339), lastRead.Format(time.RFC3339),
282− ),
283− ), nil
271+ )), nil
284272 }
285273
286274 // Read current file content
@@ -349,16 +337,7 @@ func processMultiEditExistingFile(edit editContext, params MultiEditParams, call
349337 return fantasy.ToolResponse{}, err
350338 }
351339 if !p {
352− resp := NewPermissionDeniedResponse()
353− resp = fantasy.WithResponseMetadata(resp, MultiEditResponseMetadata{
354− OldContent: oldContent,
355− NewContent: currentContent,
356− Additions: additions,
357− Removals: removals,
358− EditsApplied: editsApplied,
359− EditsFailed: failedEdits,
360− })
361− return resp, nil
340+ return NewPermissionDeniedResponse(), nil
362341 }
363342
364343 if isCrlf {
@@ -445,6 +424,7 @@ func applyEditToContent(content string, edit MultiEditOperation) (string, error)
445424 }
446425
447426 newContent = content[:index] + edit.NewString + content[index+len(edit.OldString):]
427+ replacementCount = 1
448428 }
449429
450430 return newContent, nil
internal/agent/tools/multiedit_test.go+3−5
@@ -20,13 +20,11 @@ func (m *mockPermissionService) Request(ctx context.Context, req permission.Crea
2020 return true, nil
2121}
2222
23−func (m *mockPermissionService) Grant(req permission.PermissionRequest) bool { return true }
23+func (m *mockPermissionService) Grant(req permission.PermissionRequest) {}
2424
25−func (m *mockPermissionService) Deny(req permission.PermissionRequest) bool { return true }
25+func (m *mockPermissionService) Deny(req permission.PermissionRequest) {}
2626
27−func (m *mockPermissionService) GrantPersistent(req permission.PermissionRequest) bool {
28− return true
29−}
27+func (m *mockPermissionService) GrantPersistent(req permission.PermissionRequest) {}
3028
3129func (m *mockPermissionService) AutoApproveSession(sessionID string) {}
3230
internal/agent/tools/read_mcp_resource.go+1−2
@@ -50,8 +50,7 @@ func NewReadMCPResourceTool(cfg *config.ConfigStore, permissions permission.Serv
5050 }
5151
5252 relPath := filepathext.SmartJoin(cfg.WorkingDir(), cmp.Or(params.URI, "mcp-resource"))
53− p, err := permissions.Request(
54− ctx,
53+ p, err := permissions.Request(ctx,
5554 permission.CreatePermissionRequest{
5655 SessionID: sessionID,
5756 Path: relPath,
internal/agent/tools/references.go+9−2
@@ -24,6 +24,10 @@ type ReferencesParams struct {
2424 Path string `json:"path,omitempty" description:"The directory to search in. Use a directory/file to narrow down the symbol search. Defaults to the current working directory."`
2525}
2626
27+type referencesTool struct {
28+ lspManager *lsp.Manager
29+}
30+
2731const ReferencesToolName = "lsp_references"
2832
2933//go:embed references.md
@@ -83,8 +87,11 @@ func NewReferencesTool(lspManager *lsp.Manager) fantasy.AgentTool {
8387 return fantasy.NewTextErrorResponse(allErrs.Error()), nil
8488 }
8589 return fantasy.NewTextResponse(fmt.Sprintf("No references found for symbol '%s'", params.Symbol)), nil
86− },
87− )
90+ })
91+}
92+
93+func (r *referencesTool) Name() string {
94+ return ReferencesToolName
8895}
8996
9097func find(ctx context.Context, lspManager *lsp.Manager, symbol string, match grepMatch) ([]protocol.Location, error) {
internal/agent/tools/rg.go+1−10
@@ -7,15 +7,11 @@ import (
77 "path/filepath"
88 "strings"
99 "sync"
10− "testing"
1110
1211 "github.com/charmbracelet/crush/internal/log"
1312)
1413
1514var getRg = sync.OnceValue(func() string {
16− if testing.Testing() {
17− return ""
18− }
1915 path, err := exec.LookPath("rg")
2016 if err != nil {
2117 if log.Initialized() {
@@ -31,12 +27,7 @@ func getRgCmd(ctx context.Context, globPattern string) *exec.Cmd {
3127 if name == "" {
3228 return nil
3329 }
34− // Note: we intentionally do not pass -L (follow symlinks). Following
35− // symlinks lets rg escape the search root (into module caches, the nix
36− // store, $HOME, etc.) and chase cycles, which pins all cores and can
37− // hang. This keeps glob scoped to the tree it was pointed at, matching
38− // the grep search command.
39− args := []string{"--files", "--null"}
30+ args := []string{"--files", "-L", "--null"}
4031 if globPattern != "" {
4132 if !filepath.IsAbs(globPattern) && !strings.HasPrefix(globPattern, "/") {
4233 globPattern = "/" + globPattern
internal/agent/tools/safe.go+6−99
@@ -1,17 +1,7 @@
11package tools
22
3−import (
4− "runtime"
5− "strings"
3+import "runtime"
64
7− "mvdan.cc/sh/v3/syntax"
8−)
9−
10−// safeCommands are read-only commands that can run without a permission
11−// prompt. Entries may be multi-word (e.g. "git log") to scope a
12−// subcommand. Do NOT add wrapper commands that execute an arbitrary
13−// argument (env, time, timeout, nohup, nice, xargs, sh, bash, find -exec,
14−// ...): those would let an unapproved command ride in on a safe prefix.
155var safeCommands = []string{
166 // Bash builtins and core utils
177 "cal",
@@ -19,6 +9,7 @@ var safeCommands = []string{
199 "df",
2010 "du",
2111 "echo",
12+ "env",
2213 "free",
2314 "groups",
2415 "hostname",
@@ -26,10 +17,14 @@ var safeCommands = []string{
2617 "kill",
2718 "killall",
2819 "ls",
20+ "nice",
21+ "nohup",
2922 "printenv",
3023 "ps",
3124 "pwd",
3225 "set",
26+ "time",
27+ "timeout",
3328 "top",
3429 "type",
3530 "uname",
@@ -72,92 +67,4 @@ func init() {
7267 "where",
7368 )
7469 }
75−
76− // Precompute the tokenized form of each safe command once, so
77− // isSafeReadOnly doesn't re-split on every call.
78− safeCommandTokens = make([][]string, len(safeCommands))
79− for i, safeCmd := range safeCommands {
80− safeCommandTokens[i] = strings.Fields(safeCmd)
81− }
82−}
83−
84−// safeCommandTokens holds the tokenized form of safeCommands, populated in
85−// init after any platform-specific entries are appended.
86−var safeCommandTokens [][]string
87−
88−// isSafeReadOnly reports whether command is a single, simple, read-only
89−// command that can run without a permission prompt.
90−//
91−// It parses the command and only returns true when the whole input is
92−// exactly one simple command (no pipes, chaining, subshells, blocks, or
93−// negation), with no redirections, no backgrounding, no inline variable
94−// assignments (which could inject e.g. LD_PRELOAD), and no command or
95−// process substitution anywhere. The command name (and any subcommand
96−// tokens) must be plain literals matching an entry in safeCommands.
97−//
98−// This replaces raw-string prefix matching, which let wrapper commands
99−// and redirects/chaining smuggle unapproved commands past the gate
100−// (e.g. "time rm -rf x", "echo x > file", "echo hi & rm -rf x").
101−func isSafeReadOnly(command string) bool {
102− parser := syntax.NewParser()
103− file, err := parser.Parse(strings.NewReader(command), "")
104− if err != nil {
105− return false
106− }
107−
108− // Exactly one statement, and it must be a plain foreground command.
109− if len(file.Stmts) != 1 {
110− return false
111− }
112− stmt := file.Stmts[0]
113− if stmt.Background || stmt.Negated || len(stmt.Redirs) > 0 {
114− return false
115− }
116− call, ok := stmt.Cmd.(*syntax.CallExpr)
117− if !ok || len(call.Args) == 0 || len(call.Assigns) > 0 {
118− return false
119− }
120−
121− // Reject any command/process substitution anywhere in the statement:
122− // those execute arbitrary commands the allowlist never sees.
123− safe := true
124− syntax.Walk(file, func(node syntax.Node) bool {
125− switch node.(type) {
126− case *syntax.CmdSubst, *syntax.ProcSubst:
127− safe = false
128− return false
129− }
130− return true
131− })
132− if !safe {
133− return false
134− }
135−
136− // Extract literal argv. Non-literal words (quoting, parameter
137− // expansion, globbing) yield "" via Word.Lit(); the command name and
138− // any matched subcommand tokens must be plain literals.
139− argv := make([]string, len(call.Args))
140− for i, w := range call.Args {
141− argv[i] = w.Lit()
142− }
143− if argv[0] == "" {
144− return false
145− }
146−
147− for _, tokens := range safeCommandTokens {
148− if len(argv) < len(tokens) {
149− continue
150− }
151− match := true
152− for i, tok := range tokens {
153− if argv[i] != tok {
154− match = false
155− break
156− }
157− }
158− if match {
159− return true
160− }
161− }
162− return false
16370}
internal/agent/tools/safe_test.godeleted−74
@@ -1,74 +0,0 @@
1−package tools
2−
3−import (
4− "testing"
5−
6− "github.com/stretchr/testify/assert"
7−)
8−
9−func TestIsSafeReadOnly(t *testing.T) {
10− t.Parallel()
11−
12− tests := []struct {
13− name string
14− input string
15− expected bool
16− }{
17− // Plain safe commands.
18− {"plain ls", "ls -la", true},
19− {"plain echo", "echo hello world", true},
20− {"plain pwd", "pwd", true},
21− {"git status", "git status", true},
22− {"git log with flags", "git log --oneline", true},
23− {"git config --get", "git config --get user.name", true},
24− {"echo with param expansion", "echo $HOME", true},
25− {"simple kill", "kill 1234", true},
26−
27− // Not on the allowlist.
28− {"rm", "rm -rf /tmp/x", false},
29− {"unknown", "frobnicate", false},
30− {"git push not allowed", "git push", false},
31− {"prefix is not a match (lsof)", "lsof", false},
32−
33− // Chaining / multiple statements.
34− {"pipe", "ls | grep foo", false},
35− {"and", "ls && echo done", false},
36− {"or", "ls || echo fail", false},
37− {"semicolon", "ls; echo done", false},
38− {"newline", "echo hi\nrm -rf x", false},
39− {"background then rm", "echo hi & rm -rf x", false},
40− {"rm first with and", "rm -rf / && ls", false},
41−
42− // Substitution.
43− {"command subst", "ls $(rm -rf x)", false},
44− {"backticks", "ls `rm -rf x`", false},
45− {"param default with subst", "echo ${x:-$(rm -rf x)}", false},
46−
47− // Redirection.
48− {"redirect out", "echo x > /tmp/out", false},
49− {"redirect append", "echo x >> ~/.bashrc", false},
50− {"redirect in", "cat < /etc/passwd", false},
51−
52− // Wrapper commands must not smuggle an unapproved command through.
53− {"time wrapper", "time rm -rf x", false},
54− {"env wrapper", "env FOO=bar rm -rf x", false},
55− {"timeout wrapper", "timeout 10 rm -rf x", false},
56− {"nohup wrapper", "nohup rm -rf x", false},
57− {"nice wrapper", "nice rm -rf x", false},
58−
59− // Inline assignment (e.g. LD_PRELOAD) is not safe.
60− {"inline assignment", "LD_PRELOAD=/evil.so ls", false},
61−
62− // Malformed / empty.
63− {"empty", "", false},
64− {"unbalanced quote", "echo \"unterminated", false},
65− }
66−
67− for _, tt := range tests {
68− t.Run(tt.name, func(t *testing.T) {
69− t.Parallel()
70− got := isSafeReadOnly(tt.input)
71− assert.Equal(t, tt.expected, got, "isSafeReadOnly(%q)", tt.input)
72− })
73− }
74−}
internal/agent/tools/sourcegraph.go+8−25
@@ -6,7 +6,6 @@ import (
66 _ "embed"
77 "encoding/json"
88 "fmt"
9− "html/template"
109 "io"
1110 "net/http"
1211 "strings"
@@ -29,23 +28,8 @@ type SourcegraphResponseMetadata struct {
2928
3029const SourcegraphToolName = "sourcegraph"
3130
32−//go:embed sourcegraph.md.tpl
33−var sourcegraphDescriptionTmpl []byte
34−
35−var sourcegraphDescriptionTpl = template.Must(
36− template.New("sourcegraphDescription").
37− Parse(string(sourcegraphDescriptionTmpl)),
38−)
39−
40−type sourcegraphDescriptionData struct {
41− MaxResults int
42−}
43−
44−func sourcegraphDescription() string {
45− return renderTemplate(sourcegraphDescriptionTpl, sourcegraphDescriptionData{
46− MaxResults: 20,
47− })
48−}
31+//go:embed sourcegraph.md
32+var sourcegraphDescription string
4933
5034func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
5135 if client == nil {
@@ -61,10 +45,10 @@ func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
6145 }
6246 return fantasy.NewParallelAgentTool(
6347 SourcegraphToolName,
64− sourcegraphDescription(),
48+ sourcegraphDescription,
6549 func(ctx context.Context, params SourcegraphParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
6650 if params.Query == "" {
67− return fantasy.NewTextErrorResponse("query parameter is required"), nil
51+ return fantasy.NewTextErrorResponse("Query parameter is required"), nil
6852 }
6953
7054 if params.Count <= 0 {
@@ -129,10 +113,10 @@ func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
129113 if resp.StatusCode != http.StatusOK {
130114 body, _ := io.ReadAll(resp.Body)
131115 if len(body) > 0 {
132− return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d, response: %s", resp.StatusCode, string(body))), nil
116+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d, response: %s", resp.StatusCode, string(body))), nil
133117 }
134118
135− return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d", resp.StatusCode)), nil
119+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d", resp.StatusCode)), nil
136120 }
137121 body, err := io.ReadAll(resp.Body)
138122 if err != nil {
@@ -146,12 +130,11 @@ func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
146130
147131 formattedResults, err := formatSourcegraphResults(result, params.ContextWindow)
148132 if err != nil {
149− return fantasy.NewTextErrorResponse("failed to format results: " + err.Error()), nil
133+ return fantasy.NewTextErrorResponse("Failed to format results: " + err.Error()), nil
150134 }
151135
152136 return fantasy.NewTextResponse(formattedResults), nil
153− },
154− )
137+ })
155138}
156139
157140func formatSourcegraphResults(result map[string]any, contextWindow int) (string, error) {
internal/agent/tools/sourcegraph.md.tpl → internal/agent/tools/sourcegraph.mdrenamed+1−1
@@ -1 +1 @@
1−Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max {{ .MaxResults }} results). Only searches public repos.
1+Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.
internal/agent/tools/todos.go+1−2
@@ -130,6 +130,5 @@ func NewTodosTool(sessions session.Service) fantasy.AgentTool {
130130 }
131131
132132 return fantasy.WithResponseMetadata(fantasy.NewTextResponse(response), metadata), nil
133− },
134− )
133+ })
135134}
internal/agent/tools/tools.go−13

This diff is too big to show here.

internal/agent/tools/view.go+72−78

This diff is too big to show here.

internal/agent/tools/view.mdnew file+1

This diff is too big to show here.

internal/agent/tools/view.md.tpldeleted−1

This diff is too big to show here.

internal/agent/tools/view_test.go+5−22

This diff is too big to show here.

internal/agent/tools/web_fetch.go+5−6

This diff is too big to show here.

internal/agent/tools/web_search.go+2−3

This diff is too big to show here.

internal/agent/tools/write.go+18−28

This diff is too big to show here.

internal/agent/usage_fallback.godeleted−167

This diff is too big to show here.

internal/agent/usage_fallback_test.godeleted−339

This diff is too big to show here.

internal/app/app.go+19−168

This diff is too big to show here.

internal/app/testing.godeleted−72

This diff is too big to show here.

internal/backend/accepted_run_integration_test.godeleted−131

This diff is too big to show here.

internal/backend/agent.go+5−134

This diff is too big to show here.

internal/backend/agent_runcomplete_test.godeleted−163

This diff is too big to show here.

internal/backend/agent_test.godeleted−164

This diff is too big to show here.

internal/backend/backend.go+39−627

This diff is too big to show here.

internal/backend/backend_skills_test.godeleted−167

This diff is too big to show here.

internal/backend/backend_test.godeleted−1241

This diff is too big to show here.

internal/backend/config.go+9−102

This diff is too big to show here.

internal/backend/config_test.godeleted−205

This diff is too big to show here.

internal/backend/permission.go+8−9

This diff is too big to show here.

internal/backend/race_off_test.godeleted−5

This diff is too big to show here.

internal/backend/race_on_test.godeleted−5

This diff is too big to show here.

internal/backend/session.go−6

This diff is too big to show here.

internal/backend/shell_command_test.godeleted−54

This diff is too big to show here.

internal/backend/testing.godeleted−69

This diff is too big to show here.

internal/client/client.go+4−21

This diff is too big to show here.

internal/client/config.go+6−73

This diff is too big to show here.

internal/client/config_test.godeleted−101

This diff is too big to show here.

internal/client/proto.go+36−147

This diff is too big to show here.

internal/client/proto_test.godeleted−178

This diff is too big to show here.

internal/clipboard/clipboard.godeleted−44

This diff is too big to show here.

internal/clipboard/clipboard_not_supported.godeleted−13

This diff is too big to show here.

internal/clipboard/clipboard_supported.godeleted−30

This diff is too big to show here.

internal/cmd/clientserverrace/race_test.godeleted−361

This diff is too big to show here.

internal/cmd/dirs.go+37−62

This diff is too big to show here.

internal/cmd/dirs_test.gonew file+48

This diff is too big to show here.

internal/cmd/login.go+15−34

This diff is too big to show here.

internal/cmd/login_test.godeleted−21

This diff is too big to show here.

internal/cmd/logout.godeleted−182

This diff is too big to show here.

internal/cmd/logout_test.godeleted−41

This diff is too big to show here.

internal/cmd/logs.go+3−3

This diff is too big to show here.

internal/cmd/models.go+29−74

This diff is too big to show here.

internal/cmd/root.go+79−300

This diff is too big to show here.

internal/cmd/run.go+36−167

This diff is too big to show here.

internal/cmd/run_stream_test.godeleted−417

This diff is too big to show here.

internal/cmd/schema.go+1−35

This diff is too big to show here.

internal/cmd/server.go+6−6

This diff is too big to show here.

internal/cmd/session.go+1−1

This diff is too big to show here.

internal/commands/commands.go−28

This diff is too big to show here.

internal/commands/commands_test.go−61

This diff is too big to show here.

internal/config/atomicwrite.godeleted−38

This diff is too big to show here.

internal/config/atomicwrite_test.godeleted−43

This diff is too big to show here.

internal/config/clone_test.godeleted−46

This diff is too big to show here.

internal/config/config.go+18−100

This diff is too big to show here.

internal/config/docker_mcp.go+16−23

This diff is too big to show here.

internal/config/docker_mcp_test.go+7−9

This diff is too big to show here.

internal/config/hyper.go+1−1

This diff is too big to show here.

internal/config/load.go+64−354

This diff is too big to show here.

internal/config/load_test.go+101−293

This diff is too big to show here.

internal/config/mcp_resolved_url_test.go+1−1

This diff is too big to show here.

internal/config/provider.go+2−10

This diff is too big to show here.

internal/config/recent_models_test.go+170−67

This diff is too big to show here.

internal/config/refresh_singleflight_test.godeleted−175

This diff is too big to show here.

internal/config/resolve.go−11

This diff is too big to show here.

internal/config/resolve_real_test.go+17−15

This diff is too big to show here.

internal/config/scopeb_race_test.godeleted−74

This diff is too big to show here.

internal/config/store.go+155−493

This diff is too big to show here.

internal/config/store_test.go+11−69

This diff is too big to show here.

internal/config/update_model_bench_test.godeleted−108

This diff is too big to show here.

internal/csync/maps.go+5−20

This diff is too big to show here.

internal/db/connect.go+13−154

This diff is too big to show here.

internal/db/connect_test.godeleted−210

This diff is too big to show here.

internal/db/datadirlock.godeleted−131

This diff is too big to show here.

internal/db/db.go+4−24

This diff is too big to show here.

internal/db/files.sql.go+5−21

This diff is too big to show here.

internal/db/messages.sql.go+2−50

This diff is too big to show here.

internal/db/migrations/20260701000000_add_composite_indexes.sqldeleted−12

This diff is too big to show here.

internal/db/migrations/20260702000000_add_hot_path_indexes.sqldeleted−14

This diff is too big to show here.

internal/db/models.go+1−1

This diff is too big to show here.

internal/db/querier.go+3−5

This diff is too big to show here.

internal/db/read_files.sql.go+1−1

This diff is too big to show here.

internal/db/sessions.sql.go+9−39

This diff is too big to show here.

internal/db/sql/files.sql+4−12

This diff is too big to show here.

internal/db/sql/messages.sql−7

This diff is too big to show here.

internal/db/sql/sessions.sql+4−6

This diff is too big to show here.

internal/db/stats.sql.go+1−1

This diff is too big to show here.

internal/discover/discover.godeleted−145

This diff is too big to show here.

internal/discover/discover_test.godeleted−221

This diff is too big to show here.

internal/discover/enricher.godeleted−60

This diff is too big to show here.

internal/discover/litellm.godeleted−87

This diff is too big to show here.

internal/discover/litellm_test.godeleted−173

This diff is too big to show here.

internal/discover/llamacpp.godeleted−83

This diff is too big to show here.

internal/discover/llamacpp_test.godeleted−135

This diff is too big to show here.

internal/discover/lmstudio.godeleted−95

This diff is too big to show here.

internal/discover/lmstudio_test.godeleted−154

This diff is too big to show here.

internal/discover/ollama.godeleted−105

This diff is too big to show here.

internal/discover/ollama_test.godeleted−131

This diff is too big to show here.

internal/discover/omlx.godeleted−73

This diff is too big to show here.

internal/discover/omlx_test.godeleted−92

This diff is too big to show here.

internal/dns/android.godeleted−41

This diff is too big to show here.

internal/event/event.go+2−15

This diff is too big to show here.

internal/event/event_test.go+1−2

This diff is too big to show here.

internal/filepathext/filepath.go−25

This diff is too big to show here.

internal/filepathext/filepath_test.godeleted−37

This diff is too big to show here.

internal/filetracker/service.go+2−19

This diff is too big to show here.

internal/fsext/fileutil.go+26−47

This diff is too big to show here.

internal/fsext/fileutil_dirtrim_test.godeleted−32

This diff is too big to show here.

internal/fsext/lookup.go+7−2

This diff is too big to show here.

internal/fsext/owner_others.go+5−8

This diff is too big to show here.

internal/fsext/owner_windows.go−7

This diff is too big to show here.

internal/herdr/client.godeleted−405

This diff is too big to show here.

internal/herdr/client_test.godeleted−158

This diff is too big to show here.

internal/herdr/translate.godeleted−150

This diff is too big to show here.

internal/herdr/translate_test.godeleted−145

This diff is too big to show here.

internal/history/file.go+15−20

This diff is too big to show here.

internal/hooks/hooks.go+1−2

This diff is too big to show here.

internal/hooks/hooks_test.go+3−37

This diff is too big to show here.

internal/hooks/input.go+2−6

This diff is too big to show here.

internal/hooks/runner.go+6−11

This diff is too big to show here.

internal/lock/lock.godeleted−75

This diff is too big to show here.

internal/lock/lock_test.godeleted−168

This diff is too big to show here.

internal/lock/lock_unix.godeleted−45

This diff is too big to show here.

internal/lock/lock_windows.godeleted−57

This diff is too big to show here.

internal/lsp/client.go−5

This diff is too big to show here.

internal/lsp/handlers.go+6−6

This diff is too big to show here.

internal/lsp/manager.go+8−28

This diff is too big to show here.

internal/lsp/util/edit.go+34−41

This diff is too big to show here.

internal/message/attachment.go+2−3

This diff is too big to show here.

internal/message/content.go+23−110

This diff is too big to show here.

internal/message/message.go+61−425

This diff is too big to show here.

internal/message/message_test.godeleted−695

This diff is too big to show here.

internal/oauth/copilot/client.go+7−22

This diff is too big to show here.

internal/oauth/copilot/client_test.godeleted−70

This diff is too big to show here.

internal/oauth/token.go+4−33

This diff is too big to show here.

internal/permission/permission.go+92−132

This diff is too big to show here.

internal/permission/permission_test.go−286

This diff is too big to show here.

internal/proto/agent.go+2−9

This diff is too big to show here.

internal/proto/mcp.go+4−4

This diff is too big to show here.

internal/proto/message.go+7−69

This diff is too big to show here.

internal/proto/permission.go−6

This diff is too big to show here.

internal/proto/permission_test.godeleted−186

This diff is too big to show here.

internal/proto/proto.go+13−122

This diff is too big to show here.

internal/proto/requests.go+5−50

This diff is too big to show here.

internal/proto/requests_test.godeleted−106

This diff is too big to show here.

internal/proto/session.go−22

This diff is too big to show here.

internal/proto/skills.godeleted−28

This diff is too big to show here.

internal/proto/tools.go+38−22

This diff is too big to show here.

internal/proto/version.go−1

This diff is too big to show here.

internal/pubsub/broker.go+19−184

This diff is too big to show here.

internal/pubsub/broker_test.godeleted−117

This diff is too big to show here.

internal/pubsub/events.go−10

This diff is too big to show here.

internal/server/agent_cancel_test.godeleted−227

This diff is too big to show here.

internal/server/config.go+1−59

This diff is too big to show here.

internal/server/e2e_agent_test.godeleted−742

This diff is too big to show here.

internal/server/e2e_test.godeleted−612

This diff is too big to show here.

internal/server/events.go+4−101

This diff is too big to show here.

internal/server/events_test.godeleted−182

This diff is too big to show here.

internal/server/logging.go+2−4

This diff is too big to show here.

internal/server/multiclient_test.godeleted−230

This diff is too big to show here.

internal/server/net_other.go+3−54

This diff is too big to show here.

internal/server/net_windows.go+3−16

This diff is too big to show here.

internal/server/proto.go+13−173

This diff is too big to show here.

internal/server/recover.godeleted−59

This diff is too big to show here.

internal/server/recover_test.godeleted−94

This diff is too big to show here.

internal/server/server.go+7−59

This diff is too big to show here.

internal/server/sessions_isbusy_test.godeleted−334

This diff is too big to show here.

internal/server/socket.godeleted−10

This diff is too big to show here.

internal/server/socket_classify.godeleted−27

This diff is too big to show here.

internal/server/socket_test.godeleted−193

This diff is too big to show here.

internal/session/session.go+9−63

This diff is too big to show here.

internal/session/session_test.godeleted−81

This diff is too big to show here.

internal/shell/background.go+1−1

This diff is too big to show here.

internal/shell/background_test.go+6−2

This diff is too big to show here.

internal/shell/dispatch.go+1−2

This diff is too big to show here.

internal/shell/exec_unix.godeleted−108

This diff is too big to show here.

internal/shell/exec_windows.godeleted−23

This diff is too big to show here.

internal/shell/expand.go+6−20

This diff is too big to show here.

internal/shell/isolation_unix_test.godeleted−143

This diff is too big to show here.

internal/shell/jq_test.go+7−20

This diff is too big to show here.

internal/shell/persist_message.godeleted−44

This diff is too big to show here.

internal/shell/persist_message_test.godeleted−69

This diff is too big to show here.

internal/shell/run.go+1−188

This diff is too big to show here.

internal/shell/run_test.go−112

This diff is too big to show here.

internal/shell/shell.go−5

This diff is too big to show here.

internal/shell/stream.godeleted−52

This diff is too big to show here.

internal/skills/builtin/crush-config/SKILL.md+1−32

This diff is too big to show here.

internal/skills/catalog.godeleted−154

This diff is too big to show here.

internal/skills/diagnostics_test.go−42

This diff is too big to show here.

internal/skills/embed.go+1−1

This diff is too big to show here.

internal/skills/manager.godeleted−227

This diff is too big to show here.

internal/skills/manager_test.godeleted−249

This diff is too big to show here.

internal/skills/skills.go+18−123

This diff is too big to show here.

internal/skills/skills_test.go+27−23

This diff is too big to show here.

internal/swagger/docs.go+3−131

This diff is too big to show here.

internal/swagger/swagger.json+3−131

This diff is too big to show here.

internal/swagger/swagger.yaml+6−98

This diff is too big to show here.

internal/ui/anim/anim.go+27−76

This diff is too big to show here.

internal/ui/attachments/attachments.go+5−10

This diff is too big to show here.

internal/ui/chat/agent.go+27−118

This diff is too big to show here.

internal/ui/chat/applyhighlight_callback_test.godeleted−207

This diff is too big to show here.

internal/ui/chat/assistant.go+74−695

This diff is too big to show here.

internal/ui/chat/assistant_render_test.godeleted−78

This diff is too big to show here.

internal/ui/chat/assistant_section_cache_test.godeleted−464

This diff is too big to show here.

internal/ui/chat/assistant_test.go+12−100

This diff is too big to show here.

internal/ui/chat/assistant_thinking_bench_test.godeleted−69

This diff is too big to show here.

internal/ui/chat/assistant_thinking_bound_test.godeleted−105

This diff is too big to show here.

internal/ui/chat/assistant_thinking_window_test.godeleted−500

This diff is too big to show here.

internal/ui/chat/bash.go+7−10

This diff is too big to show here.

internal/ui/chat/diagnostics.go+2−2

This diff is too big to show here.

internal/ui/chat/docker_mcp.go+6−6

This diff is too big to show here.

internal/ui/chat/fetch.go+10−10

This diff is too big to show here.

internal/ui/chat/file.go+34−59

This diff is too big to show here.

internal/ui/chat/generic.go+4−4

This diff is too big to show here.

internal/ui/chat/incremental_glamour_test.godeleted−981

This diff is too big to show here.

internal/ui/chat/lsp_restart.go+2−2

This diff is too big to show here.

internal/ui/chat/mcp.go+5−5

This diff is too big to show here.

internal/ui/chat/messages.go+9−107

This diff is too big to show here.

internal/ui/chat/prefix_cache_test.godeleted−197

This diff is too big to show here.

internal/ui/chat/references.go+2−2

This diff is too big to show here.

internal/ui/chat/search.go+12−12

This diff is too big to show here.

internal/ui/chat/shell.godeleted−358

This diff is too big to show here.

internal/ui/chat/shell_test.godeleted−59

This diff is too big to show here.

internal/ui/chat/streaming_markdown.godeleted−721

This diff is too big to show here.

internal/ui/chat/todos.go+2−2

This diff is too big to show here.

internal/ui/chat/tool_result_content.go+14−15

This diff is too big to show here.

internal/ui/chat/tool_result_content_test.go+5−5

This diff is too big to show here.

internal/ui/chat/tools.go+70−236

This diff is too big to show here.

internal/ui/chat/unified_diff.go+14−13

This diff is too big to show here.

internal/ui/chat/user.go+4−75

This diff is too big to show here.

internal/ui/chat/version_bump_test.godeleted−567

This diff is too big to show here.

internal/ui/common/ansi16.godeleted−128

This diff is too big to show here.

internal/ui/common/ansi16_test.godeleted−106

This diff is too big to show here.

internal/ui/common/capabilities.go+13−10

This diff is too big to show here.

internal/ui/common/common.go+2−2

This diff is too big to show here.

internal/ui/common/diff.go+1−20

This diff is too big to show here.

internal/ui/common/elements.go+7−18

This diff is too big to show here.

internal/ui/common/elements_test.godeleted−35

This diff is too big to show here.

internal/ui/common/highlight.go+11−60

This diff is too big to show here.

internal/ui/common/interface.go−9

This diff is too big to show here.

internal/ui/common/markdown.go+4−70

This diff is too big to show here.

internal/ui/common/scrollbar.go+2−4

This diff is too big to show here.

internal/ui/completions/completions.go+4−6

This diff is too big to show here.

internal/ui/completions/item.go+2−34

This diff is too big to show here.

internal/ui/completions/version_bump_test.godeleted−85

This diff is too big to show here.

internal/ui/dialog/actions.go+8−22

This diff is too big to show here.

internal/ui/dialog/api_key_input.go+7−54

This diff is too big to show here.

internal/ui/dialog/arguments.go+14−23

This diff is too big to show here.

internal/ui/dialog/commands.go+163−55

This diff is too big to show here.

internal/ui/dialog/commands_item.go+21−69

This diff is too big to show here.

internal/ui/dialog/dialog.go+9−92

This diff is too big to show here.

internal/ui/dialog/filepicker.go+2−11

This diff is too big to show here.

internal/ui/dialog/models.go+16−19

This diff is too big to show here.

internal/ui/dialog/models_item.go+2−29

This diff is too big to show here.

internal/ui/dialog/models_list.go+66−58

This diff is too big to show here.

internal/ui/dialog/notifications.godeleted−310

This diff is too big to show here.

internal/ui/dialog/oauth.go+2

This diff is too big to show here.

internal/ui/dialog/overlay_test.godeleted−189

This diff is too big to show here.

internal/ui/dialog/permissions.go+29−98

This diff is too big to show here.

internal/ui/dialog/permissions_test.godeleted−99

This diff is too big to show here.

internal/ui/dialog/reasoning.go+2−20

This diff is too big to show here.

internal/ui/dialog/sessions.go+12−24

This diff is too big to show here.

internal/ui/dialog/sessions_item.go+6−52

This diff is too big to show here.

internal/ui/dialog/version_bump_test.godeleted−219

This diff is too big to show here.

internal/ui/difftastic/difftastic.godeleted−60

This diff is too big to show here.

internal/ui/diffview/diffview.go+2−2

This diff is too big to show here.

internal/ui/diffview/diffview_test.go+18

This diff is too big to show here.

internal/ui/diffview/style.go+52−54

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/CustomContextLines/DarkMode.golden+15−15

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/CustomContextLines/LightMode.golden+15−15

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/Default/DarkMode.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/Default/LightMode.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/LargeWidth/DarkMode.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/LargeWidth/LightMode.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/MultipleHunks/DarkMode.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/MultipleHunks/LightMode.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/Narrow/DarkMode.golden+3−3

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/Narrow/LightMode.golden+3−3

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/NoLineNumbers/DarkMode.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/NoLineNumbers/LightMode.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/NoSyntaxHighlight/DarkMode.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/NoSyntaxHighlight/LightMode.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/SmallWidth/DarkMode.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Split/SmallWidth/LightMode.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/CustomContextLines/DarkMode.golden+16−16

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/CustomContextLines/LightMode.golden+16−16

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/Default/DarkMode.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/Default/LightMode.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/LargeWidth/DarkMode.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/LargeWidth/LightMode.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/MultipleHunks/DarkMode.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/MultipleHunks/LightMode.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/Narrow/DarkMode.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/Narrow/LightMode.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/NoLineNumbers/DarkMode.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/NoLineNumbers/LightMode.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/NoSyntaxHighlight/DarkMode.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/NoSyntaxHighlight/LightMode.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/SmallWidth/DarkMode.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffView/Unified/SmallWidth/LightMode.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf002.golden+1−1

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf003.golden+2−2

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf004.golden+3−3

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf005.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf006.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf007.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf008.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf009.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf010.golden+8−8

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf011.golden+9−9

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf012.golden+10−10

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf013.golden+11−11

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf014.golden+12−12

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf015.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf016.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf017.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf018.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf019.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Split/HeightOf020.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf002.golden+1−1

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf003.golden+2−2

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf004.golden+3−3

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf005.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf006.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf007.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf008.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf009.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf010.golden+8−8

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf011.golden+9−9

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf012.golden+10−10

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf013.golden+11−11

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf014.golden+12−12

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf015.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf016.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf017.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf018.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf019.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewHeight/Unified/HeightOf020.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewLineBreakIssue/Split.golden+8−8

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewLineBreakIssue/Unified.golden+11−11

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewTabs/Split.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewTabs/Unified.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf001.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf002.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf003.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf004.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf005.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf006.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf007.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf008.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf009.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf010.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf011.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf012.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf013.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf014.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf015.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf016.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf017.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf018.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf019.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf020.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf021.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf022.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf023.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf024.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf025.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf026.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf027.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf028.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf029.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf030.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf031.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf032.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf033.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf034.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf035.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf036.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf037.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf038.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf039.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf040.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf041.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf042.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf043.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf044.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf045.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf046.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf047.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf048.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf049.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf050.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf051.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf052.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf053.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf054.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf055.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf056.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf057.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf058.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf059.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf060.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf061.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf062.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf063.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf064.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf065.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf066.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf067.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf068.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf069.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf070.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf071.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf072.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf073.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf074.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf075.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf076.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf077.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf078.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf079.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf080.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf081.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf082.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf083.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf084.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf085.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf086.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf087.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf088.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf089.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf090.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf091.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf092.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf093.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf094.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf095.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf096.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf097.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf098.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf099.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf100.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf101.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf102.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf103.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf104.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf105.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf106.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf107.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf108.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf109.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Split/WidthOf110.golden+13−13

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf001.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf002.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf003.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf004.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf005.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf006.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf007.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf008.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf009.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf010.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf011.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf012.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf013.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf014.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf015.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf016.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf017.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf018.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf019.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf020.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf021.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf022.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf023.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf024.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf025.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf026.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf027.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf028.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf029.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf030.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf031.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf032.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf033.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf034.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf035.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf036.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf037.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf038.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf039.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf040.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf041.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf042.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf043.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf044.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf045.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf046.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf047.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf048.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf049.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf050.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf051.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf052.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf053.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf054.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf055.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf056.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf057.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf058.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf059.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewWidth/Unified/WidthOf060.golden+14−14

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf00.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf01.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf02.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf03.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf04.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf05.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf06.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf07.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf08.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf09.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf10.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf11.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf12.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf13.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf14.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf15.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf16.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf17.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf18.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf19.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Split/XOffsetOf20.golden+6−6

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf00.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf01.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf02.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf03.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf04.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf05.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf06.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf07.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf08.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf09.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf10.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf11.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf12.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf13.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf14.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf15.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf16.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf17.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf18.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf19.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewXOffset/Unified/XOffsetOf20.golden+7−7

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf00.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf01.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf02.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf03.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf04.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf05.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf06.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf07.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf08.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf09.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf10.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf11.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf12.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf13.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf14.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf15.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf16.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf00.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf01.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf02.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf03.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf04.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf05.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf06.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf07.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf08.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf09.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf10.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf11.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf12.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf13.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf14.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf15.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf16.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf00.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf01.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf02.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf03.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf04.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf05.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf06.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf07.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf08.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf09.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf10.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf11.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf12.golden+3−3

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf13.golden+2−2

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Split/YOffsetOf14.golden+1−1

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf00.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf01.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf02.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf03.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf04.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf05.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf06.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf07.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf08.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf09.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf10.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf11.golden+5−5

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf12.golden+4−4

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf13.golden+3−3

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf14.golden+2−2

This diff is too big to show here.

internal/ui/diffview/testdata/TestDiffViewYOffsetInfinite/Unified/YOffsetOf15.golden+1−1

This diff is too big to show here.

internal/ui/diffview/util.go+1−8

This diff is too big to show here.

internal/ui/list/filterable.go+1−33

This diff is too big to show here.

internal/ui/list/highlight.go+1−2

This diff is too big to show here.

internal/ui/list/item.go+1−66

This diff is too big to show here.

internal/ui/list/list.go+35−313

This diff is too big to show here.

internal/ui/list/list_test.go−770

This diff is too big to show here.

internal/ui/model/chat.go+27−270

This diff is too big to show here.

internal/ui/model/chat_draw_cache_test.go−334

This diff is too big to show here.

internal/ui/model/chat_expand_test.go+1−7

This diff is too big to show here.

internal/ui/model/clipboard.go+15

This diff is too big to show here.

internal/ui/model/clipboard_not_supported.go+7

This diff is too big to show here.

internal/ui/model/clipboard_supported.go+15

This diff is too big to show here.

internal/ui/model/filter.go+8−94

This diff is too big to show here.

internal/ui/model/filter_test.go−162

This diff is too big to show here.

internal/ui/model/header.go+11−99

This diff is too big to show here.

internal/ui/model/history.go+2−29

This diff is too big to show here.

internal/ui/model/keys.go+29−48

This diff is too big to show here.

internal/ui/model/landing.go+9−78

This diff is too big to show here.

internal/ui/model/layout_test.go+1−111

This diff is too big to show here.

internal/ui/model/lsp.go+5−26

This diff is too big to show here.

internal/ui/model/mcp.go+2−9

This diff is too big to show here.

internal/ui/model/onboarding.go+2−1

This diff is too big to show here.

internal/ui/model/permission_test.go−96

This diff is too big to show here.

internal/ui/model/pills.go+9−92

This diff is too big to show here.

internal/ui/model/session.go+7−31

This diff is too big to show here.

internal/ui/model/session_test.go−142

This diff is too big to show here.

internal/ui/model/sidebar.go+24−179

This diff is too big to show here.

internal/ui/model/skills.go+5−15

This diff is too big to show here.

internal/ui/model/ui.go+169−914

This diff is too big to show here.

internal/ui/notification/bell.go−27

This diff is too big to show here.

internal/ui/notification/icon_darwin.go+3−7

This diff is too big to show here.

internal/ui/notification/icon_other.go+4−1

This diff is too big to show here.

internal/ui/notification/native.go+13−16

This diff is too big to show here.

internal/ui/notification/noop.go+1−3

This diff is too big to show here.

internal/ui/notification/notification.go+3−23

This diff is too big to show here.

internal/ui/notification/notification_test.go+4−174

This diff is too big to show here.

internal/ui/notification/osc.go−135

This diff is too big to show here.

internal/ui/styles/grad.go+2−51

This diff is too big to show here.

internal/ui/styles/quickstyle.go+25−67

This diff is too big to show here.

internal/ui/styles/styles.go+15−49

This diff is too big to show here.

internal/ui/styles/themes.go+38−186

This diff is too big to show here.

internal/ui/xchroma/chroma.go+19−37

This diff is too big to show here.

internal/version/version.go+6−34

This diff is too big to show here.

internal/workspace/app_workspace.go+8−83

This diff is too big to show here.

internal/workspace/client_workspace.go+24−215

This diff is too big to show here.

internal/workspace/client_workspace_test.go−213

This diff is too big to show here.

internal/workspace/export_test.go−14

This diff is too big to show here.

internal/workspace/multiclient_integration_test.go−176

This diff is too big to show here.

internal/workspace/workspace.go+3−22

This diff is too big to show here.

main.go−1

This diff is too big to show here.

schema.json+3−87

This diff is too big to show here.

vendor/charm.land/bubbles/v2/LICENSE−21

This diff is too big to show here.

vendor/charm.land/bubbles/v2/cursor/cursor.go−241

This diff is too big to show here.

vendor/charm.land/bubbles/v2/filepicker/filepicker.go−529

This diff is too big to show here.

vendor/charm.land/bubbles/v2/filepicker/hidden_unix.go−11

This diff is too big to show here.

vendor/charm.land/bubbles/v2/filepicker/hidden_windows.go−21

This diff is too big to show here.

vendor/charm.land/bubbles/v2/help/help.go−253

This diff is too big to show here.

vendor/charm.land/bubbles/v2/internal/memoization/memoization.go−125

This diff is too big to show here.

vendor/charm.land/bubbles/v2/internal/runeutil/runeutil.go−102

This diff is too big to show here.

vendor/charm.land/bubbles/v2/key/key.go−140

This diff is too big to show here.

vendor/charm.land/bubbles/v2/spinner/spinner.go−211

This diff is too big to show here.

vendor/charm.land/bubbles/v2/textarea/textarea.go−1897

This diff is too big to show here.

vendor/charm.land/bubbles/v2/textinput/styles.go−96

This diff is too big to show here.

vendor/charm.land/bubbles/v2/textinput/textinput.go−968

This diff is too big to show here.

vendor/charm.land/bubbles/v2/viewport/highlight.go−141

This diff is too big to show here.

vendor/charm.land/bubbles/v2/viewport/keymap.go−58

This diff is too big to show here.

vendor/charm.land/bubbles/v2/viewport/viewport.go−765

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/.gitattributes−1

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/.gitignore−23

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/.golangci.yml−47

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/.goreleaser.yml−5

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/LICENSE−21

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/README.md−402

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/Taskfile.yaml−38

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/UPGRADE_GUIDE_V2.md−573

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/clipboard.go−70

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/color.go−91

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/commands.go−175

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/cursed_renderer.go−860

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/cursor.go−28

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/environ.go−34

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/exec.go−129

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/focus.go−9

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/input.go−54

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/key.go−371

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/keyboard.go−59

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/logging.go−53

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/mod.go−27

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/mouse.go−144

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/nil_renderer.go−53

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/options.go−168

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/paste.go−20

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/profile.go−15

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/raw.go−37

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/renderer.go−104

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/screen.go−68

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/signals_unix.go−33

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/signals_windows.go−10

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/tea.go−1439

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/termcap.go−48

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/termios_bsd.go−13

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/termios_other.go−8

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/termios_unix.go−14

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/termios_windows.go−11

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/tty.go−136

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/tty_unix.go−47

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/tty_windows.go−64

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/xterm.go−22

This diff is too big to show here.

vendor/charm.land/catwalk/LICENSE−21

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/aihubmix.json−3746

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/alibaba-singapore.json−141

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/alibaba-united-states.json−45

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/anthropic.json−183

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/avian.json−125

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/azure.json−225

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/baseten.json−187

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/bedrock-europe.json−115

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/bedrock-united-states.json−143

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/cerebras.json−42

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/chutes.json−227

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/copilot.json−310

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/cortecs.json−1697

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/deepseek.json−45

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/fireworks.json−171

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/gemini.json−91

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/groq.json−36

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/huggingface.json−267

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/ionet.json−335

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/kimi.json−23

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/minimax-china.json−91

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/minimax.json−91

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/moonshot.json−131

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/nebius.json−419

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/neuralwatt.json−155

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/openai.json−352

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/opencode-go.json−351

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/opencode-zen.json−908

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/openrouter.json−3831

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/qiniucloud.json−179

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/scaleway.json−141

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/synthetic.json−197

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/venice.json−1173

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/vercel.json−3072

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/vertexai.json−170

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/xai.json−59

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/zai.json−136

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/zhipu-coding.json−136

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/zhipu.json−120

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/providers.go−349

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/catwalk/client.go−79

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/catwalk/pkg.go−2

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/catwalk/provider.go−157

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/embedded/embedded.go−13

This diff is too big to show here.

vendor/charm.land/fang/v2/.gitignore−3

This diff is too big to show here.

vendor/charm.land/fang/v2/.golangci.yml−47

This diff is too big to show here.

vendor/charm.land/fang/v2/.goreleaser.yml−5

This diff is too big to show here.

vendor/charm.land/fang/v2/LICENSE.md−21

This diff is too big to show here.

vendor/charm.land/fang/v2/README.md−92

This diff is too big to show here.

vendor/charm.land/fang/v2/Taskfile.yml−7

This diff is too big to show here.

vendor/charm.land/fang/v2/UPGRADE_GUIDE_V2.md−127

This diff is too big to show here.

vendor/charm.land/fang/v2/fang.go−208

This diff is too big to show here.

vendor/charm.land/fang/v2/fang_other.go−10

This diff is too big to show here.

vendor/charm.land/fang/v2/fang_windows.go−30

This diff is too big to show here.

vendor/charm.land/fang/v2/help.go−482

This diff is too big to show here.

vendor/charm.land/fang/v2/theme.go−222

This diff is too big to show here.

vendor/charm.land/fantasy/.editorconfig−18

This diff is too big to show here.

vendor/charm.land/fantasy/.gitattributes−1

This diff is too big to show here.

vendor/charm.land/fantasy/.gitignore−42

This diff is too big to show here.

vendor/charm.land/fantasy/.golangci.yml−44

This diff is too big to show here.

vendor/charm.land/fantasy/.goreleaser.yml−6

This diff is too big to show here.

vendor/charm.land/fantasy/AGENTS.md−29

This diff is too big to show here.

vendor/charm.land/fantasy/LICENSE−177

This diff is too big to show here.

vendor/charm.land/fantasy/NOTICE−13

This diff is too big to show here.

vendor/charm.land/fantasy/README.md−95

This diff is too big to show here.

vendor/charm.land/fantasy/Taskfile.yaml−45

This diff is too big to show here.

vendor/charm.land/fantasy/agent.go−1702

This diff is too big to show here.

vendor/charm.land/fantasy/content.go−625

This diff is too big to show here.

vendor/charm.land/fantasy/content_json.go−1046

This diff is too big to show here.

vendor/charm.land/fantasy/crush.json−6

This diff is too big to show here.

vendor/charm.land/fantasy/cspell.json−1

This diff is too big to show here.

vendor/charm.land/fantasy/doc.go−2

This diff is too big to show here.

vendor/charm.land/fantasy/errors.go−155

This diff is too big to show here.

vendor/charm.land/fantasy/jsonrepair/jsonrepair.go−1648

This diff is too big to show here.

vendor/charm.land/fantasy/model.go−261

This diff is too big to show here.

vendor/charm.land/fantasy/model_json.go−156

This diff is too big to show here.

vendor/charm.land/fantasy/object.go−236

This diff is too big to show here.

vendor/charm.land/fantasy/object/object.go−620

This diff is too big to show here.

vendor/charm.land/fantasy/provider.go−11

This diff is too big to show here.

vendor/charm.land/fantasy/provider_registry.go−106

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/anthropic.go−1707

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/bedrock.go−15

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/call_useragent.go−14

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/computer_use.go−427

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/error.go−67

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/google.go−11

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/provider_options.go−283

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/sanitize.go−33

This diff is too big to show here.

vendor/charm.land/fantasy/providers/azure/README.md−6

This diff is too big to show here.

vendor/charm.land/fantasy/providers/azure/azure.go−125

This diff is too big to show here.

vendor/charm.land/fantasy/providers/bedrock/README.md−10

This diff is too big to show here.

vendor/charm.land/fantasy/providers/bedrock/bedrock.go−87

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/README.md−63

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/auth.go−15

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/call_useragent.go−53

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/error.go−51

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/google.go−1488

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/provider_options.go−146

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/slice.go−11

This diff is too big to show here.

vendor/charm.land/fantasy/providers/internal/httpheaders/httpheaders.go−60

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/call_useragent.go−31

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/error.go−92

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/language_model.go−990

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/language_model_hooks.go−668

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/openai.go−220

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/provider_options.go−217

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/responses_language_model.go−1678

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/responses_options.go−395

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openaicompat/language_model_hooks.go−516

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openaicompat/openaicompat.go−140

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openaicompat/provider_options.go−161

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openrouter/language_model_hooks.go−1063

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openrouter/openrouter.go−121

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openrouter/provider_options.go−218

This diff is too big to show here.

vendor/charm.land/fantasy/providers/vercel/language_model_hooks.go−1074

This diff is too big to show here.

vendor/charm.land/fantasy/providers/vercel/provider_options.go−195

This diff is too big to show here.

vendor/charm.land/fantasy/providers/vercel/vercel.go−122

This diff is too big to show here.

vendor/charm.land/fantasy/retry.go−155

This diff is too big to show here.

vendor/charm.land/fantasy/schema/schema.go−442

This diff is too big to show here.

vendor/charm.land/fantasy/tool.go−176

This diff is too big to show here.

vendor/charm.land/fantasy/util.go−22

This diff is too big to show here.

vendor/charm.land/fantasy/version.go−12

This diff is too big to show here.

vendor/charm.land/fantasy/version.txt−1

This diff is too big to show here.

vendor/charm.land/glamour/v2/.editorconfig−18

This diff is too big to show here.

vendor/charm.land/glamour/v2/.gitattributes−2

This diff is too big to show here.

vendor/charm.land/glamour/v2/.gitignore−2

This diff is too big to show here.

vendor/charm.land/glamour/v2/.golangci.yml−44

This diff is too big to show here.

vendor/charm.land/glamour/v2/.goreleaser.yml−6

This diff is too big to show here.

vendor/charm.land/glamour/v2/CONTRIBUTING.md−23

This diff is too big to show here.

vendor/charm.land/glamour/v2/LICENSE−21

This diff is too big to show here.

vendor/charm.land/glamour/v2/README.md−129

This diff is too big to show here.

vendor/charm.land/glamour/v2/Taskfile.yml−25

This diff is too big to show here.

vendor/charm.land/glamour/v2/UPGRADE_GUIDE_V2.md−279

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/ansi.go−3

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/baseelement.go−157

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/blockelement.go−66

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/blockstack.go−95

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/codeblock.go−151

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/codespan.go−15

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/context.go−38

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/elements.go−481

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/emphasis.go−47

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/heading.go−80

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/image.go−57

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/link.go−112

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/listitem.go−29

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/margin.go−231

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/paragraph.go−63

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/renderer.go−166

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/style.go−252

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/table.go−206

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/table_links.go−234

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/task.go−27

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/templatehelper.go−86

This diff is too big to show here.

vendor/charm.land/glamour/v2/examples.sh−19

This diff is too big to show here.

vendor/charm.land/glamour/v2/gallery.sh−23

This diff is too big to show here.

vendor/charm.land/glamour/v2/glamour.go−294

This diff is too big to show here.

vendor/charm.land/glamour/v2/internal/autolink/autolink.go−55

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/README.md−565

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/ascii.json−87

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/dark.json−191

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/dracula.go−216

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/dracula.json−188

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/light.json−190

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/notty.json−87

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/pink.json−90

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/styles.go−691

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/tokyo-night.go−209

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/tokyo-night.json−182

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/tokyo_night.json−182

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/.editorconfig−18

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/.gitattributes−1

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/.gitignore−3

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/.golangci.yml−50

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/.goreleaser.yml−5

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/LICENSE−21

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/README.md−996

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/Taskfile.yaml−24

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/UPGRADE_GUIDE_V2.md−504

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/align.go−82

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/ansi_unix.go−8

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/ansi_windows.go−30

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/blending.go−196

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/borders.go−587

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/canvas.go−88

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/color.go−359

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/get.go−657

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/join.go−175

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/layer.go−327

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/lipgloss.go−3

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/position.go−134

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/query.go−92

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/ranges.go−48

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/runes.go−43

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/set.go−932

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/size.go−40

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/style.go−637

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/table/resizing.go−489

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/table/rows.go−130

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/table/table.go−568

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/table/util.go−44

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/terminal.go−124

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/tree/children.go−100

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/tree/enumerator.go−74

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/tree/renderer.go−165

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/tree/tree.go−407

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/unset.go−359

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/whitespace.go−76

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/wrap.go−113

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/writer.go−160

This diff is too big to show here.

vendor/charm.land/log/v2/.gitignore−17

This diff is too big to show here.

vendor/charm.land/log/v2/.golangci.yml−50

This diff is too big to show here.

vendor/charm.land/log/v2/.goreleaser.yml−6

This diff is too big to show here.

vendor/charm.land/log/v2/LICENSE−21

This diff is too big to show here.

vendor/charm.land/log/v2/README.md−367

This diff is too big to show here.

vendor/charm.land/log/v2/UPGRADE_GUIDE_V2.md−320

This diff is too big to show here.

vendor/charm.land/log/v2/context.go−23

This diff is too big to show here.

vendor/charm.land/log/v2/doc.go−3

This diff is too big to show here.

vendor/charm.land/log/v2/formatter.go−27

This diff is too big to show here.

vendor/charm.land/log/v2/json.go−157

This diff is too big to show here.

vendor/charm.land/log/v2/level.go−65

This diff is too big to show here.

vendor/charm.land/log/v2/logfmt.go−32

This diff is too big to show here.

vendor/charm.land/log/v2/logger.go−413

This diff is too big to show here.

vendor/charm.land/log/v2/logger_121.go−72

This diff is too big to show here.

vendor/charm.land/log/v2/logger_no121.go−69

This diff is too big to show here.

vendor/charm.land/log/v2/options.go−61

This diff is too big to show here.

vendor/charm.land/log/v2/pkg.go−248

This diff is too big to show here.

vendor/charm.land/log/v2/stdlog.go−67

This diff is too big to show here.

vendor/charm.land/log/v2/styles.go−83

This diff is too big to show here.

vendor/charm.land/log/v2/text.go−272

This diff is too big to show here.

vendor/charm.land/x/vcr/LICENSE−21

This diff is too big to show here.

vendor/charm.land/x/vcr/doc.go−3

This diff is too big to show here.

vendor/charm.land/x/vcr/hooks.go−33

This diff is too big to show here.

vendor/charm.land/x/vcr/marshaler.go−19

This diff is too big to show here.

vendor/charm.land/x/vcr/matcher.go−70

This diff is too big to show here.

vendor/charm.land/x/vcr/recorder.go−70

This diff is too big to show here.

vendor/cloud.google.com/go/LICENSE−202

This diff is too big to show here.

vendor/cloud.google.com/go/auth/CHANGES.md−483

This diff is too big to show here.

vendor/cloud.google.com/go/auth/LICENSE−202

This diff is too big to show here.

vendor/cloud.google.com/go/auth/README.md−40

This diff is too big to show here.

vendor/cloud.google.com/go/auth/auth.go−618

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/compute.go−102

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/detect.go−471

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/doc.go−45

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/filetypes.go−329

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/aws_provider.go−531

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/executable_provider.go−284

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/externalaccount.go−431

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/file_provider.go−78

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/info.go−74

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/programmatic_provider.go−30

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/url_provider.go−93

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/x509_provider.go−220

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccountuser/externalaccountuser.go−115

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/gdch/gdch.go−198

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/impersonate/idtoken.go−105

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/impersonate/impersonate.go−168

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/stsexchange/sts_exchange.go−167

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/selfsignedjwt.go−89

This diff is too big to show here.

vendor/cloud.google.com/go/auth/grpctransport/dial_socketopt.go−62

This diff is too big to show here.

vendor/cloud.google.com/go/auth/grpctransport/directpath.go−177

This diff is too big to show here.

vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go−675

This diff is too big to show here.

vendor/cloud.google.com/go/auth/grpctransport/pool.go−119

This diff is too big to show here.

vendor/cloud.google.com/go/auth/httptransport/httptransport.go−254

This diff is too big to show here.

vendor/cloud.google.com/go/auth/httptransport/transport.go−548

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/compute/compute.go−65

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/compute/manufacturer.go−22

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/compute/manufacturer_linux.go−23

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/compute/manufacturer_windows.go−46

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/credsfile/credsfile.go−63

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/credsfile/filetype.go−159

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/credsfile/parse.go−99

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/internal.go−285

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/jwt/jwt.go−208

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/retry/retry.go−117

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/cba.go−361

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/cert/default_cert.go−65

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/cert/enterprise_cert.go−54

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go−124

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/cert/workload_cert.go−138

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/headers/headers.go−61

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/s2a.go−138

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/transport.go−137

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/trustboundary/external_accounts_config_providers.go−100

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/trustboundary/trust_boundary.go−392

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/version.go−20

This diff is too big to show here.

vendor/cloud.google.com/go/auth/oauth2adapt/CHANGES.md−82

This diff is too big to show here.

vendor/cloud.google.com/go/auth/oauth2adapt/LICENSE−202

This diff is too big to show here.

vendor/cloud.google.com/go/auth/oauth2adapt/oauth2adapt.go−200

This diff is too big to show here.

vendor/cloud.google.com/go/auth/threelegged.go−382

This diff is too big to show here.

vendor/cloud.google.com/go/civil/civil.go−500

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/CHANGES.md−115

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/LICENSE−202

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/README.md−27

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/log.go−149

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/metadata.go−937

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/retry.go−117

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/retry_linux.go−31

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/syscheck.go−28

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/syscheck_linux.go−30

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/syscheck_windows.go−39

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/.gitignore−1

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/ARCHITECTURE.md−244

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/LICENSE−61

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/README.md−86

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/constants.go−65

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/data/xml/dom/xmldocument.go−73

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotification.go−88

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotificationmanager.go−53

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotificationmanagerforuser.go−68

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotifier.go−64

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/powershell.go.tmpl−14

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/tmpl.go−28

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/xml.go.tmpl−34

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/toast.go−225

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind.go−86

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_noop.go−19

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_windows.go−174

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/impl.go−179

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/procs.go−37

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/registry.go−110

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md−849

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txt−21

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.md−39

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.yml−29

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.go−44

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.go−53

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.go−173

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.go−264

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.go−17

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.go−57

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.go−175

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.go−77

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.go−260

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.go−201

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.go−50

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.go−159

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.go−135

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.go−133

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.go−123

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.go−148

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.go−24

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.go−212

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go−44

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.go−149

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.go−10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.go−55

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.go−10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.go−198

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.go−10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.go−27

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.go−138

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.go−94

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.go−75

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.go−236

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.go−72

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.go−40

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go−154

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.go−35

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.go−64

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.go−264

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.go−34

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go−276

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.go−55

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.go−83

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.go−396

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.go−281

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.go−109

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.go−15

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.go−15

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.go−48

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.go−9

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.go−89

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.go−41

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.go−191

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/LICENSE.txt−21

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/diag.go−51

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/doc.go−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/doc.go−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/errorinfo.go−46

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/exported/exported.go−129

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/doc.go−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/log.go−104

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/poller/util.go−155

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/temporal/resource.go−123

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/doc.go−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/uuid.go−76

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/.gitignore−14

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/CONTRIBUTING.md

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/LICENSE−21

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/README.md−242

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/SECURITY.md−6

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/commonmark.go−393

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/escape/escape.go−65

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/from.go−464

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/logo_five_years.png

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/markdown.go−212

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/utils.go−533

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/.gitignore−16

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/.travis.yml−9

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/LICENSE−21

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/Makefile−32

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/README.md−232

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/depth.go−129

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/pkg.go−184

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/LICENSE−21

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/README.md−52

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/heredoc.go−105

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.gitattributes−1

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.gitignore−10

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.golangci.yml−147

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/CODEOWNERS−1

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/LICENSE−22

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/README.md−89

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/SECURITY.md−41

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/backup.go−287

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/doc.go−22

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/ea.go−137

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/file.go−320

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/fileinfo.go−106

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/hvsock.go−582

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/doc.go−2

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/fs.go−262

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/security.go−12

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go−61

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go−20

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/socket.go−177

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go−69

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go−132

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pipe.go−586

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go−232

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go−16

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go−13

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go−27

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/privilege.go−196

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/reparse.go−131

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/sd.go−133

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/syscall.go−5

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/zsyscall_windows.go−378

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/.gitattributes−1

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/.gitignore−16

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/LICENSE−12

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/README.md−218

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/array.go−124

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/doc.go−123

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/expand.go−70

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/filter.go−163

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/iteration.go−61

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/manipulation.go−679

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/property.go−275

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/query.go−49

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/traversal.go−704

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/type.go−203

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/utilities.go−177

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.editorconfig−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.gitignore−28

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.golangci.yml−122

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.goreleaser.yml−34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/AGENTS.md−11

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/BUILD.bit−93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/COPYING−118

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/Dockerfile−64

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/Justfile−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/README.md−309

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/biome.json−6

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/chroma.jpg

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/coalesce.go−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/colour.go−192

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/delegate.go−161

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/doc.go−7

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/emitters.go−233

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatter.go−43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/api.go−57

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/html/html.go−692

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/json.go−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/svg/font_liberation_mono.go−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/svg/svg.go−222

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tokens.go−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tty_indexed.go−284

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tty_truecolour.go−76

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/iterator.go−93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexer.go−179

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/README.md−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/caddyfile.go−275

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/cl.go−243

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/dns.go−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/emacs.go−533

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abap.xml−154

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abnf.xml−66

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript.xml−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript_3.xml−163

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ada.xml−321

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/agda.xml−66

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/al.xml−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/alloy.xml−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ampl.xml−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/angular2.xml−109

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/antlr.xml−317

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apacheconf.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apl.xml−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/applescript.xml−151

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arangodb_aql.xml−174

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arduino.xml−322

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/armasm.xml−126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arturo.xml−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/atl.xml−165

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autohotkey.xml−78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autoit.xml−70

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/awk.xml−95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ballerina.xml−97

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash.xml−222

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash_session.xml−25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/batchfile.xml−660

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/beef.xml−120

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bibtex.xml−152

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bicep.xml−84

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/blitzbasic.xml−141

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bnf.xml−28

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bqn.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/brainfuck.xml−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c#.xml−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c++.xml−331

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c.xml−260

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c3.xml−374

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cap_n_proto.xml−122

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cassandra_cql.xml−137

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ceylon.xml−151

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfengine3.xml−197

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfstatement.xml−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chaiscript.xml−134

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chapel.xml−143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cheetah.xml−55

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/clojure.xml−71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cmake.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cobol.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coffeescript.xml−210

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/common_lisp.xml−184

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coq.xml−136

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/core.xml−79

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/crystal.xml−762

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/css.xml−323

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/csv.xml−53

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cue.xml−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cython.xml−372

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/d.xml−133

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dart.xml−213

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dax.xml−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/desktop_entry.xml−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/devicetree.xml−251

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/diff.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/django_jinja.xml−153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dns.xml−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/docker.xml−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dtd.xml−168

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dylan.xml−176

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ebnf.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elixir.xml−744

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elm.xml−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/emacslisp.xml−132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erb.xml−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erlang.xml−166

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/factor.xml−412

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fennel.xml−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fish.xml−159

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/forth.xml−78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortran.xml−102

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortranfixed.xml−71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fsharp.xml−245

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gas.xml−150

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript.xml−259

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript3.xml−270

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gemfile_lock.xml−81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gettext.xml−24

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gherkin.xml−263

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gleam.xml−100

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/glsl.xml−65

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gnuplot.xml−289

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/go_template.xml−114

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/graphql.xml−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groff.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groovy.xml−135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/handlebars.xml−147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hare.xml−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/haskell.xml−275

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hcl.xml−143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hexdump.xml−189

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlb.xml−131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlsl.xml−110

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/holyc.xml−252

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/html.xml−159

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hy.xml−104

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/idris.xml−216

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/igor.xml−47

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ini.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/io.xml−71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/iscdhcpd.xml−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/j.xml−157

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/janet.xml−48

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/java.xml−206

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/javascript.xml−160

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/json.xml−117

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonata.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonnet.xml−138

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/julia.xml−400

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jungle.xml−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kakoune.xml−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kdl.xml−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kotlin.xml−234

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lateralus.xml−184

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lean.xml−56

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lighttpd_configuration_file.xml−42

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lilypond.xml−133

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/llvm.xml−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lox.xml−78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lua.xml−158

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/luau.xml−173

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/makefile.xml−131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mako.xml−120

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mason.xml−89

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/materialize_sql_dialect.xml−155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mathematica.xml−60

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/matlab.xml−114

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mcfunction.xml−138

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/meson.xml−86

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/metal.xml−270

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/microcad.xml−139

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/minizinc.xml−82

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mlir.xml−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modelica.xml−106

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modula-2.xml−245

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mojo.xml−228

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/monkeyc.xml−153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonbit.xml−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonscript.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/morrowindscript.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/myghty.xml−77

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mysql.xml−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nasm.xml−126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/natural.xml−143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ndisasm.xml−123

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/newspeak.xml−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nginx_configuration_file.xml−101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nim.xml−211

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nix.xml−258

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nsis.xml−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nu.xml−126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objective-c.xml−510

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objectpascal.xml−142

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ocaml.xml−153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/octave.xml−101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/odin.xml−127

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/onesenterprise.xml−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openedge_abl.xml−101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openscad.xml−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/org_mode.xml−329

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pacmanconf.xml−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/perl.xml−400

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/php.xml−258

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pig.xml−105

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pkgconfig.xml−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pl_pgsql.xml−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plaintext.xml−21

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plutus_core.xml−105

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pony.xml−135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postgresql_sql_dialect.xml−155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postscript.xml−93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/povray.xml−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powerquery.xml−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powershell.xml−230

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prolog.xml−115

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promela.xml−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promql.xml−123

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/properties.xml−45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/protocol_buffer.xml−124

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prql.xml−161

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/psl.xml−213

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/puppet.xml−100

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python.xml−595

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python_2.xml−356

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qbasic.xml−173

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qml.xml−113

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/r.xml−128

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/racket.xml−260

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ragel.xml−149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/react.xml−236

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reasonml.xml−147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reg.xml−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rego.xml−94

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rexx.xml−127

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rgbasm.xml−239

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ring.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpgle.xml−176

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpm_spec.xml−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ruby.xml−728

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rust.xml−375

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sas.xml−191

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sass.xml−362

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scala.xml−274

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scdoc.xml−115

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scheme.xml−106

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scilab.xml−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scss.xml−373

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sed.xml−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sieve.xml−61

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smali.xml−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smalltalk.xml−294

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smarty.xml−79

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snbt.xml−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snobol.xml−95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/solidity.xml−291

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sourcepawn.xml−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/spade.xml−292

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sparql.xml−160

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sql.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/squidconf.xml−63

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/standard_ml.xml−548

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stas.xml−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stylus.xml−132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/swift.xml−207

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemd.xml−63

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemverilog.xml−181

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tablegen.xml−69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tal.xml−43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tasm.xml−135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcl.xml−272

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcsh.xml−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/templ.xml−315

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/termcap.xml−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terminfo.xml−84

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terraform.xml−149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tex.xml−113

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/thrift.xml−154

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/toml.xml−45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tradingview.xml−81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/transact-sql.xml−137

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turing.xml−82

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turtle.xml−170

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/twig.xml−155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/txtpb.xml−162

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typescript.xml−302

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscript.xml−178

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscriptcssdata.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscripthtmldata.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typst.xml−108

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ucode.xml−147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v.xml−355

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v_shell.xml−365

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vala.xml−72

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vb_net.xml−162

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/verilog.xml−158

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhdl.xml−171

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhs.xml−48

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/viml.xml−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vue.xml−295

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wat.xml−149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wdte.xml−43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webgpu_shading_language.xml−142

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webvtt.xml−283

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/whiley.xml−57

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xml.xml−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xorg.xml−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yaml.xml−132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yang.xml−99

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/z80_assembly.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zed.xml−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zig.xml−187

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/erb.go−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/gemtext.go−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/genshi.go−118

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/go.go−81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/haxe.go−647

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/html.go−8

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/http.go−131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/lexers.go−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/markdown.go−107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/markless.go−168

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/mysql.go−33

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/php.go−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/raku.go−1710

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/rst.go−89

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/svelte.go−70

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/typoscript.go−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/yaml_jinja.go−20

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/zed.go−24

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/mutators.go−201

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/pygments-lexers.txt−605

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/quick/quick.go−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/regexp.go−533

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/registry.go−228

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/remap.go−94

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/renovate.json5−25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/serialise.go−483

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/style.go−530

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/abap.xml−11

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/algol.xml−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/algol_nu.xml−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/api.go−95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/arduino.xml−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/ashen.xml−69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark-soft.xml−107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark.xml−107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/autumn.xml−36

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/average.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/base16-snazzy.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/borland.xml−26

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/bw.xml−23

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-frappe.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-latte.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-macchiato.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-mocha.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/colorful.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/compat.go−69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/darcula.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/doom-one.xml−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/doom-one2.xml−64

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/dracula.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/emacs.xml−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/evergarden.xml−33

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/friendly.xml−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/fruity.xml−19

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/github-dark.xml−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/github.xml−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/gruvbox-light.xml−34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/gruvbox.xml−34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/hr_high_contrast.xml−12

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/hrdark.xml−10

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/igor.xml−9

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-dragon.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-lotus.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-wave.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/lovelace.xml−53

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/manni.xml−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/modus-operandi.xml−13

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/modus-vivendi.xml−13

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/monokai.xml−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/monokailight.xml−26

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/murphy.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/native.xml−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/nord.xml−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/nordic.xml−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/onedark.xml−25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/onesenterprise.xml−10

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/paraiso-dark.xml−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/paraiso-light.xml−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/pastie.xml−45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/perldoc.xml−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/pygments.xml−42

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rainbow_dash.xml−40

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-dawn.xml−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-moon.xml−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine.xml−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rpgle.xml−30

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rrt.xml−19

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark.xml−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark256.xml−41

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-light.xml−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/swapoff.xml−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tango.xml−72

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-day.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-moon.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-night.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-storm.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/trac.xml−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vim.xml−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vs.xml−16

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vulcan.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/witchhazel.xml−31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/xcode-dark.xml−31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/xcode.xml−22

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/table.py−31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/test.jsonl−2

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/tokentype_enumer.go−588

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/types.go−357

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/.gitignore−2

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/LICENSE−19

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/README.md−19

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/backward_references.go−185

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/backward_references_hq.go−796

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bit_cost.go−436

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bit_reader.go−266

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bitwriter.go−56

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter.go−144

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_command.go−434

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_distance.go−433

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_literal.go−433

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/brotli_bit_stream.go−1435

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster.go−30

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_command.go−164

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_distance.go−326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_literal.go−326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/command.go−254

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/compress_fragment.go−834

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/compress_fragment_two_pass.go−775

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/constants.go−77

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/context.go−2176

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/decode.go−2581

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/dictionary.go−122890

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/dictionary_hash.go−32779

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encode.go−1220

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder.go−177

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder_dict.go−22

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder_fast.go−197

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/entropy_encode.go−592

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/entropy_encode_static.go−4399

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/fast_log.go−290

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/find_match_length.go−45

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/LICENSE−27

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/README.md−2

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/gzip.go−65

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/huffman_bit_writer.go−517

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/huffman_code.go−346

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/token.go−80

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/writer.go−66

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h10.go−287

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h5.go−214

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h6.go−216

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash.go−342

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_composite.go−93

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_forgetful_chain.go−252

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_longest_match_quickly.go−214

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_rolling.go−168

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/histogram.go−226

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/http.go−189

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/huffman.go−653

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/literal_cost.go−182

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain1.go−212

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain2.go−248

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain3.go−278

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/emitter.go−34

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/m0.go−175

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/m4.go−339

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/matchfinder.go−103

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/pathfinder.go−328

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/textencoder.go−53

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/trio.go−326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zdfast.go−258

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zfast.go−206

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zm.go−301

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/memory.go−66

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock.go−574

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_command.go−165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_distance.go−165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_literal.go−165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/params.go−37

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/platform.go−103

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/prefix.go−30

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/prefix_dec.go−723

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/quality.go−196

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/reader.go−111

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/ringbuffer.go−134

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/state.go−294

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/static_dict.go−662

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/static_dict_lut.go−75094

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/symbol_list.go−22

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/transform.go−641

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/utf8_util.go−70

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/util.go−7

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/write_bits.go−52

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/writer.go−162

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/.travis.yml−14

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/LICENSE−24

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/README.md−144

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/parser.go−889

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/pseudo_classes.go−458

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/selector.go−586

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/serialize.go−176

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/specificity.go−26

This diff is too big to show here.

vendor/github.com/atotto/clipboard/.travis.yml−22

This diff is too big to show here.

vendor/github.com/atotto/clipboard/LICENSE−27

This diff is too big to show here.

vendor/github.com/atotto/clipboard/README.md−48

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard.go−20

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_darwin.go−52

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_plan9.go−42

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_unix.go−149

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_windows.go−157

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/NOTICE.txt−3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/accountid_endpoint_mode.go−18

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/checksum.go−33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/config.go−254

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/context.go−22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/credential_cache.go−235

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/credentials.go−234

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/auto.go−38

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/configuration.go−43

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/defaults.go−50

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/doc.go−2

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaultsmode.go−95

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/doc.go−62

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/endpoints.go−247

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/errors.go−9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/from_ptr.go−365

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/logging.go−119

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/logging_generate.go−95

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/metadata.go−213

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/middleware.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname.go−24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname_go115.go−24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/recursion_detection.go−94

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id.go−27

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go−57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/user_agent.go−398

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md−203

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/debug.go−144

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/decode.go−218

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/encode.go−167

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/error.go−23

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/headers.go−24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/middleware.go−71

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport_go117.go−12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header.go−175

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header_value.go−521

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/message.go−99

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/array.go−61

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/encoder.go−80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/map.go−78

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/middleware.go−62

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/object.go−68

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/value.go−117

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/restjson/decoder_util.go−85

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/xml/error_utils.go−48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/none.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_bucket.go−96

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_rate_limit.go−83

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/request.go−25

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/restrict_file_permissions.go−21

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive.go−156

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_ratelimit.go−158

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_token_bucket.go−83

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/attempt_metrics.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/doc.go−80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/errors.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/jitter_backoff.go−124

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/metadata.go−52

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/middleware.go−487

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retry.go−103

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retryable_error.go−228

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/standard.go−343

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/throttle_error.go−60

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/timeout_error.go−52

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retryer.go−127

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/runtime.go−14

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/cache.go−115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/const.go−40

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/header_rules.go−82

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/headers.go−70

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/hmac.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/host.go−75

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/scope.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/time.go−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/util.go−80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go−420

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/presign_middleware.go−127

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/stream.go−86

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/v4.go−564

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/to_ptr.go−297

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/client.go−355

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/content_type.go−42

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error.go−33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error_middleware.go−56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/timeout_read_closer.go−109

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/types.go−42

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/version.go−8

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md−1097

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/auth_scheme_preference.go−19

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/config.go−237

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/defaultsmode.go−47

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/doc.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/env_config.go−966

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/generate.go−4

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/errors.go−22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/ini.go−56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/parse.go−109

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/sections.go−157

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/strings.go−89

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/token.go−32

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/tokenize.go−92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/value.go−93

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/load_options.go−1371

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/local.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/provider.go−802

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve.go−458

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve_bearer_token.go−122

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve_credentials.go−650

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/shared_config.go−1704

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md−990

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/doc.go−4

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/doc.go−58

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/provider.go−241

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/auth.go−48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/client.go−165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/endpoints.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/middleware.go−164

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/provider.go−207

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/dpop.go−150

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/file.go−14

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/provider.go−184

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/token.go−110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/doc.go−92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/provider.go−296

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/doc.go−81

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_cached_token.go−232

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_credentials_provider.go−165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_token_provider.go−147

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/static_provider.go−63

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/assume_role_provider.go−338

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/web_identity_provider.go−181

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md−584

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_client.go−358

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetDynamicData.go−77

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetIAMInfo.go−103

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetInstanceIdentityDocument.go−110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetMetadata.go−77

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetRegion.go−73

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetToken.go−119

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetUserData.go−61

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/auth.go−48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/doc.go−12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/endpoints.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/internal/config/resolvers.go−114

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/request_middleware.go−313

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/token_provider.go−261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/auth.go−45

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/scheme.go−191

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_adapter.go−43

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_signer_adapter.go−35

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/credentials_adapter.go−46

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/smithy.go−2

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter.go−57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter_eventstream.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md−544

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/config.go−65

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/endpoints.go−57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/context/context.go−65

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/arn.go−94

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/doc.go−3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/generate.go−7

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/host.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partition.go−76

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.go−496

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json−267

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/endpoints.go−201

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md−519

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/endpoints.go−302

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/rand/rand.go−33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/interfaces.go−9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/time.go−74

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdkio/byte.go−12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/shareddefaults/shared_config.go−47

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/strings/strings.go−11

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/LICENSE−28

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/docs.go−7

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/singleflight.go−210

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/timeconv/duration.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md−486

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/credentials.go−141

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/error.go−17

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/compare.go−30

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/ecc.go−113

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/const.go−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/header_rules.go−82

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/headers.go−68

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/hmac.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/host.go−75

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/time.go−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/util.go−64

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/middleware.go−118

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/presign_middleware.go−117

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/smithy.go−92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/v4a.go−520

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md−220

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/accept_encoding_gzip.go−176

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/doc.go−22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md−571

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/context.go−56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/doc.go−3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/middleware.go−110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/CHANGELOG.md−85

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_client.go−945

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_CreateOAuth2Token.go−212

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteConsoleAuthorizationConfiguration.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteResourcePermissionStatement.go−196

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetConsoleAuthorizationConfiguration.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetResourcePolicy.go−155

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_ListResourcePermissionStatements.go−261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutConsoleAuthorizationConfiguration.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutResourcePermissionStatement.go−216

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/auth.go−361

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/deserializers.go−2474

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/doc.go−9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/endpoints.go−854

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/generated.json−40

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/internal/endpoints/endpoints.go−333

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/options.go−242

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/serializers.go−724

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/enums.go−46

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/errors.go−247

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/types.go−162

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/validators.go−111

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md−792

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_client.go−929

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_GetRoleCredentials.go−165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccountRoles.go−263

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccounts.go−261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_Logout.go−164

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/auth.go−379

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/deserializers.go−1171

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/doc.go−27

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/endpoints.go−570

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/generated.json−35

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints/endpoints.go−628

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/options.go−238

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/serializers.go−309

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/errors.go−115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/types.go−63

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/validators.go−175

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md−790

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_client.go−929

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateToken.go−235

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateTokenWithIAM.go−282

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_RegisterClient.go−206

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_StartDeviceAuthorization.go−188

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/auth.go−373

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/deserializers.go−2244

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/doc.go−49

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/endpoints.go−570

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/generated.json−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints/endpoints.go−628

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/options.go−238

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/serializers.go−512

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/enums.go−44

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/errors.go−430

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/types.go−25

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/validators.go−184

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md−832

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_client.go−1115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRole.go−544

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithSAML.go−455

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithWebIdentity.go−472

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoot.go−229

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_DecodeAuthorizationMessage.go−189

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetAccessKeyInfo.go−180

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetCallerIdentity.go−192

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetDelegatedAccessToken.go−169

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetFederationToken.go−393

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetSessionToken.go−239

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetWebIdentityToken.go−192

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/auth.go−377

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/deserializers.go−3456

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/doc.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/endpoints.go−683

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/generated.json−45

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints/endpoints.go−585

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/options.go−286

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/serializers.go−1198

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/errors.go−363

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/types.go−144

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/validators.go−433

This diff is too big to show here.

vendor/github.com/aws/smithy-go/.gitignore−29

This diff is too big to show here.

vendor/github.com/aws/smithy-go/.travis.yml−28

This diff is too big to show here.

vendor/github.com/aws/smithy-go/AGENTS.md−172

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CHANGELOG.md−454

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CODE_OF_CONDUCT.md−4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CONTRIBUTING.md−90

This diff is too big to show here.

vendor/github.com/aws/smithy-go/LICENSE−175

This diff is too big to show here.

vendor/github.com/aws/smithy-go/Makefile−130

This diff is too big to show here.

vendor/github.com/aws/smithy-go/NOTICE−1

This diff is too big to show here.

vendor/github.com/aws/smithy-go/README.md−107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/auth.go−3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/docs.go−3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/middleware.go−104

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/token.go−50

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/token_cache.go−208

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/identity.go−47

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/option.go−25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/scheme_id.go−20

This diff is too big to show here.

vendor/github.com/aws/smithy-go/changelog-template.json−9

This diff is too big to show here.

vendor/github.com/aws/smithy-go/context/suppress_expired.go−81

This diff is too big to show here.

vendor/github.com/aws/smithy-go/doc.go−2

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document.go−10

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/doc.go−12

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/document.go−239

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/errors.go−75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/doc.go−4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/encoding.go−40

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/encode.go−123

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/header.go−122

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/path_replace.go−108

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/query.go−107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/uri.go−111

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/array.go−35

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/constants.go−15

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/decoder_util.go−139

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/encoder.go−30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/escape.go−198

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/object.go−40

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/value.go−154

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/array.go−49

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/constants.go−10

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/doc.go−49

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/element.go−91

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/encoder.go−51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/error_utils.go−51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/escape.go−137

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/map.go−53

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/value.go−302

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/xml_decoder.go−154

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/endpoint.go−23

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/bdd/evaluate.go−35

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/doc.go−4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/split.go−16

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/string_slice.go−18

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/strings.go−25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/uri.go−133

This diff is too big to show here.

vendor/github.com/aws/smithy-go/errors.go−137

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/const.go−24

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/debug.go−144

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/decode.go−218

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/deserializer.go−294

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/encode.go−167

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/error.go−23

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/header.go−175

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/header_value.go−521

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/message.go−99

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/serializer.go−228

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/signer.go−82

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/types.go−26

This diff is too big to show here.

vendor/github.com/aws/smithy-go/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/LICENSE−28

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/docs.go−8

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/singleflight.go−210

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/byte.go−12

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/doc.go−2

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/reader.go−16

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/ringbuffer.go−94

This diff is too big to show here.

vendor/github.com/aws/smithy-go/local-mod-replace.sh−39

This diff is too big to show here.

vendor/github.com/aws/smithy-go/logging/logger.go−82

This diff is too big to show here.

vendor/github.com/aws/smithy-go/metrics/metrics.go−136

This diff is too big to show here.

vendor/github.com/aws/smithy-go/metrics/nop.go−98

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/context.go−41

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/doc.go−67

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/eventstream_middleware.go−21

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/logging.go−46

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/metadata.go−65

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/middleware.go−71

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/ordered_group.go−270

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/stack.go−209

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/stack_values.go−100

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_build.go−298

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_deserialize.go−300

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_finalize.go−298

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_initialize.go−299

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_serialize.go−305

This diff is too big to show here.

vendor/github.com/aws/smithy-go/modman.toml−9

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/gzip.go−30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/middleware_capture_request_compression.go−52

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/request_compression.go−103

This diff is too big to show here.

vendor/github.com/aws/smithy-go/properties.go−69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/doc.go−5

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/from_ptr.go−601

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/gen_scalars.go−83

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/to_ptr.go−499

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/doc.go−3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/rand.go−31

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/uuid.go−87

This diff is too big to show here.

vendor/github.com/aws/smithy-go/schema.go−328

This diff is too big to show here.

vendor/github.com/aws/smithy-go/schema_ext.go−37

This diff is too big to show here.

vendor/github.com/aws/smithy-go/serde.go−229

This diff is too big to show here.

vendor/github.com/aws/smithy-go/sync/error.go−53

This diff is too big to show here.

vendor/github.com/aws/smithy-go/time/time.go−134

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/context.go−96

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/nop.go−32

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/tracing.go−95

This diff is too big to show here.

vendor/github.com/aws/smithy-go/trait.go−21

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/http.go−69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/index.go−107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/serde.go−56

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/traits.go−72

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/auth.go−30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/auth_schemes.go−45

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/checksum_middleware.go−70

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/client.go−161

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/doc.go−5

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/eventstream.go−209

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/eventstream_middleware.go−69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/headerlist.go−163

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/host.go−89

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/interceptor.go−321

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/interceptor_middleware.go−325

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/internal/io/safe.go−75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/md5_checksum.go−25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/metrics.go−204

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_close_response_body.go−79

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_content_length.go−84

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_header_comment.go−81

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_headers.go−167

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_http_logging.go−75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_metadata.go−51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_min_proto.go−79

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/properties.go−80

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/protocol.go−27

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/request.go−188

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/response.go−34

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/time.go−13

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/url.go−44

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/user_agent.go−37

This diff is too big to show here.

vendor/github.com/aws/smithy-go/type_registry.go−70

This diff is too big to show here.

vendor/github.com/aws/smithy-go/validation.go−140

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/LICENSE-BSD−27

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/LICENSE-MIT−21

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/Makefile−4

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/README.md−142

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/diff.go−177

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/export.go−16

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/common.go−179

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/doc.go−156

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/export.go−11

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/git.sh−33

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/labels.go−55

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/old.go−475

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/sequence.go−70

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/merge.go−81

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/ndiff.go−118

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/unified.go−314

This diff is too big to show here.

vendor/github.com/aymerick/douceur/LICENSE−22

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/declaration.go−60

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/rule.go−230

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/stylesheet.go−25

This diff is too big to show here.

vendor/github.com/aymerick/douceur/parser/parser.go−409

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/LICENSE−27

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/README.md−5

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/list.go−235

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/.codecov.yml−10

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/.gitignore−32

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/LICENSE−22

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/README.md−495

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/UPGRADING.md−63

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/doublestar.go−13

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/glob.go−497

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/globoptions.go−188

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/globwalk.go−438

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/match.go−419

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils.go−165

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils_unix.go−19

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils_windows.go−43

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/validate.go−80

This diff is too big to show here.

vendor/github.com/buger/jsonparser/.gitignore−12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/.travis.yml−12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/Dockerfile−12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/LICENSE−21

This diff is too big to show here.

vendor/github.com/buger/jsonparser/Makefile−36

This diff is too big to show here.

vendor/github.com/buger/jsonparser/README.md−361

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes.go−47

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes_safe.go−25

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes_unsafe.go−44

This diff is too big to show here.

vendor/github.com/buger/jsonparser/escape.go−173

This diff is too big to show here.

vendor/github.com/buger/jsonparser/fuzz.go−117

This diff is too big to show here.

vendor/github.com/buger/jsonparser/oss-fuzz-build.sh−47

This diff is too big to show here.

vendor/github.com/buger/jsonparser/parser.go−1318

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/LICENSE.txt−22

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/README.md−74

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/testall.sh−10

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash.go−243

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s−209

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s−183

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_asm.go−15

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_other.go−76

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_safe.go−16

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go−58

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/.gitignore−2

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/LICENSE−21

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/Makefile−101

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/README.md−193

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/adapters.go−102

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent.go−73

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent_portable.go−134

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent_unix.go−146

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_portable.go−37

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_unix.go−59

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_windows.go−156

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk.go−697

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_darwin.go−122

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_portable.go−65

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_unix.go−131

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/go.LICENSE−27

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent.go−85

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_aix.go−29

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_dragonfly.go−54

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_freebsd.go−46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_js.go−27

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_linux.go−50

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_netbsd.go−46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_openbsd.go−46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_solaris.go−29

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/doc.go−2

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go120.go−31

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go121.go−15

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin.go−93

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_amd64.1_13.s−22

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_arm64.1_13.s−22

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.gitignore−4

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.release-please-manifest.json−3

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.stats.yml−4

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/Brewfile−1

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/CHANGELOG.md−641

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/CONTRIBUTING.md−65

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/LICENSE−8

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/README.md−999

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/SECURITY.md−27

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/aliases.go−72

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/api.md−545

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/bedrock/bedrock.go−295

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/beta.go−374

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betafile.go−273

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessage.go−11734

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessagebatch.go−925

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessageutil.go−459

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamodel.go−151

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betaskill.go−362

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betaskillversion.go−373

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betatoolrunner.go−435

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/client.go−157

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/completion.go−196

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/field.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apierror/apierror.go−58

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/encoder.go−473

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/form.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/richparam.go−21

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/tag.go−51

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/decoder.go−709

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/encoder.go−392

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/enum.go−145

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/field.go−23

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/port.go−120

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/registry.go−59

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/subfield.go−68

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/tag.go−47

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/union.go−209

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/encoder.go−414

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/query.go−55

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/richparam.go−20

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/tag.go−44

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/decode.go−1325

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/encode.go−1396

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/fold.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/indent.go−182

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/scanner.go−610

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/sentinel/null.go−47

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/shims/shims.go−113

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/stream.go−512

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tables.go−218

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tags.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/time.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/field.go−30

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/union.go−49

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/requestconfig/requestconfig.go−638

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/version.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/message.go−9436

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/messagebatch.go−827

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/messageutil.go−413

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/model.go−151

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/option/middleware.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/option/requestoption.go−285

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/jsonl/jsonl.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/pagination/pagination.go−351

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/encoder.go−109

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/null.go−19

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/option.go−122

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/param.go−189

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/respjson/respjson.go−88

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/ssestream/ssestream.go−198

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/release-please-config.json−68

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/schemautil.go−244

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/shared/constant/constants.go−487

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/shared/shared.go−346

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/tools.md−292

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/vertex/vertex.go−134

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/.golangci.yml−47

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/.goreleaser.yml−6

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/README.md−109

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/doc.go−4

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env.go−294

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env_other.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env_windows.go−40

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/profile.go−108

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/writer.go−171

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.gitignore−4

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.release-please-manifest.json−3

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.stats.yml−4

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/Brewfile−1

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/CHANGELOG.md−1171

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/CONTRIBUTING.md−65

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/LICENSE−201

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/MIGRATION.md−284

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/README.md−1007

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/SECURITY.md−29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/api.md−774

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audio.go−61

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiospeech.go−179

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiotranscription.go−950

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiotranslation.go−120

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/azure/azure.go−269

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/batch.go−464

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/beta.go−36

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betaassistant.go−2284

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkit.go−125

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkitsession.go−83

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkitthread.go−1564

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathread.go−1574

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadmessage.go−1717

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadrun.go−974

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadrunstep.go−1396

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chat.go−30

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chatcompletion.go−3521

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chatcompletionmessage.go−100

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/client.go−185

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/completion.go−436

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/container.go−648

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/containerfile.go−287

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/containerfilecontent.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/api.md−31

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/conversation.go−493

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/item.go−1082

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/embedding.go−207

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/field.go−45

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/file.go−352

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuning.go−35

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningalpha.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningalphagrader.go−675

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningcheckpoint.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningcheckpointpermission.go−352

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningjob.go−884

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningjobcheckpoint.go−152

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningmethod.go−1487

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/grader.go−28

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/gradergradermodel.go−1753

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/image.go−1337

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apierror/apierror.go−58

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/encoder.go−473

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/form.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/richparam.go−20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/tag.go−72

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/decoder.go−688

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/encoder.go−371

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/enum.go−140

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/field.go−23

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/port.go−120

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/registry.go−51

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/subfield.go−67

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/tag.go−69

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/union.go−208

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/encoder.go−394

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/query.go−55

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/richparam.go−20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/tag.go−44

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/decode.go−1324

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/encode.go−1396

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/fold.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/indent.go−182

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/scanner.go−610

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/sentinel/null.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/shims/shims.go−113

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/stream.go−512

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tables.go−218

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tags.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/time.go−61

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/paramutil/field.go−30

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/paramutil/union.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/requestconfig/requestconfig.go−644

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/version.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/model.go−137

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/moderation.go−489

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/option/middleware.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/option/requestoption.go−299

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/pagination/pagination.go−329

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/encoder.go−109

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/null.go−19

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/option.go−122

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/param.go−186

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/respjson/respjson.go−88

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/ssestream/ssestream.go−247

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/polling.go−129

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/api.md−55

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/call.go−133

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/clientsecret.go−1826

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/realtime.go−1979

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/release-please-config.json−68

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/api.md−240

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/inputitem.go−135

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/inputtoken.go−336

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/response.go−21786

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/shared/constant/constants.go−1143

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/shared/shared.go−1183

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skill.go−292

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillcontent.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillversion.go−283

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillversioncontent.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/streamaccumulator.go−215

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/upload.go−238

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/uploadpart.go−115

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstore.go−911

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstorefile.go−535

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstorefilebatch.go−427

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/video.go−677

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/api.md−20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/webhook.go−1306

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.gitattributes−1

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.golangci.yml−48

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.goreleaser.yml−5

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/README.md−161

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/TUTORIAL.md−175

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/border.go−231

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/buffer.go−831

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cancelreader_other.go−16

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cancelreader_windows.go−139

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cell.go−465

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console.go−219

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console_unix.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console_windows.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cursor.go−22

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/decoder.go−2102

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/doc.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/environ.go−32

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/event.go−567

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/casso/math.go−172

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/casso/solver.go−275

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/lru/lru.go−69

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/key.go−762

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/key_table.go−664

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/cache.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/constraint.go−174

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/flex.go−210

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/layout.go−973

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/padding.go−66

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/logger.go−6

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/mouse.go−150

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_bsd.go−165

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_default.go−12

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_fallback.go−158

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_linux.go−175

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_select.go−156

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_solaris.go−12

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_windows.go−217

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/screen/context.go−379

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/screen/screen.go−117

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/styled.go−337

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tabstop.go−142

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal.go−394

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly.go−10

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly_other.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_other.go−22

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader.go−503

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader_other.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader_windows.go−336

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer.go−1639

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hardscroll.go−243

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hashmap.go−298

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_screen.go−837

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly.go−10

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly_other.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_unix.go−56

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_windows.go−77

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty.go−42

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_other.go−26

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_unix.go−39

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_windows.go−39

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/utils.go−15

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/uv.go−406

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch_other.go−17

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch_unix.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/window.go−147

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ansi.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ascii.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/background.go−178

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/c0.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/c1.go−72

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/charset.go−55

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/clipboard.go−75

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/color.go−784

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ctrl.go−156

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/cursor.go−637

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/cwd.go−26

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/doc.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/finalterm.go−67

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/focus.go−9

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/graphics.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/hyperlink.go−28

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/inband.go−24

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/iterm2.go−18

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/keypad.go−28

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty.go−90

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/decoder.go−86

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/encoder.go−64

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/graphics.go−414

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/options.go−373

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/writer.go−187

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/method.go−196

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mode.go−690

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mode_deprecated.go−495

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/modes.go−65

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mouse.go−172

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/notification.go−32

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/palette.go−34

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser.go−417

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/const.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/seq.go−136

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/transition_table.go−273

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_decode.go−525

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_handler.go−60

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_sync.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/passthrough.go−60

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/paste.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/progress.go−49

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/reset.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/screen.go−410

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/sgr.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/status.go−168

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/style.go−819

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/termcap.go−41

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/title.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/truncate.go−290

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/urxvt.go−17

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/util.go−92

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/width.go−107

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/winop.go−59

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/wrap.go−472

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/xterm.go−138

This diff is too big to show here.

vendor/github.com/charmbracelet/x/editor/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/editor/editor.go−140

This diff is too big to show here.

vendor/github.com/charmbracelet/x/etag/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/etag/etag.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/charmtone/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/charmtone/charmtone.go−443

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/golden/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/golden/golden.go−83

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/ordered/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/ordered/ordered.go−42

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/slice/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/slice/slice.go−148

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/contains.go−16

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/join.go−134

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/config.go−118

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/lsps.json−367

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/overrides.go−85

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/client.go−875

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/language.go−158

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/LICENSE−27

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/interface.go−132

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/pattern_interfaces.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tables.go−31

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsdocument-changes.go−83

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsjson.go−3072

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsprotocol.go−6963

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/uri.go−192

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/sync.go−240

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/types.go−93

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/connection.go−130

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/router.go−107

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/transport.go−214

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term.go−51

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_other.go−39

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_plan9.go−118

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix.go−96

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix_bsd.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix_other.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_windows.go−87

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/terminal.go−12

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/util.go−47

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_bsd.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_darwin.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_other.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_bsd.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_darwin.go−10

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_linux.go−14

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios.go−249

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_bsd.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_linux.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_other.go−15

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_solaris.go−26

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/doc.go−4

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/syscall_windows.go−14

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/types.go−221

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/types_windows.go−142

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/zsyscall_windows.go−77

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/.gitignore−3

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/AGENTS.md−51

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/CHANGELOG.md−129

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/LICENSE−21

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/README.md−190

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/gen.go−3

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/graphemes.go−73

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/options.go−30

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/trie.go−1699

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/truncate.go−149

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/width.go−239

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/LICENSE−21

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/README.md−120

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi.go−138

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi8.go−79

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go−144

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go−25

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go−205

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go−1717

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/README.md−121

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/bleve_compat.go−104

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/iterator.go−126

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/joiners.go−41

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/reader.go−34

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/seek.go−43

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/splitfunc.go−269

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/trie.go−3774

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/.golangci.yml−60

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md−453

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/COPYING.md−447

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/LICENSE.BSD−28

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/LICENSE.MPL-2.0−373

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/README.md−184

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/VERSION−1

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/codecov.yml−29

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/doc.go−47

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/internal/consts/consts.go−15

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/join.go−169

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/vfs.go−37

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/LICENSE−15

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/bypass.go−145

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/bypasssafe.go−38

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/common.go−341

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/config.go−306

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/doc.go−211

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/dump.go−509

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/format.go−419

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/spew.go−148

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/.gitignore−29

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/LICENSE.md−22

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/README.md−182

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/helper.go−36

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id.go−45

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_bsd.go−42

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_darwin.go−37

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_linux.go−27

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_windows.go−23

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/logo.png

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/makefile−12

This diff is too big to show here.

vendor/github.com/disintegration/imaging/.travis.yml−12

This diff is too big to show here.

vendor/github.com/disintegration/imaging/LICENSE−21

This diff is too big to show here.

vendor/github.com/disintegration/imaging/README.md−226

This diff is too big to show here.

vendor/github.com/disintegration/imaging/adjust.go−253

This diff is too big to show here.

vendor/github.com/disintegration/imaging/convolution.go−148

This diff is too big to show here.

vendor/github.com/disintegration/imaging/doc.go−7

This diff is too big to show here.

vendor/github.com/disintegration/imaging/effects.go−169

This diff is too big to show here.

vendor/github.com/disintegration/imaging/histogram.go−52

This diff is too big to show here.

vendor/github.com/disintegration/imaging/io.go−444

This diff is too big to show here.

vendor/github.com/disintegration/imaging/resize.go−595

This diff is too big to show here.

vendor/github.com/disintegration/imaging/scanner.go−285

This diff is too big to show here.

vendor/github.com/disintegration/imaging/tools.go−249

This diff is too big to show here.

vendor/github.com/disintegration/imaging/transform.go−268

This diff is too big to show here.

vendor/github.com/disintegration/imaging/utils.go−167

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/.gitignore−29

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/ATTRIB−133

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/LICENSE−21

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/README.md−283

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/Taskfile.yml−64

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/bufferpool.go−76

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/fastclock.go−141

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/indexof.go−394

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/math.go−15

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/runes.go−58

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/searchvalues.go−180

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/match.go−455

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/options.go−157

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/regexp.go−717

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/regexp_codegen.go−70

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/replace.go−357

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/runner.go−2197

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/split.go−67

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/stringprefixfilter.go−375

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/charclass.go−1507

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/code.go−316

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/escape.go−94

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/fuzz.go−21

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/optimizations.go−672

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/parser.go−2529

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/prefix.go−943

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/prefixanalyzer.go−1491

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/replacerdata.go−87

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/tree.go−2362

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/unicode_alias_tables.go−6058

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/writer.go−500

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/.travis.yml−21

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/LICENSE−21

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/README.markdown−124

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/big.go−31

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/bigbytes.go−189

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/bytes.go−143

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/comma.go−116

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/commaf.go−41

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/ftoa.go−49

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/humanize.go−8

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/number.go−192

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/ordinals.go−25

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/si.go−127

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/times.go−117

This diff is too big to show here.

vendor/github.com/ebitengine/purego/.gitignore−1

This diff is too big to show here.

vendor/github.com/ebitengine/purego/LICENSE−201

This diff is too big to show here.

vendor/github.com/ebitengine/purego/README.md−119

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_amd64.h−99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_arm64.h−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_loong64.h−60

This diff is too big to show here.

vendor/github.com/ebitengine/purego/cgo.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlerror.go−17

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn.go−99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_android.go−34

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_darwin.go−20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_freebsd.go−14

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_linux.go−16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_netbsd.go−15

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_freebsd.go−11

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_linux.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_netbsd.go−9

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_playground.go−24

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_stubs.s−22

This diff is too big to show here.

vendor/github.com/ebitengine/purego/func.go−564

This diff is too big to show here.

vendor/github.com/ebitengine/purego/gen.go−6

This diff is too big to show here.

vendor/github.com/ebitengine/purego/go_runtime.go−13

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/dlfcn_cgo_unix.go−56

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/empty.go−6

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/syscall_cgo_unix.go−55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_amd64.h−99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_arm64.h−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_loong64.h−60

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_ppc64x.h−195

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_386.s−29

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_amd64.s−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm.s−52

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm64.s−36

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_loong64.s−40

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_ppc64le.s−82

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_riscv64.s−78

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_s390x.s−55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/callbacks.go−93

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/doc.go−32

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/fakecgo.go−14

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/freebsd.go−27

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_darwin.go−88

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_freebsd.go−100

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go−72

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_linux.go−100

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_netbsd.go−106

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_setenv.go−18

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_util.go−38

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/iscgo.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo.go−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_darwin.go−26

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_freebsd.go−20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_linux.go−20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_netbsd.go−26

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/netbsd.go−23

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/setenv.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_386.s−107

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_amd64.s−107

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm.s−81

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm64.s−84

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_loong64.s−88

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_ppc64le.s−227

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_riscv64.s−72

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols.go−165

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_darwin.go−59

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_freebsd.go−48

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_linux.go−48

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_netbsd.go−59

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_darwin.s−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_freebsd.s−16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_linux.s−16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_netbsd.s−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_stubs.s−55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/strings/strings.go−40

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go124.go−15

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go125.go−12

This diff is too big to show here.

vendor/github.com/ebitengine/purego/is_ios.go−13

This diff is too big to show here.

vendor/github.com/ebitengine/purego/nocgo.go−25

This diff is too big to show here.

vendor/github.com/ebitengine/purego/objc/objc_block_darwin.go−272

This diff is too big to show here.

vendor/github.com/ebitengine/purego/objc/objc_runtime_darwin.go−709

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_386.go−41

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_amd64.go−286

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_arm.go−85

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_arm64.go−549

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_loong64.go−213

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_ppc64le.go−143

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_riscv64.go−143

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_s390x.go−143

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_386.s−147

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_amd64.s−170

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_arm.s−142

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_arm64.s−97

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_loong64.s−96

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_ppc64le.s−120

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_riscv64.s−101

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_s390x.s−114

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_386.s−226

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_arm.s−89

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_arm64.s−70

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_loong64.s−75

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_ppc64le.s−114

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_riscv64.s−79

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_s390x.s−109

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall.go−83

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_32bit.go−109

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_cgo_linux.go−21

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_sysv.go−317

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_sysv_others.go−28

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_sysv_stackargs.go−33

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_windows.go−46

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_386.s−4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_amd64.s−2014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_arm.s−4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_arm64.s−4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_loong64.s−4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_ppc64le.s−4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_riscv64.s−4051

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_s390x.s−4015

This diff is too big to show here.

vendor/github.com/esiqveland/notify/.gitignore−1

This diff is too big to show here.

vendor/github.com/esiqveland/notify/LICENSE.txt−27

This diff is too big to show here.

vendor/github.com/esiqveland/notify/README.md−54

This diff is too big to show here.

vendor/github.com/esiqveland/notify/doc.go−18

This diff is too big to show here.

vendor/github.com/esiqveland/notify/notification.go−547

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/.gitignore

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/LICENSE.txt−19

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/Makefile−10

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/README.md−95

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/capture_metrics.go−121

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/docs.go−10

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/wrap_generated.go−16179

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/.cirrus.yml−14

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/.gitignore−10

This diff is too big to show here.